/* Plugin Name: Fio párování objednávek Description: Párování plateb z Fio banky s WooCommerce objednávkami – podporuje částečné platby a zobrazuje seznam transakcí. Author: Tibor Černý Version: 1.1 */ if (!defined('ABSPATH')) exit; function fio_ziskej_transakce() { if (!defined('FIO_API_TOKEN')) return []; $od = date('Y-m-d', strtotime('-30 days')); $do = date('Y-m-d'); $url = "https://www.fio.cz/ib_api/rest/periods/" . FIO_API_TOKEN . "/$od/$do/transactions.json"; $response = wp_remote_get($url); if (is_wp_error($response)) return []; $data = json_decode(wp_remote_retrieve_body($response), true); return $data['accountStatement']['transactionList']['transaction'] ?? []; } function fio_paruj_objednavky($transakce) { $sparovano = 0; $transakce_by_vs = []; foreach ($transakce as $tx) { // 💰 Částka z column1 $castka_raw = $tx['column1']['value'] ?? null; $castka = floatval(str_replace(',', '.', preg_replace('/[^\d.,-]/', '', $castka_raw))); if ($castka === 0.0) continue; // 🔢 VS z column5 $vs_raw = $tx['column5']['value'] ?? ''; preg_match_all('/\d{3,}/', $vs_raw, $matches); $vs = isset($matches[0][0]) ? $matches[0][0] : null; if (!$vs || !ctype_digit($vs)) continue; $vs = intval($vs); $transakce_by_vs[$vs][] = [ 'castka' => $castka, 'datum' => $tx['column0']['value'] ?? '', 'poznamka' => $tx['column25']['value'] ?? '', ]; } foreach ($transakce_by_vs as $vs => $platby) { $order = wc_get_order($vs); if (!$order) continue; $stav = $order->get_status(); if (!in_array($stav, ['on-hold', 'pending', 'failed'])) { continue; // nepřepisujeme jiné stavy } $celkem = floatval($order->get_total()); $suma = array_sum(array_column($platby, 'castka')); if (abs($suma - $celkem) < 0.01 || $suma > $celkem) { $order->update_status('paid', "💰 Platba přes Fio API: {$suma} Kč (VS {$vs})"); $sparovano++; } else { $rozdil = $celkem - $suma; $order->add_order_note("⚠️ Částečná platba přes Fio: {$suma} Kč, zbývá " . number_format($rozdil, 2, ',', ' ') . " Kč"); } } return $sparovano; } // 🖱️ Admin stránka add_action('admin_menu', function () { add_submenu_page( 'woocommerce', 'Fio párování', 'Fio párování', 'manage_woocommerce', 'fio-parovani', 'fio_zobraz_stranku' ); }); function fio_zobraz_stranku() { echo '

📥 Párování plateb z Fio

'; $transakce = fio_ziskej_transakce(); // Seřadíme od nejnovějších usort($transakce, function($a, $b) { return strtotime($b['column0']['value']) <=> strtotime($a['column0']['value']); }); if (isset($_POST['spustit_fio_parovani']) && current_user_can('manage_woocommerce')) { $sparovano = fio_paruj_objednavky($transakce); echo '

✅ Spárováno ' . $sparovano . ' objednávek.

'; } echo '
📦 Seznam všech objednávek

'; echo '

📄 Transakce za posledních 30 dní

'; echo ''; // seskupíme transakce podle VS $seskupeno = []; foreach ($transakce as $tx) { $vs = trim($tx['column5']['value'] ?? ''); if (!$vs || !ctype_digit($vs)) continue; $castka = floatval(str_replace(',', '.', preg_replace('/[^\d.,-]/', '', $tx['column1']['value'] ?? 0))); if ($castka === 0.0) continue; $seskupeno[$vs]['castky'][] = $castka; $seskupeno[$vs]['datum'] = $tx['column0']['value'] ?? ''; $seskupeno[$vs]['poznamka'] = $tx['column25']['value'] ?? ''; } // seřadíme podle datumu (od nejnovějších) uasort($seskupeno, function($a, $b) { return strtotime($b['datum']) <=> strtotime($a['datum']); }); foreach ($seskupeno as $vs => $info) { $zaplaceno = array_sum($info['castky']); $datum = esc_html($info['datum']); $poznamka = esc_html($info['poznamka']); $stav = '❌ Nenalezeno'; $objednavka_odkaz = '-'; $rozdil_text = '-'; $objednavka_celkem = '-'; $order = wc_get_order($vs); if ($order) { $objednavka_celkem = number_format($celkem, 2, ',', ' ') . ' Kč'; $celkem = floatval($order->get_total()); $objednavka_odkaz = '#' . $order->get_id() . ''; $rozdil_hodnota = $zaplaceno - $celkem; if (abs($rozdil_hodnota) < 0.01) { $stav = '✅ Zaplaceno'; $rozdil_text = '- 0,00 Kč'; } elseif ($rozdil_hodnota > 0) { $stav = '🔺 Přeplatek'; $rozdil_text = '+ ' . number_format($rozdil_hodnota, 2, ',', ' ') . ' Kč navíc'; } elseif ($zaplaceno > 0) { $stav = '⚠️ Částečně'; $rozdil_text = '- ' . number_format(abs($rozdil_hodnota), 2, ',', ' ') . ' Kč zbývá'; } else { $stav = '⚠️ Nespárováno'; $rozdil_text = '- ' . number_format($celkem, 2, ',', ' ') . ' Kč zbývá'; } } echo ""; } echo '
Datum VS Částka Stav Zaplaceno Rozdíl Objednávka Poznámka
{$datum} {$vs} {$objednavka_celkem} {$stav} " . number_format($zaplaceno, 2, ',', ' ') . " Kč {$rozdil_text} {$objednavka_odkaz} {$poznamka}
'; } // cron pro volaní z NAS add_action('rest_api_init', function () { register_rest_route('fio-parovani/v1', '/cron', [ 'methods' => 'GET', 'callback' => 'fio_parovani_cron_callback', 'permission_callback' => '__return_true', // případně omez IP ]); }); function fio_parovani_cron_callback() { $transakce = fio_ziskej_transakce(); $sparovano = fio_paruj_objednavky($transakce); return rest_ensure_response([ 'status' => 'OK', 'sparovano' => $sparovano ]); } Canon papír Black Label Premium A4 80g 500 listů : min.odběr 50 balíčků - PROXIMA spol. s r.o.

Vyhledávání

Canon papír Black Label Premium A4 80g 500 listů : min.odběr 50 balíčků

118 

Qty
Kód:9196603554A

180 skladem (další dostupné na objednávku)

Kancelářský papír prémiové kvality “B” pro náročnější tisky, doporučovaný pro vysokorychlostní tisk, oboustranné kopírování a monochromatický laserový a inkoustový tisk.
Vyšší bělost : CIE 164

 

*vyžadovaná položka
Back to Top