/**
  * 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;
 }
Пример #2
0
/**
 * Log the primary employees payment settings and update if employee or wage changes.
 *
 * @since	1.3
 * @param	int			$event_id	Event ID.
 * @param	arr			$old_meta	Old meta values from before event save.
 * @param	arr			$new_meta	New meta values after event save.
 * @return	void
 */
function mdjm_manage_primary_employee_payment_status($event_id, $old_meta, $new_meta)
{
    if (!mdjm_get_option('enable_employee_payments')) {
        return;
    }
    $mdjm_event = new MDJM_Event($event_id);
    $employee_id = $mdjm_event->get_employee();
    if (empty($employee_id)) {
        return;
    }
    $payment_amount = mdjm_get_employees_event_wage($event_id, $employee_id);
    $payment_status = get_post_meta($event_id, '_mdjm_event_dj_payment_status', true);
    if (empty($payment_status)) {
        if (empty($payment_amount) || $payment_amount < 1) {
            return;
        }
        $mdjm_txn = new MDJM_Txn();
        $mdjm_txn->create(array('post_title' => sprintf(__('Wage payment to %s for %d', 'mobile-dj-manager'), mdjm_get_employee_display_name($employee_id), $event_id), 'post_status' => 'mdjm-expenditure', 'post_author' => 1, 'post_parent' => $event_id), array('_mdjm_txn_status' => 'Pending', '_mdjm_payment_to' => $employee_id, '_mdjm_txn_total' => $payment_amount));
        if (!empty($mdjm_txn)) {
            $data['txn_id'] = $mdjm_txn->ID;
        }
        mdjm_set_txn_type($mdjm_txn->ID, mdjm_get_txn_cat_id('slug', 'mdjm-employee-wages'));
        $payment_data = array('payment_status' => 'unpaid', 'payment_date' => '', 'txn_id' => $mdjm_txn->ID, 'payment_amount' => '');
        update_post_meta($event_id, '_mdjm_event_dj_payment_status', $payment_data);
    } else {
        if ($payment_status['payment_status'] == 'paid') {
            return;
        }
        if (in_array($mdjm_event->post_status, array('mdjm-cancelled', 'mdjm-rejected', 'mdjm-failed'))) {
            update_post_meta($mdjm_txn->ID, '_mdjm_txn_status', 'Cancelled');
        }
        $mdjm_txn = new MDJM_Txn($payment_status['txn_id']);
        if ($mdjm_txn->recipient_id != $employee_id) {
            update_post_meta($mdjm_txn->ID, '_mdjm_payment_to', $employee_id);
        }
        if ($payment_amount != $mdjm_txn->price) {
            update_post_meta($mdjm_txn->ID, '_mdjm_txn_total', $payment_amount);
        }
    }
}
Пример #3
0
/**
 * Output the event employee selection row
 *
 * @since	1.3.7
 * @global	obj		$mdjm_event			MDJM_Event class object
 * @global	bool	$mdjm_event_update	True if this event is being updated, false if new.
 * @param	int		$event_id			The event ID.
 * @return	str
 */
function mdjm_event_metabox_employee_select_row($event_id)
{
    global $mdjm_event, $mdjm_event_update;
    $employee_id = $mdjm_event->employee_id ? $mdjm_event->employee_id : get_current_user_id();
    $payment_status = $mdjm_event->employee_id ? mdjm_event_employees_paid($event_id, $mdjm_event->employee_id) : false;
    if (isset($_GET['primary_employee'])) {
        $employee_id = $_GET['primary_employee'];
    }
    echo MDJM()->html->hidden(array('name' => 'event_dj', 'value' => $employee_id));
    ?>

	<div class="mdjm_field_wrap mdjm_form_fields">
        <div class="mdjm_col col2">
			<label for="_mdjm_event_dj"><?php 
    _e('Primary Employee:', 'mobile-dj-manager');
    ?>
</label><br />
				<?php 
    if (!mdjm_is_employer() || !mdjm_employee_can('manage_employees') || $payment_status) {
        ?>

                    <?php 
        echo MDJM()->html->text(array('name' => 'event_dj_display', 'class' => '', 'value' => mdjm_get_employee_display_name($employee_id), 'readonly' => true));
        ?>

					<?php 
        echo MDJM()->html->hidden(array('name' => '_mdjm_event_dj', 'value' => $employee_id));
        ?>

                <?php 
    } else {
        ?>

					<?php 
        echo MDJM()->html->employee_dropdown(array('selected' => $mdjm_event->employee_id, 'group' => true, 'chosen' => true, 'placeholder' => __('Select an Employee', 'mobile-dj-manager')));
        ?>
            
                <?php 
    }
    ?>

		</div>

		<?php 
    if (mdjm_get_option('enable_employee_payments') && mdjm_employee_can('edit_txns')) {
        ?>

			<?php 
        $wage = mdjm_get_employees_event_wage($event_id, $employee_id);
        ?>

			<div class="mdjm_col col2">
				<label for="_mdjm_event_dj_wage"><?php 
        _e('Wage', 'mobile-dj-manager');
        ?>
:</label><br />
                <?php 
        echo mdjm_currency_symbol() . MDJM()->html->text(array('name' => '_mdjm_event_dj_wage', 'class' => 'mdjm-currency', 'value' => !empty($wage) ? $wage : '', 'placeholder' => mdjm_sanitize_amount('0'), 'readonly' => $payment_status ? true : false));
        ?>
			</div>

        <?php 
    }
    ?>

    </div>

	<?php 
}
 /**
  * Get the Export Data
  *
  * @access	public
  * @since	1.4
  * @return	arr		$data	The data for the CSV file
  */
 public function get_data()
 {
     global $wp_roles;
     $data = array();
     $mdjm_roles = mdjm_get_roles();
     $roles = array();
     $offset = 30 * ($this->step - 1);
     foreach ($mdjm_roles as $role_id => $role_name) {
         $roles[] = $role_id;
     }
     $args = array('number' => 30, 'offset' => $offset, 'paged' => $this->step, 'role__in' => $roles);
     $employee_query = new WP_User_Query($args);
     $employees = $employee_query->get_results();
     $i = 0;
     if ($employees) {
         foreach ($employees as $employee) {
             $events = mdjm_get_employee_events($employee->ID);
             $wages = 0;
             $paid = 0;
             $role_names = array();
             foreach ($employee->roles as $role) {
                 $role_names[] = translate_user_role($wp_roles->roles[$role]['name']);
             }
             $data[$i]['id'] = $employee->ID;
             $data[$i]['name'] = $employee->display_name;
             $data[$i]['email'] = $employee->user_email;
             $data[$i]['events'] = $events ? count($events) : 0;
             $data[$i]['roles'] = implode(', ', $role_names);
             if ($events) {
                 foreach ($events as $event) {
                     $event_wage = mdjm_get_employees_event_wage($event->ID, $employee->ID);
                     $wages += $event_wage;
                     if (!empty($event_wage) && 'paid' == mdjm_get_employees_event_payment_status($event->ID, $employee->ID)) {
                         $paid += $wages;
                     }
                 }
             }
             $data[$i]['wages'] = mdjm_format_amount($wages);
             $data[$i]['paid'] = mdjm_format_amount($paid);
             $data[$i]['owed'] = mdjm_format_amount($wages - $paid);
             $i++;
         }
     }
     $data = apply_filters('mdjm_export_get_data', $data);
     $data = apply_filters('mdjm_export_get_data_' . $this->export_type, $data);
     return $data;
 }