'no');
});
add_filter('usedkit_save_settings', function ($out, $post) {
return $out + array('register' => !empty($post['register']) ? 'yes' : 'no');
}, 10, 2);
add_action('usedkit_settings_rows', function ($s) { ?>
|
|
array(__('Seller', 'usedkit'), __('Name, or company and business ID', 'usedkit')),
'_usedkit_seller_contact' => array(__('Seller\'s contact details', 'usedkit'), __('Address, phone, email', 'usedkit')),
'_usedkit_seller_id' => array(__('ID checked', 'usedkit'), __('Document and number, e.g. passport 12345678', 'usedkit')),
'_usedkit_serial' => array(__('Serial number', 'usedkit'), ''),
);
}
add_action('usedkit_item_panel', function ($product) {
if (!usedkit_register_on()) {
return;
}
usedkit_panel_heading(__('Purchase', 'usedkit'));
foreach (usedkit_register_fields() as $key => $f) {
$args = array('id' => $key, 'label' => $f[0], 'placeholder' => $f[1], 'value' => $product ? $product->get_meta($key) : '');
$key === '_usedkit_seller_contact' ? woocommerce_wp_textarea_input($args) : woocommerce_wp_text_input($args);
}
if (!(function_exists('usedkit_margin_on') && usedkit_margin_on())) {
// With margin VAT on, these two are beside the price instead.
woocommerce_wp_text_input(array('id' => '_usedkit_cost', 'data_type' => 'price',
'label' => __('Purchase price', 'usedkit') . ' (' . get_woocommerce_currency_symbol() . ')',
'value' => $product ? $product->get_meta('_usedkit_cost') : ''));
woocommerce_wp_text_input(array('id' => '_usedkit_bought', 'type' => 'date', 'label' => __('Purchase date', 'usedkit'),
'value' => $product ? $product->get_meta('_usedkit_bought') : ''));
}
}, 40);
add_action('woocommerce_admin_process_product_object', function ($product) {
if (!usedkit_register_on()) {
return;
}
foreach (array_keys(usedkit_register_fields()) as $key) {
usedkit_set_meta($product, $key, usedkit_posted($key, $key === '_usedkit_seller_contact'));
}
if (!(function_exists('usedkit_margin_on') && usedkit_margin_on())) {
$cost = usedkit_posted('_usedkit_cost');
usedkit_set_meta($product, '_usedkit_cost', $cost === null ? null : wc_format_decimal($cost));
$d = usedkit_posted('_usedkit_bought');
usedkit_set_meta($product, '_usedkit_bought', $d === null ? null : (preg_match('/^\d{4}-\d{2}-\d{2}$/', $d) ? $d : ''));
}
// A purchase with a seller has a date: today, unless one was given.
if ($product->get_meta('_usedkit_seller') !== '' && $product->get_meta('_usedkit_bought') === '') {
$product->update_meta_data('_usedkit_bought', current_time('Y-m-d'));
}
});
/* ---- the register ---------------------------------------------------------------------- */
add_action('admin_menu', function () {
if (usedkit_register_on()) {
add_submenu_page('woocommerce', __('Purchase register', 'usedkit'), __('Purchase register', 'usedkit'),
'manage_woocommerce', 'usedkit-register', 'usedkit_register_page');
}
}, 20);
/** Purchases dated in [from, to], oldest first. */
function usedkit_register_rows($from, $to) {
$ids = get_posts(array('post_type' => 'product', 'post_status' => array('publish', 'private', 'draft', 'pending'),
'numberposts' => -1, 'fields' => 'ids', 'no_found_rows' => true,
'meta_query' => array(array('key' => '_usedkit_bought', 'value' => array($from, $to), 'compare' => 'BETWEEN', 'type' => 'DATE')))); // phpcs:ignore WordPress.DB.SlowDBQuery
$rows = array();
foreach (array_filter(array_map('wc_get_product', $ids)) as $p) {
$sold = (int) $p->get_meta('_usedkit_sold_at');
$rows[] = array(
'id' => $p->get_id(), 'date' => $p->get_meta('_usedkit_bought'), 'item' => $p->get_name(), 'sku' => $p->get_sku(),
'serial' => $p->get_meta('_usedkit_serial'), 'seller' => $p->get_meta('_usedkit_seller'),
'contact' => $p->get_meta('_usedkit_seller_contact'), 'seller_id' => $p->get_meta('_usedkit_seller_id'),
'price' => $p->get_meta('_usedkit_cost'), 'sold' => $sold ? wp_date('Y-m-d', $sold) : '');
}
usort($rows, function ($a, $b) { return strcmp($a['date'], $b['date']) ?: $a['id'] <=> $b['id']; });
return $rows;
}
function usedkit_register_range() {
$from = (string) usedkit_view_arg('register', 'from', 'usedkit_register_csv');
$to = (string) usedkit_view_arg('register', 'to', 'usedkit_register_csv');
$ok = function ($d) { return (bool) preg_match('/^\d{4}-\d{2}-\d{2}$/', $d); };
return array($ok($from) ? $from : current_time('Y') . '-01-01', $ok($to) ? $to : current_time('Y-m-d'));
}
function usedkit_register_page() {
if (!current_user_can('manage_woocommerce')) {
return;
}
list($from, $to) = usedkit_register_range();
$rows = usedkit_register_rows($from, $to); ?>
| |
| |
| |
|
|
' . esc_html($r['sku']) . '' : ''; ?> |
|
|
|
|
|
|