/** * 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; }
/** * 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); } } }
/** * 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; }