feat(13-protection-packages): Pakiety ochronne SOFT/PREMIUM z panelu WP

- Panel admina (wp-admin > Rezerwacje > Pakiety ochronne) do zarzadzania
  nazwami, cenami za dobe, aktywnoscia i opisami pakietow SOFT i PREMIUM
  (zapis w wp_options carei_protection_packages)
- REST endpoint GET /carei/v1/protection-packages zwracajacy aktywne pakiety
- Radio cards SOFT/PREMIUM w modalu rezerwacji nad pozycjami "Pakiety ochronne"
  z API (osobne zrodlo danych, separator wizualny)
- Radio z deselect (klik zaznaczonego odznacza), natywny input z accent-color
- Pakiet NIE wysylany w priceItems Softra (powodowalo HTTP 400) - zamiast tego
  doklejany do comments booking i zapisywany w _carei_protection_package meta
- Summary frontend dokorysowuje wiersz pakietu w tabeli cen i dolicza do
  total gross (grandGross = softraGross + protectionTotal)
- Plan 13-01 oznaczony jako superseded (klient zmienil zrodlo danych)
- Phase 13 Complete, Milestone v0.5 Complete

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-20 00:45:24 +02:00
parent 9e4f47de25
commit 42efe93cdd
13 changed files with 987 additions and 25 deletions

View File

@@ -130,6 +130,13 @@ class Carei_REST_Proxy {
'callback' => array( $this, 'get_agreements' ),
'permission_callback' => '__return_true',
) );
// GET /protection-packages
register_rest_route( self::NAMESPACE, '/protection-packages', array(
'methods' => 'GET',
'callback' => array( $this, 'get_protection_packages' ),
'permission_callback' => '__return_true',
) );
}
/**
@@ -298,4 +305,20 @@ class Carei_REST_Proxy {
}
return $this->respond( $api->get_agreements() );
}
public function get_protection_packages( WP_REST_Request $request ) {
$all = Carei_Admin_Panel::get_protection_packages();
$out = array( 'soft' => null, 'premium' => null );
foreach ( array( 'soft', 'premium' ) as $key ) {
if ( isset( $all[ $key ] ) && ! empty( $all[ $key ]['active'] ) ) {
$out[ $key ] = array(
'key' => $key,
'name' => $all[ $key ]['name'],
'pricePerDay' => (float) $all[ $key ]['pricePerDay'],
'description' => $all[ $key ]['description'],
);
}
}
return rest_ensure_response( $out );
}
}