コード例 #1
0
 /**
  * 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;
 }
コード例 #2
0
/**
 * 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 '&ndash;';
                ?>
                        <?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 '&ndash;';
                ?>
                        <?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%">&nbsp;</th>
            <th style="width: 20%">&nbsp;</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 
}
コード例 #3
0
 /**
  * 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;
 }
コード例 #4
0
 /**
  * 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;
 }
コード例 #5
0
 /**
  * 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;
 }
コード例 #6
0
/**
 * 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>&nbsp;</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());
        ?>
				&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
				<?php 
        printf(__('<a href="%s">Manage %s</a>', 'mobile-dj-manager'), admin_url('edit.php?post_type=mdjm-event'), mdjm_get_label_plural());
        ?>
				&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
				<?php 
        printf(__('<a href="%s">Transactions</a>', 'mobile-dj-manager'), admin_url('edit.php?post_type=mdjm-transaction'));
        ?>
				&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;&nbsp;
				<?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 
    }
}
コード例 #7
0
/**
 * 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;
}
コード例 #8
0
/**
 * 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>&dagger;</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;
}
コード例 #9
0
ファイル: metaboxes.php プロジェクト: mdjm/mobile-dj-manager
/**
 * 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;">&times;</a>
	</td>
	<?php 
}
コード例 #10
0
 /**
  * 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;
 }
コード例 #11
0
 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;
 }
コード例 #12
0
 /**
  * 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;
 }
コード例 #13
0
 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);
 }
コード例 #14
0
/**
 * 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));
    }
}
コード例 #15
0
ファイル: shortcodes.php プロジェクト: mdjm/mobile-dj-manager
/**
 * 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 .= '&nbsp;&ndash;&nbsp;' . 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();
}
コード例 #16
0
 /**
  * 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);
 }
コード例 #17
0
/**
 * 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;
}
コード例 #18
0
/**
 * 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));
    }
}
コード例 #19
0
 /**
  * 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;
 }
コード例 #20
0
ファイル: formatting.php プロジェクト: mdjm/mobile-dj-manager
/**
 * 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);
}
コード例 #21
0
ファイル: payments.php プロジェクト: mdjm/mobile-dj-manager
/**
 * 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']))));
}
コード例 #22
0
ファイル: equipment.php プロジェクト: mdjm/mobile-dj-manager
/**
 * 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 ' &mdash; ';
                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
}
コード例 #23
0
 /**
  * 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;
 }
コード例 #24
0
 /**
  * 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;
 }
コード例 #25
0
ファイル: txns.php プロジェクト: mdjm/mobile-dj-manager
/**
 * 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">&nbsp;&nbsp;&nbsp;&nbsp;' . __('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
}
コード例 #26
0
echo esc_html(mdjm_get_deposit_label());
?>
 &ndash; <?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());
?>
 &ndash; <?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();
?>
コード例 #27
0
 /**
  * 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 
 }
コード例 #29
0
/**
 * 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;
}
コード例 #30
0
ファイル: events.php プロジェクト: mdjm/mobile-dj-manager
/**
 * 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 '&mdash;';
            }
            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 '&mdash;';
            }
            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 '&mdash;';
            }
            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 '&mdash;';
            }
            break;
    }
    // switch
}