/** * Get the Export Data * * @access public * @since 1.4 * @return arr $data The data for the CSV file */ public function get_data() { $data = array(); // Export all transactions $offset = 30 * ($this->step - 1); $txn_args = array('post_type' => 'mdjm-transaction', 'posts_per_page' => 30, 'offset' => $offset, 'paged' => $this->step, 'post_status' => array('mdjm-income', 'mdjm-expenditure'), 'order' => 'ASC', 'orderby' => 'date'); if (!empty($this->start) || !empty($this->end)) { $txn_args['date_query'] = array(array('after' => date('Y-n-d 00:00:00', strtotime($this->start)), 'before' => date('Y-n-d 23:59:59', strtotime($this->end)), 'inclusive' => true)); } if (!empty($this->status) && is_array($this->status)) { $meta_query = array(); foreach ($this->status as $txn_status) { $meta_query[] = array('key' => '_mdjm_txn_status', 'value' => $txn_status); } $txn_args['meta_query'] = array('relation' => 'OR', $meta_query); } $all_txns = get_posts($txn_args); if ($all_txns) { $i = 0; $income = 0; $expense = 0; foreach ($all_txns as $txn) { $mdjm_txn = new MDJM_Txn($txn->ID); $data[$i]['id'] = $mdjm_txn->ID; $data[$i]['date'] = date('d-M-Y', strtotime($mdjm_txn->post_date)); $data[$i]['status'] = $mdjm_txn->payment_status; $data[$i]['income'] = 'mdjm-income' == $mdjm_txn->post_status ? mdjm_format_amount($mdjm_txn->price) : ''; $data[$i]['expense'] = 'mdjm-expenditure' == $mdjm_txn->post_status ? mdjm_format_amount($mdjm_txn->price) : ''; $data[$i]['to_from'] = mdjm_get_txn_recipient_name($mdjm_txn->ID); $data[$i]['type'] = $mdjm_txn->get_type(); $data[$i]['source'] = $mdjm_txn->get_method(); $data[$i]['gateway'] = $mdjm_txn->get_gateway(); $data[$i]['event'] = !empty($mdjm_txn->post_parent) ? mdjm_get_event_contract_id($mdjm_txn->post_parent) : ''; if ('mdjm-income' == $mdjm_txn->post_status) { $income += $mdjm_txn->price; } else { $expense += $mdjm_txn->price; } $i++; } $data = apply_filters('mdjm_export_get_data', $data); $data = apply_filters('mdjm_export_get_data_' . $this->export_type, $data); return $data; } return false; }
/** * 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 }
/** * 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; }
/** * Get the Export Data * * @access public * @since 1.4 * @global obj $wpdb Used to query the database using the WordPress Database API * @return arr $data The data for the CSV file */ public function get_data() { global $wpdb; $data = array(); // Export all clients $clients = mdjm_get_clients(); $i = 0; foreach ($clients as $client) { if ('emails' != $_POST['mdjm_export_option']) { $data[$i]['name'] = $client->name; } $data[$i]['email'] = $client->email; if ('full' == $_POST['mdjm_export_option']) { $amount = 0; $events = mdjm_get_client_events($client->ID); $data[$i]['events'] = $events ? count($events) : 0; if ($events) { foreach ($events as $event) { $amount += mdjm_get_event_price($event->ID); } } $data[$i]['amount'] = mdjm_format_amount($amount); } $i++; } $data = apply_filters('mdjm_export_get_data', $data); $data = apply_filters('mdjm_export_get_data_' . $this->export_type, $data); return $data; }
/** * Get the Export Data * * @access public * @since 1.4 * @return arr $data The data for the CSV file */ public function get_data() { $start_year = isset($_POST['start_year']) ? absint($_POST['start_year']) : date('Y'); $end_year = isset($_POST['end_year']) ? absint($_POST['end_year']) : date('Y'); $start_month = isset($_POST['start_month']) ? absint($_POST['start_month']) : date('n'); $end_month = isset($_POST['end_month']) ? absint($_POST['end_month']) : date('n'); $data = array(); $year = $start_year; $stats = new MDJM_Stats(); while ($year <= $end_year) { if ($year == $start_year && $year == $end_year) { $m1 = $start_month; $m2 = $end_month; } elseif ($year == $start_year) { $m1 = $start_month; $m2 = 12; } elseif ($year == $end_year) { $m1 = 1; $m2 = $end_month; } else { $m1 = 1; $m2 = 12; } while ($m1 <= $m2) { $date1 = mktime(0, 0, 0, $m1, 1, $year); $date2 = mktime(0, 0, 0, $m1, cal_days_in_month(CAL_GREGORIAN, $m1, $year), $year); $event_status = array_keys(mdjm_all_event_status()); $data[] = array('date' => date_i18n('F Y', $date1), 'earnings' => mdjm_format_amount($stats->get_earnings($m1, $year))); $m1++; } $year++; } $data = apply_filters('mdjm_export_get_data', $data); $data = apply_filters('mdjm_export_get_data_' . $this->export_type, $data); return $data; }
/** * 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 } }
/** * 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; }
/** * 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; }
/** * 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 }
/** * Get the Export Data * * @access public * @since 1.4 * @return arr $data The data for the CSV file */ public function get_data() { global $wp_roles; $data = array(); $mdjm_roles = mdjm_get_roles(); $roles = array(); $offset = 30 * ($this->step - 1); foreach ($mdjm_roles as $role_id => $role_name) { $roles[] = $role_id; } $args = array('number' => 30, 'offset' => $offset, 'paged' => $this->step, 'role__in' => $roles); $employee_query = new WP_User_Query($args); $employees = $employee_query->get_results(); $i = 0; if ($employees) { foreach ($employees as $employee) { $events = mdjm_get_employee_events($employee->ID); $wages = 0; $paid = 0; $role_names = array(); foreach ($employee->roles as $role) { $role_names[] = translate_user_role($wp_roles->roles[$role]['name']); } $data[$i]['id'] = $employee->ID; $data[$i]['name'] = $employee->display_name; $data[$i]['email'] = $employee->user_email; $data[$i]['events'] = $events ? count($events) : 0; $data[$i]['roles'] = implode(', ', $role_names); if ($events) { foreach ($events as $event) { $event_wage = mdjm_get_employees_event_wage($event->ID, $employee->ID); $wages += $event_wage; if (!empty($event_wage) && 'paid' == mdjm_get_employees_event_payment_status($event->ID, $employee->ID)) { $paid += $wages; } } } $data[$i]['wages'] = mdjm_format_amount($wages); $data[$i]['paid'] = mdjm_format_amount($paid); $data[$i]['owed'] = mdjm_format_amount($wages - $paid); $i++; } } $data = apply_filters('mdjm_export_get_data', $data); $data = apply_filters('mdjm_export_get_data_' . $this->export_type, $data); return $data; }
function add_transaction($data, $meta = '', $direction = 'in', $type = '') { global $mdjm_settings; if (MDJM_DEBUG == true) { MDJM()->debug->log_it('Beginning transaction add procedure in ' . __METHOD__, true); } // Define the post status $txn_status = strtolower($direction) == 'in' ? 'mdjm-income' : 'mdjm-expenditure'; // Define the source of payment if (!empty($type)) { //$txn_type = get_term_by( 'name', $type, 'transaction-types' ); if (MDJM_DEBUG == true) { MDJM()->debug->log_it('term found with ID ' . $type, true); } } /* -- Get the new post ID -- */ if (!function_exists('get_default_post_to_edit')) { require_once ABSPATH . '/wp-admin/includes/post.php'; } $trans_post = get_default_post_to_edit('mdjm-transaction', true); $trans_data['ID'] = MDJM_EVENT_PREFIX . $trans_post->ID; $trans_data['post_title'] = MDJM_EVENT_PREFIX . $trans_post->ID; $trans_data['post_status'] = $txn_status; $trans_data['post_date'] = !empty($data['post_date']) ? $data['post_date'] : date('Y-m-d H:i:s', current_time('timestamp')); $trans_data['edit_date'] = true; $trans_data['post_author'] = !empty($data['post_author']) ? $data['post_author'] : 1; $trans_data['post_type'] = 'mdjm-transaction'; $trans_data['post_category'] = !empty($type) ? array($type) : ''; $trans_data['post_parent'] = !empty($data['post_parent']) ? $data['post_parent'] : ''; $trans_data['post_modified'] = date('Y-m-d H:i:s', current_time('timestamp')); $trans_meta['_mdjm_txn_status'] = !empty($meta['_mdjm_txn_status']) ? $meta['_mdjm_txn_status'] : 'Completed'; $trans_meta['_mdjm_txn_source'] = !empty($meta['_mdjm_txn_source']) ? $meta['_mdjm_txn_source'] : $mdjm_settings['payments']['default_type']; $trans_meta['_mdjm_gw_txn_id'] = !empty($meta['_mdjm_gw_txn_id']) ? $meta['_mdjm_gw_txn_id'] : ''; $trans_meta['_mdjm_payer_firstname'] = !empty($meta['_mdjm_payer_firstname']) ? sanitize_text_field(ucfirst(stripslashes($meta['_mdjm_payer_firstname']))) : ''; $trans_meta['_mdjm_payer_lastname'] = !empty($meta['_mdjm_payer_lastname']) ? sanitize_text_field(ucfirst(stripslashes($meta['_mdjm_payer_lastname']))) : ''; $trans_meta['_mdjm_payer_email'] = !empty($meta['_mdjm_payer_email']) ? strtolower($meta['_mdjm_payer_email']) : ''; $trans_meta['_mdjm_txn_net'] = !empty($meta['_mdjm_txn_net']) ? mdjm_format_amount($meta['_mdjm_txn_net']) : '0.00'; $trans_meta['_mdjm_txn_currency'] = !empty($meta['_mdjm_txn_currency']) ? strtoupper($meta['_mdjm_txn_currency']) : $mdjm_settings['payments']['currency']; $trans_meta['_mdjm_txn_fee'] = !empty($meta['_mdjm_txn_fee']) ? mdjm_format_amount($meta['_mdjm_txn_fee']) : '0.00'; $trans_meta['_mdjm_txn_total'] = !empty($meta['_mdjm_txn_total']) ? mdjm_format_amount($meta['_mdjm_txn_total']) : '0.00'; $trans_meta['_mdjm_payment_to'] = !empty($meta['_mdjm_payment_to']) ? $meta['_mdjm_payment_to'] : ''; $trans_meta['_mdjm_payment_from'] = !empty($meta['_mdjm_payment_from']) ? $meta['_mdjm_payment_from'] : ''; // Add the transaction $txn_id = wp_update_post($trans_data); if (!empty($txn_id)) { if (MDJM_DEBUG == true) { MDJM()->debug->log_it('Added transaction with ID: ' . $txn_id); } // Set the transaction source (term) if (!empty($type)) { wp_set_post_terms($txn_id, $type, 'transaction-types'); if (MDJM_DEBUG == true) { MDJM()->debug->log_it('Assigning transaction source ID ' . $type); } } // Add the meta data if (!empty($trans_meta) && is_array($trans_meta)) { foreach ($trans_meta as $key => $value) { if (add_post_meta($txn_id, $key, $value)) { if (MDJM_DEBUG == true) { MDJM()->debug->log_it('Meta key ' . $key . ' added with value ' . $value); } } else { if (MDJM_DEBUG == true) { MDJM()->debug->log_it('Failed to add Meta key ' . $key . ' with value ' . $value); } } } } } else { if (MDJM_DEBUG == true) { MDJM()->debug->log_it('Failed to add transaction'); } return false; } return $txn_id; }
/** * Get the Export Data * * @access public * @since 1.4 * @return arr $data The data for the CSV file */ public function get_data() { $data = array(); // Export all events $offset = 30 * ($this->step - 1); $args = array('post_type' => 'mdjm-event', 'posts_per_page' => 30, 'offset' => $offset, 'paged' => $this->step, 'post_status' => $this->status, 'order' => 'ASC', 'orderby' => 'ID'); if (!empty($this->start) || !empty($this->end)) { $args['meta_query'] = array(array('key' => '_mdjm_event_date', 'value' => array(date('Y-m-d', strtotime($this->start)), date('Y-m-d', strtotime($this->end))), 'compare' => 'BETWEEN', 'type' => 'DATE')); } $events = get_posts($args); if ($events) { $i = 0; foreach ($events as $event) { $event_data = mdjm_get_event_data($event->ID); $employees = array(); $package = ''; $addons = array(); if (!empty($event_data['client'])) { $client = '(' . $event_data['client'] . ') ' . mdjm_get_client_display_name($event_data['client']); } if (!empty($event_data['employees']['primary_employee'])) { $primary_employee = '(' . $event_data['employees']['primary_employee'] . ') ' . mdjm_get_employee_display_name($event_data['employees']['primary_employee']); } if (!empty($event_data['employees']['employees'])) { foreach ($event_data['employees']['employees'] as $employee_id => $employee_data) { $employees[] = '(' . $employee_id . ') ' . mdjm_get_employee_display_name($employee_id); } } if (!empty($event_data['equipment']['package'])) { $package = $event_data['equipment']['package']; } if (!empty($event_data['equipment']['addons'])) { foreach ($event_data['equipment']['addons'] as $addon_id) { $addons[] = mdjm_get_addon_name($addon_id); } } $data[$i] = array('id' => $event->ID, 'event_id' => mdjm_get_event_contract_id($event->ID), 'date' => mdjm_format_short_date($event_data['date']), 'status' => $event_data['status'], 'client' => $client, 'primary_employee' => '(' . $event_data['employees']['primary_employee'] . ') ' . mdjm_get_client_display_name($event_data['employees']['primary_employee']), 'employees' => implode(',', $employees), 'package' => $package, 'addons' => implode(', ', $addons), 'cost' => mdjm_format_amount($event_data['cost']['cost']), 'deposit' => mdjm_format_amount($event_data['cost']['deposit']), 'deposit_status' => $event_data['cost']['deposit_status'], 'balance' => mdjm_format_amount($event_data['cost']['balance']), 'balance_status' => $event_data['cost']['balance_status'], 'start_time' => mdjm_format_time($event_data['start_time']), 'end_time' => mdjm_format_time($event_data['end_time']), 'end_date' => mdjm_format_short_date($event_data['end_date']), 'setup_date' => mdjm_format_short_date($event_data['setup_date']), 'setup_time' => mdjm_format_time($event_data['setup_time']), 'duration' => $event_data['duration'], 'contract' => $event_data['contract'], 'contract_status' => $event_data['contract_status'], 'playlist_enabled' => $event_data['playlist']['playlist_enabled'], 'playlist_status' => $event_data['playlist']['playlist_status'], 'source' => $event_data['source'], 'converted' => $event_data['contract_status'], 'venue' => $event_data['venue']['name'], 'address' => !empty($event_data['venue']['address']) ? implode(', ', $event_data['venue']['address']) : ''); $i++; } $data = apply_filters('mdjm_export_get_data', $data); $data = apply_filters('mdjm_export_get_data_' . $this->export_type, $data); return $data; } return false; }
public function migrate_events_1_2() { global $mdjm, $mdjm_settings, $wpdb; if (!get_option('mdjm_migrate_events')) { return; } add_filter('akismet_debug_log', '__return_false'); /* -- Old Status => New Status -- */ $status_map = array('Approved' => 'mdjm-approved', 'Cancelled' => 'mdjm-cancelled', 'Completed' => 'mdjm-completed', 'Enquiry' => 'mdjm-enquiry', 'Failed Enquiry' => 'mdjm-lost', 'Pending' => 'mdjm-contract', 'Unattended' => 'mdjm-unattended'); MDJM()->debug->log_it('*** STARTING EVENT IMPORT ***', true); $event_list = $wpdb->get_results('SELECT * FROM `' . $wpdb->prefix . 'mdjm_events`'); if (!$event_list) { MDJM()->debug->log_it('NO EVENTS FOUND'); } else { remove_action('save_post_mdjm-event', 'mdjm_save_event_post', 10, 3); remove_action('wp_insert_comment', array('Akismet', 'auto_check_update_meta'), 10, 2); remove_filter('preprocess_comment', array('Akismet', 'auto_check_comment'), 1); MDJM()->debug->log_it('--' . count($event_list) . _n(' event found', ' events found', count($event_list))); foreach ($event_list as $event) { $event_type = get_term_by('name', $event->event_type, 'event-types'); /* -- Remap the fields -- */ $event_data['post_title'] = MDJM_EVENT_PREFIX . $event->event_id; $event_data['post_status'] = $status_map[$event->contract_status]; $event_data['post_date'] = strtotime($event->date_added) != 0 ? date('Y-m-d H:i:s', strtotime($event->date_added)) : date('Y-m-d H:i:s'); $event_data['post_author'] = $event->added_by; $event_data['post_type'] = 'mdjm-event'; $event_data['post_category'] = array($event_type->term_id); $event_data['post_modified'] = !empty($event->last_updated) ? date('Y-m-d H:i:s', strtotime($event->last_updated)) : date('Y-m-d H:i:s'); $event_meta['_mdjm_event_client'] = $event->user_id; $event_meta['_mdjm_event_date'] = date('Y-m-d', strtotime($event->event_date)); $event_meta['_mdjm_event_dj'] = $event->event_dj; $event_meta['_mdjm_event_start'] = $event->event_start; $event_meta['_mdjm_event_finish'] = $event->event_finish; $event_meta['_mdjm_event_notes'] = !empty($event->event_description) ? $event->event_description : ''; $event_meta['_mdjm_event_guest_pl'] = !empty($event->event_guest_call) ? $event->event_guest_call : ''; $event_meta['_mdjm_booking_date'] = !empty($event->booking_date) ? date('Y-m-d', strtotime($event->booking_date)) : ''; $event_meta['_mdjm_event_contract'] = $event->contract; $event_meta['_mdjm_event_contract_approved'] = !empty($event->contract_approved_date) ? date('Y-m-d', strtotime($event->contract_approved_date)) : ''; $event_meta['_mdjm_event_contract_approver'] = !empty($event->contract_approver) ? $event->contract_approver : ''; $event_meta['_mdjm_event_cost'] = mdjm_format_amount($event->cost); $event_meta['_mdjm_event_deposit'] = mdjm_format_amount($event->deposit); $event_meta['_mdjm_event_deposit_status'] = !empty($event->deposit_status) ? $event->deposit_status : 'Due'; $event_meta['_mdjm_event_deposit_status'] = !empty($event->balance_status) ? $event->balance_status : 'Due'; if (!empty($event->venue) && is_numeric($event->venue)) { $event_meta['_mdjm_event_venue_id'] = !empty($event->venue) && is_numeric($event->venue) ? $event->venue : ''; } else { $event_meta['_mdjm_event_venue_name'] = !empty($event->venue_name) ? sanitize_text_field(ucwords($event->venue_name)) : ''; $event_meta['_mdjm_event_venue_contact'] = !empty($event->venue_contact) ? sanitize_text_field(ucwords($event->venue_contact)) : ''; $event_meta['_mdjm_event_venue_phone'] = !empty($event->venue_phone) ? sanitize_text_field(ucwords($event->venue_phone)) : ''; $event_meta['_mdjm_event_venue_email'] = !empty($event->venue_email) ? sanitize_text_field(strtolower($event->venue_email)) : ''; $event_meta['_mdjm_event_venue_address1'] = !empty($event->venue_addr1) ? sanitize_text_field(ucwords($event->venue_addr1)) : ''; $event_meta['_mdjm_event_venue_address2'] = !empty($event->venue_addr2) ? sanitize_text_field(ucwords($event->venue_addr2)) : ''; $event_meta['_mdjm_event_venue_town'] = !empty($event->venue_city) ? sanitize_text_field(ucwords($event->venue_city)) : ''; $event_meta['_mdjm_event_venue_county'] = !empty($event->venue_state) ? sanitize_text_field(ucwords($event->venue_state)) : ''; $event_meta['_mdjm_event_venue_postcode'] = !empty($event->venue_zip) ? sanitize_text_field(strtoupper($event->venue_zip)) : ''; } $event_meta['_mdjm_event_enquiry_source'] = !empty($event->referrer) ? $event->referrer : ''; $event_meta['_mdjm_event_converted_by'] = !empty($event->converted_by) ? $event->converted_by : ''; $event_meta['_mdjm_event_date_converted'] = !empty($event->date_converted) ? date('Y-m-d', strtotime($event->date_converted)) : ''; $event_meta['_mdjm_event_last_updated_by'] = !empty($event->last_updated_by) ? $event->last_updated_by : ''; $event_meta['_mdjm_event_package'] = !empty($event->event_package) ? $event->event_package : ''; $event_meta['_mdjm_event_addons'] = !empty($event->event_addons) ? $event->event_addons : ''; $event_meta['_mdjm_event_tasks'] = !empty($event->cronned) ? $event->cronned : ''; $event_meta['_mdjm_event_djsetup'] = strtotime($event->dj_setup_date) != 0 ? date('Y-m-d', strtotime($event->dj_setup_date)) : ''; $event_meta['_mdjm_event_djsetup_time'] = strtotime($event->dj_setup_time) != 0 ? date('H:i:s', strtotime($event->dj_setup_time)) : ''; /* -- Create the event post -- */ $event_id = wp_insert_post($event_data); /* -- If we have errors, make sure they are logged so we can support -- */ if (is_wp_error($event_id)) { MDJM()->debug->log_it(' ERROR: Event ID: ' . $event_id . ' | ' . $event_id->get_error_message()); } elseif (!empty($event_id)) { set_time_limit(180); MDJM()->debug->log_it('Event ' . $event->event_id . ' successfully imported as ' . $event_id); wp_update_post(array('ID' => $event_id, 'post_title' => MDJM_EVENT_PREFIX . $event_id)); /* -- Set the Event Type -- */ wp_set_post_terms($event_id, $event_type->term_id, 'event-types'); /* -- Add the event meta -- */ foreach ($event_meta as $event_meta_key => $event_meta_value) { if ($event_meta_key == '_mdjm_event_cost' || $event_meta_key == '_mdjm_event_deposit') { $event_meta_value = mdjm_format_amount((double) $event_meta_value); } if ($event_meta_key == 'venue_postcode' && !empty($event_meta_value)) { $event_meta_value = strtoupper($event_meta_value); } if ($event_meta_key == 'venue_email' && !empty($event_meta_value)) { $event_meta_value = strtolower($event_meta_value); } if ($event_meta_key == '_mdjm_event_package') { $event_meta_value = sanitize_text_field(strtolower($event_meta_value)); } elseif ($event_meta_key == '_mdjm_event_addons') { $event_meta_value = $event_meta_value; } elseif (!strpos($event_meta_key, 'notes')) { $event_meta_value = sanitize_text_field(ucwords($event_meta_value)); } else { $event_meta_value = sanitize_text_field(ucfirst($event_meta_value)); } add_post_meta($event_id, $event_meta_key, $event_meta_value); } /* -- Update playlist entries -- */ MDJM()->debug->log_it('Updating Playlist'); $playlist_update = $wpdb->update(MDJM_PLAYLIST_TABLE, array('event_id' => $event_id), array('event_id' => $event->event_id)); MDJM()->debug->log_it($playlist_update . _n(' entry ', ' entries ', $playlist_update) . 'updated'); /* -- Update Transactions -- */ MDJM()->debug->log_it('Updating Transactions'); $trans_update = $wpdb->update($wpdb->prefix . 'mdjm_trans', array('event_id' => $event_id), array('event_id' => $event->event_id)); MDJM()->debug->log_it($trans_update . _n(' entry ', ' entries ', $trans_update) . 'updated'); /* -- Update Comm Posts -- */ MDJM()->debug->log_it('Updating Communications'); $i = 0; $comms = get_posts(array('post_type' => 'mdjm_communication', 'meta_key' => '_event', 'meta_value' => $event->event_id, 'order_by' => 'post_date', 'order' => 'DESC', 'posts_per_page' => '3', 'post_status' => 'any')); foreach ($comms as $comm) { if (update_post_meta($comm->ID, '_event', $event_id)) { $i++; } } MDJM()->debug->log_it($i . _n(' entry ', ' entries ', $i) . 'updated'); } else { MDJM()->debug->log_it('ERROR: Event ' . $event_id . ' was not imported'); } } } add_action('save_post_mdjm-event', 'mdjm_save_event_post', 10, 3); add_action('wp_insert_comment', array('Akismet', 'auto_check_update_meta'), 10, 2); add_filter('preprocess_comment', array('Akismet', 'auto_check_comment'), 1); delete_option('mdjm_migrate_events'); MDJM()->debug->log_it('*** COMPLETED EVENT IMPORT ***', true); }
/** * 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(); }
/** * Retrieve the total wages payable event * * @since 1.3 * @return str */ public function get_wages_total() { if (!isset($this->employees)) { $this->get_all_employees(); } $wages = mdjm_format_amount(0); if (!empty($this->employees)) { foreach ($this->employees as $employee => $employee_data) { $wages += $employee_data['wage']; } } /** * Override the income for this event. * * @since 1.3 * * @param str $income The income for the event. * @param str|int $id The event ID. */ return apply_filters('get_wages_total', mdjm_format_amount($wages), $this->ID, $this->employees); }
/** * 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; }
/** * Retrieve the cost of an addon. * * @since 1.4 * @param str $slug The slug identifier for the addon. * @return int The cost of the addon. */ function mdjm_get_addon_cost($slug) { _deprecated_function(__FUNCTION__, '1.4', "mdjm_get_addon_by( 'field', 'value' )"); $addon = mdjm_get_addon_by('slug', $slug); if ($addon) { return mdjm_format_amount(mdjm_get_addon_price($addon->ID)); } }
/** * 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; }
/** * Returns a nicely formatted distance. * * @since 1.3.8 * * @param str $distance The distance to format * @param bool $singular Whether to return a singular value or plural * @param bool $lowercase True to return a lowercase label, otherwise false. * @return str $distance Newly formatted distance */ function mdjm_format_distance($distance, $singular = false, $lowercase = false) { $label = mdjm_travel_unit_label($singular, $lowercase); $search = array('km', 'mi', ' '); $replace = ''; $formatted = trim(str_replace($search, $replace, $distance)); $formatted = mdjm_format_amount($formatted, true); $formatted = $formatted . ' ' . $label; return apply_filters('mdjm_format_distance', $formatted, $distance); }
/** * 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'])))); }
/** * 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 }
/** * 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; }
/** * Get the Export Data * * @access public * @since 1.4 * @return arr $data The data for the CSV file */ public function get_data() { $data = array(); // Export all clients add_filter('mdjm_get_clients_args', array($this, 'filter_args')); $clients = mdjm_get_clients(); remove_filter('mdjm_get_clients_args', array($this, 'filter_args')); $i = 0; foreach ($clients as $client) { $events = mdjm_get_client_events($client->ID); $amount = 0; $data[$i]['id'] = $client->ID; $data[$i]['name'] = $client->display_name; $data[$i]['email'] = $client->user_email; $data[$i]['events'] = $events ? count($events) : 0; if ($events) { foreach ($events as $event) { $amount += mdjm_get_event_price($event->ID); } } $data[$i]['amount'] = mdjm_format_amount($amount); $i++; } $data = apply_filters('mdjm_export_get_data', $data); $data = apply_filters('mdjm_export_get_data_' . $this->export_type, $data); return $data; }
/** * 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 }
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(); ?>
/** * 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)); }
/** * 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 }
/** * 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; }
/** * 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 }