Files
old-experiments/backend/wordpress/wp-content/plugins/woocommerce-jetpack/includes/pdf-invoices/class-wcj-pdf-invoicing-renumerate-tool.php
2018-06-29 14:40:28 +02:00

226 lines
7.7 KiB
PHP
Executable File

<?php
/**
* Booster for WooCommerce - PDF Invoicing - Renumerate Tool
*
* @version 3.2.2
* @author Algoritmika Ltd.
*/
if ( ! defined( 'ABSPATH' ) ) exit;
if ( ! class_exists( 'WCJ_PDF_Invoicing_Renumerate_Tool' ) ) :
class WCJ_PDF_Invoicing_Renumerate_Tool {
/**
* Constructor.
*
* @version 3.2.2
*/
function __construct() {
return true;
}
/**
* wcj_multi_selected.
*/
function wcj_multi_selected( $selected, $current_multi ) {
if ( ! is_array( $current_multi ) ) {
return selected( $selected, $current_multi, false );
}
foreach( $current_multi as $current ) {
$selected_single = selected( $selected, $current, false );
if ( '' != $selected_single ) {
return $selected_single;
}
}
return '';
}
/**
* Add Renumerate Invoices tool to WooCommerce menu (the content).
*
* @version 3.2.2
*/
function create_renumerate_invoices_tool() {
$result_message = '';
$renumerate_result = '';
$the_invoice_type = ( ! empty( $_POST['invoice_type'] ) ) ? $_POST['invoice_type'] : 'invoice';
$the_start_number = ( ! empty( $_POST['start_number'] ) ) ? $_POST['start_number'] : 0;
$the_start_date = ( ! empty( $_POST['start_date'] ) ) ? $_POST['start_date'] : '';
$the_end_date = ( ! empty( $_POST['end_date'] ) ) ? $_POST['end_date'] : '';
$the_order_statuses = ( ! empty( $_POST['order_statuses'] ) ) ? $_POST['order_statuses'] : array();
$the_delete_all = ( isset( $_POST['delete_all'] ) );
if ( isset( $_POST['renumerate_invoices'] ) ) {
if ( ! empty( $the_order_statuses ) ) {
$renumerate_result = $this->renumerate_invoices( $the_invoice_type, $the_start_number, $the_start_date, $the_end_date, $the_order_statuses, $the_delete_all );
$result_message = '<div class="updated"><p><strong>' . __( 'Invoices successfully renumerated!', 'woocommerce-jetpack' ) . '</strong></p></div>';
} else {
$result_message = '<div class="error"><p><strong>' . __( 'Please select at least one order status.', 'woocommerce-jetpack' ) . '</strong></p></div>';
}
}
?><div>
<h2><?php echo __( 'Booster - Renumerate Invoices', 'woocommerce-jetpack' ); ?></h2>
<p><?php echo __( 'The tool renumerates invoices from choosen date. Invoice number format is set in WooCommerce > Settings > Booster > PDF Invoicing & Packing Slips > Numbering.', 'woocommerce-jetpack' ); ?></p>
<?php echo $result_message; ?>
<p><form method="post" action="">
<?php
// Start Date
$data[] = array(
__( 'Start Date', 'woocommerce-jetpack' ),
'<input class="input-text widefat" display="date" type="text" name="start_date" value="' . $the_start_date . '">',
'<em>' . __( 'Date to start renumerating. Leave blank to renumerate all invoices.', 'woocommerce-jetpack' ) . '</em>',
);
// End Date
$data[] = array(
__( 'End Date', 'woocommerce-jetpack' ),
'<input class="input-text widefat" display="date" type="text" name="end_date" value="' . $the_end_date . '">',
'<em>' . __( 'Date to end renumerating. Leave blank to renumerate all invoices.', 'woocommerce-jetpack' ) . '</em>',
);
// Number
$data[] = array(
__( 'Start Number', 'woocommerce-jetpack' ),
'<input class="input-text widefat" type="text" name="start_number" value="' . $the_start_number . '">',
'<em>' . __( 'Counter to start renumerating. Leave 0 to continue from current counter.', 'woocommerce-jetpack' ) . '</em>',
);
// Delete All
$data[] = array(
__( 'Delete All', 'woocommerce-jetpack' ),
'<input id="wcj_renumerate_invoices_delete_all" type="checkbox" name="delete_all" value="" ' . checked( $the_delete_all, true, false ) . '>' . ' ' .
'<label for="wcj_renumerate_invoices_delete_all">' . __( 'Clear all invoices before renumerating', 'woocommerce-jetpack' ) . '</label>',
'',
);
// Type
$invoice_type_select_html = '<select class="widefat" name="invoice_type">';
$invoice_types = wcj_get_enabled_invoice_types();
foreach ( $invoice_types as $invoice_type ) {
$invoice_type_select_html .= '<option value="' . $invoice_type['id'] . '" ' . selected( $invoice_type['id'], $the_invoice_type, false ) . '>' .
$invoice_type['title'] . '</option>';
}
$invoice_type_select_html .= '</select>';
$data[] = array( __( 'Document Type', 'woocommerce-jetpack' ), $invoice_type_select_html, '', );
// Statuses
$order_statuses_select_html = '<select class="widefat" id="order_statuses" name="order_statuses[]" multiple size="5">';
$order_statuses = wcj_get_order_statuses( false );
foreach ( $order_statuses as $status => $desc ) {
$order_statuses_select_html .= '<option value="' . $status . '" ' . $this->wcj_multi_selected( $status, $the_order_statuses ) . '>' . $desc . '</option>';
}
$order_statuses_select_html .= '</select>';
$data[] = array( __( 'Order Statuses', 'woocommerce-jetpack' ), $order_statuses_select_html, '', );
// Button
$data[] = array(
'<input class="button-primary" type="submit" name="renumerate_invoices" value="' . __( 'Renumerate invoices', 'woocommerce-jetpack' ) . '">',
'',
''
);
// Print all
echo wcj_get_table_html( $data, array( 'table_class' => 'widefat striped', 'table_heading_type' => 'vertical', ) );
?>
</form></p>
<?php
if ( '' != $renumerate_result ) {
echo '<h3>' . __( 'Results', 'woocommerce-jetpack' ) . '</h3>';
echo '<p>' . $renumerate_result . '</p>';
}
?>
</div><?php
}
/**
* Renumerate invoices function.
*
* @version 2.3.10
*/
function renumerate_invoices( $invoice_type, $start_number, $start_date, $end_date, $order_statuses, $the_delete_all ) {
$output = '';
if ( 0 != $start_number ) {
update_option( 'wcj_invoicing_' . $invoice_type . '_numbering_counter', $start_number );
}
$date_query_array = array(
array(
'after' => $start_date,
'inclusive' => true,
),
);
if ( '' != $end_date ) {
$date_query_array[0]['before'] = $end_date;
}
$deleted_invoices_counter = 0;
$created_invoices_counter = 0;
$offset = 0;
$block_size = 96;
while( true ) {
$args = array(
'post_type' => 'shop_order',
'post_status' => 'any',
'posts_per_page' => $block_size,
'offset' => $offset,
'orderby' => 'date',
'order' => 'ASC',
'date_query' => $date_query_array,
);
$loop = new WP_Query( $args );
if ( ! $loop->have_posts() ) {
break;
}
while ( $loop->have_posts() ) : $loop->the_post();
$order_id = $loop->post->ID;
if (
in_array( $loop->post->post_status, $order_statuses ) &&
strtotime( $loop->post->post_date ) >= strtotime( $start_date ) &&
( strtotime( $loop->post->post_date ) <= strtotime( $end_date ) || '' == $end_date )
) {
$the_order = wc_get_order( $order_id );
if ( 0 != $the_order->get_total() ) {
wcj_create_invoice( $order_id, $invoice_type, strtotime( $loop->post->post_date ) );
$created_invoices_counter++;
}
} else {
if ( $the_delete_all && wcj_is_invoice_created( $order_id, $invoice_type ) ) {
wcj_delete_invoice( $order_id, $invoice_type );
$deleted_invoices_counter++;
}
}
endwhile;
$offset += $block_size;
}
$output .= '<p>' . sprintf( __( 'Total documents created: %d', 'woocommerce-jetpack' ), $created_invoices_counter ) . '</p>';
$output .= '<p>' . sprintf( __( 'Total documents deleted: %d', 'woocommerce-jetpack' ), $deleted_invoices_counter ) . '</p>';
return $output;
}
}
endif;
return new WCJ_PDF_Invoicing_Renumerate_Tool();