5 Commits

2 changed files with 45 additions and 73 deletions

View File

@@ -10,7 +10,7 @@ if ( ! defined( 'ABSPATH' ) ) {
class Siti_Stock_Supplier_Exports { class Siti_Stock_Supplier_Exports {
const CRON_HOOK = 'siti_stock_plugin_supplier_export'; const CRON_HOOK = 'siti_stock_plugin_supplier_export';
const SUPPLIER_META_KEY = '_wpbc_supplier'; const SUPPLIER_META_KEY = '_wpci_supplier';
/** /**
* @var Siti_Stock_Settings * @var Siti_Stock_Settings
@@ -178,7 +178,6 @@ class Siti_Stock_Supplier_Exports {
? $settings['supplier_exports'] ? $settings['supplier_exports']
: array(); : array();
$configured = $this->ensure_defaults( $configured );
$configured = $this->ensure_distinct_meta_suppliers( $configured ); $configured = $this->ensure_distinct_meta_suppliers( $configured );
uasort( uasort(
@@ -240,25 +239,28 @@ class Siti_Stock_Supplier_Exports {
$config['supplier'] $config['supplier']
); );
$body_lines = array(); $rows_count = count( $data['rows'] );
$body_lines[] = sprintf( $body = '';
$body .= '<p>' . sprintf(
/* translators: %s supplier name */ /* translators: %s supplier name */
__( 'Overzicht voor leverancier %s.', 'siti-stock-plugin' ), esc_html__( 'Overzicht voor leverancier %s.', 'siti-stock-plugin' ),
$config['supplier'] esc_html( $config['supplier'] )
); ) . '</p>';
$body_lines[] = sprintf( $body .= '<p>' . sprintf(
/* translators: %d total items */ /* translators: %d total items */
__( 'Totaal aantal regels: %d.', 'siti-stock-plugin' ), esc_html__( 'Totaal aantal regels: %d.', 'siti-stock-plugin' ),
count( $data['rows'] ) (int) $rows_count
); ) . '</p>';
if ( empty( $data['rows'] ) ) {
$body_lines[] = __( 'Er zijn geen bestellingen gevonden in de afgelopen 24 uur.', 'siti-stock-plugin' );
}
$body_lines[] = '';
$body_lines[] = $csv;
$headers = array( 'Content-Type: text/plain; charset=UTF-8' ); if ( empty( $data['rows'] ) ) {
$sent = wp_mail( $admin_email, $subject, implode( "\n", $body_lines ), $headers ); $body .= '<p>' . esc_html__( 'Er zijn geen bestellingen gevonden in de afgelopen 24 uur.', 'siti-stock-plugin' ) . '</p>';
} else {
$body .= '<p>' . esc_html__( 'CSV-overzicht (kopieer onderstaande tabel):', 'siti-stock-plugin' ) . '</p>';
$body .= '<pre style="font-family: monospace; white-space: pre;">' . esc_html( $csv ) . '</pre>';
}
$headers = array( 'Content-Type: text/html; charset=UTF-8' );
$sent = wp_mail( $admin_email, $subject, $body, $headers );
if ( ! $sent ) { if ( ! $sent ) {
return new WP_Error( 'siti_stock_mail_failed', __( 'E-mail verzenden is mislukt.', 'siti-stock-plugin' ) ); return new WP_Error( 'siti_stock_mail_failed', __( 'E-mail verzenden is mislukt.', 'siti-stock-plugin' ) );
@@ -307,16 +309,18 @@ class Siti_Stock_Supplier_Exports {
private function collect_rows_for_supplier( $supplier ) { private function collect_rows_for_supplier( $supplier ) {
$key = $this->normalize_supplier_key( $supplier ); $key = $this->normalize_supplier_key( $supplier );
$after_timestamp = current_time( 'timestamp' ) - DAY_IN_SECONDS; $site_timezone = function_exists( 'wp_timezone' ) ? wp_timezone() : new DateTimeZone( wp_timezone_string() );
$date_filter = array( $after_date = new DateTimeImmutable( 'now', $site_timezone );
'after' => gmdate( 'Y-m-d H:i:s', $after_timestamp ), $after_date = $after_date->sub( new DateInterval( 'P1D' ) );
); $after_utc = $after_date->setTimezone( new DateTimeZone( 'UTC' ) );
if ( class_exists( 'WC_DateTime' ) ) { $date_query = array(
$after_object = new WC_DateTime( '@' . $after_timestamp ); array(
$after_object->setTimezone( new DateTimeZone( 'UTC' ) ); 'column' => 'date_created_gmt',
$date_filter = array( 'after' => $after_object ); 'after' => $after_utc->format( 'Y-m-d H:i:s' ),
} 'inclusive' => true,
),
);
$query = new WC_Order_Query( $query = new WC_Order_Query(
array( array(
@@ -324,7 +328,7 @@ class Siti_Stock_Supplier_Exports {
'limit' => -1, 'limit' => -1,
'type' => 'shop_order', 'type' => 'shop_order',
'return' => 'objects', 'return' => 'objects',
'date_created' => $date_filter, 'date_query' => $date_query,
) )
); );
@@ -437,7 +441,7 @@ class Siti_Stock_Supplier_Exports {
$lines[] = sprintf( '%s;%d', $sku, $quantity ); $lines[] = sprintf( '%s;%d', $sku, $quantity );
} }
return implode( "\n", $lines ); return implode( "\r\n", $lines );
} }
/** /**
@@ -469,37 +473,6 @@ class Siti_Stock_Supplier_Exports {
} }
} }
/**
* Ensure default suppliers exist in config.
*
* @param array<string,mixed> $configured Configured values.
* @return array<string,array<string,mixed>>
*/
private function ensure_defaults( array $configured ) {
foreach ( $this->get_default_suppliers() as $key => $data ) {
if ( isset( $configured[ $key ] ) ) {
if ( empty( $configured[ $key ]['supplier'] ) ) {
$configured[ $key ]['supplier'] = $data['label'];
}
$configured[ $key ]['time'] = $this->normalize_time(
isset( $configured[ $key ]['time'] ) ? $configured[ $key ]['time'] : $data['time']
);
if ( ! isset( $configured[ $key ]['enabled'] ) ) {
$configured[ $key ]['enabled'] = $data['enabled'];
}
continue;
}
$configured[ $key ] = array(
'supplier' => $data['label'],
'time' => $data['time'],
'enabled' => $data['enabled'],
);
}
return $configured;
}
/** /**
* Add entries for suppliers found in product meta. * Add entries for suppliers found in product meta.
* *
@@ -507,22 +480,21 @@ class Siti_Stock_Supplier_Exports {
* @return array<string,mixed> * @return array<string,mixed>
*/ */
private function ensure_distinct_meta_suppliers( array $configured ) { private function ensure_distinct_meta_suppliers( array $configured ) {
$result = array();
foreach ( $this->get_distinct_suppliers() as $supplier ) { foreach ( $this->get_distinct_suppliers() as $supplier ) {
$key = $this->normalize_supplier_key( $supplier ); $key = $this->normalize_supplier_key( $supplier );
$existing = isset( $configured[ $key ] ) ? $configured[ $key ] : array();
if ( isset( $configured[ $key ] ) ) { $result[ $key ] = array(
$configured[ $key ]['supplier'] = $supplier;
continue;
}
$configured[ $key ] = array(
'supplier' => $supplier, 'supplier' => $supplier,
'time' => $this->get_default_time_for_key( $key ), 'time' => $this->normalize_time(
'enabled' => $this->is_default_enabled( $key ), isset( $existing['time'] ) ? $existing['time'] : $this->get_default_time_for_key( $key )
),
'enabled' => isset( $existing['enabled'] ) ? (bool) $existing['enabled'] : $this->is_default_enabled( $key ),
); );
} }
return $configured; return $result;
} }
/** /**

View File

@@ -3,7 +3,7 @@
* Plugin Name: Siti Stock Plugin * Plugin Name: Siti Stock Plugin
* Plugin URI: https://github.com/SitiWeb/siti-stock-plugin * Plugin URI: https://github.com/SitiWeb/siti-stock-plugin
* Description: Synchroniseert WooCommerce voorraad met het externe Siti voorraadplatform. * Description: Synchroniseert WooCommerce voorraad met het externe Siti voorraadplatform.
* Version: 1.2.3 * Version: 1.2.7
* Author: Siti Web * Author: Siti Web
* Author URI: https://www.siti.nl * Author URI: https://www.siti.nl
* Requires PHP: 8.1 * Requires PHP: 8.1
@@ -16,7 +16,7 @@ if ( ! defined( 'ABSPATH' ) ) {
exit; exit;
} }
define( 'SITI_STOCK_PLUGIN_VERSION', '1.2.3' ); define( 'SITI_STOCK_PLUGIN_VERSION', '1.2.7' );
define( 'SITI_STOCK_PLUGIN_FILE', __FILE__ ); define( 'SITI_STOCK_PLUGIN_FILE', __FILE__ );
define( 'SITI_STOCK_PLUGIN_DIR', plugin_dir_path( __FILE__ ) ); define( 'SITI_STOCK_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );