/** * 6) Kolumny w tabeli klientów: następny SMS, typ SMS, akcje */ add_filter('manage_kt_client_posts_columns', function ($cols) { $cols['next_sms'] = 'Następny SMS'; $cols['sms_type'] = 'Typ SMS'; $cols['sms_actions'] = 'Akcje'; return $cols; }); add_action('manage_kt_client_posts_custom_column', function ($col, $post_id) { if ($col === 'next_sms') { $install = get_post_meta($post_id, 'install_date', true); if (!$install) { echo 'brak daty'; return; } try { $install_date = new DateTime($install); } catch (Exception $e) { echo 'błąd daty'; return; } $today = new DateTime('today'); $diff = $install_date->diff($today); $years = (int) $diff->y; // Rok 0 → SMS 14 dni if ($years === 0) { $d14 = clone $install_date; $d14->modify('+14 days'); echo $d14->format('Y-m-d'); return; } // Rok 1 → Twój moduł roczny if ($years === 1) { $r1 = clone $install_date; $r1->modify('+12 months -30 days'); echo $r1->format('Y-m-d'); return; } // Rok 2+ → wieloletnie $next = clone $install_date; $next->modify('+' . $years . ' years -30 days'); echo $next->format('Y-m-d'); } if ($col === 'sms_type') { $install = get_post_meta($post_id, 'install_date', true); if (!$install) { echo '-'; return; } try { $install_date = new DateTime($install); } catch (Exception $e) { echo '-'; return; } $today = new DateTime('today'); $diff = $install_date->diff($today); $years = (int) $diff->y; if ($years === 0) { echo '14 dni'; } elseif ($years === 1) { echo 'Roczny (gwarancja)'; } elseif ($years >= 2 && $years <= 5) { echo 'Roczny ' . $years . ' (gwarancja)'; } else { echo 'Roczny ' . $years . ' (bez gwarancji)'; } } if ($col === 'sms_actions') { echo 'Anuluj '; echo 'Wyślij teraz'; } }, 10, 2); /** * 7) Akcja: anuluj następny SMS */ add_action('admin_post_kt_cancel_next_sms', function () { if (!current_user_can('manage_options')) wp_die('Brak uprawnień.'); $id = (int) $_GET['client']; if ($id) { update_post_meta($id, '_cancel_next_sms', 'yes'); } wp_redirect(admin_url('edit.php?post_type=kt_client')); exit; }); /** * 8) Akcja: wyślij SMS teraz */ add_action('admin_post_kt_send_sms_now', function () { if (!current_user_can('manage_options')) wp_die('Brak uprawnień.'); $id = (int) $_GET['client']; if (!$id) wp_die('Brak ID.'); $phone = get_post_meta($id, 'client_phone', true); if (!$phone) wp_die('Brak numeru.'); // Używamy tej samej logiki co w CRON $install = get_post_meta($id, 'install_date', true); if (!$install) wp_die('Brak daty montażu.'); try { $install_date = new DateTime($install); } catch (Exception $e) { wp_die('Błąd daty.'); } $today = new DateTime('today'); $diff = $install_date->diff($today); $years = (int) $diff->y; // Treść SMS zależna od roku if ($years <= 5) { $raw = "Dzień dobry {IMIE}. Dla zachowania komfortu i higieny klimatyzacji montowanej {DATA_MONTAZU} warto wykonać okresowy przegląd: czyszczenie, dezynfekcję oraz kontrolę gwarancyjną. Producent wymaga takiego przeglądu, aby przedłużyć gwarancję o kolejny rok. Jeśli chcesz, napisz proszę SMS — dobiorę termin, który Ci pasuje."; } else { $raw = "Dzień dobry {IMIE}. Minęło już ponad 5 lat od montażu klimatyzacji ({DATA_MONTAZU}). Dla zachowania higieny i pełnej wydajności urządzenia warto wykonać okresowy przegląd: czyszczenie, dezynfekcję oraz kontrolę techniczną. Jeśli chcesz, napisz proszę SMS — dobiorę dogodny termin."; } $msg = kt_crm_render_sms_template($raw, $id); if (function_exists('kt_httpsms_send_sms')) { kt_httpsms_send_sms($phone, $msg); kt_crm_mark_sms_sent($id, 'Ręczne wysłanie SMS'); kt_crm_log_sms($id, $phone, $msg, 'Ręczne wysłanie SMS', 'manual'); } wp_redirect(admin_url('edit.php?post_type=kt_client')); exit; });