title: Filtrowanie punktów odbioru w SEIGI Delivery Manager

Dokumentacja funkcji sdm_filter_points()

Kluczowe pola danych

  • $datum['type']

    • Ustandaryzowany przez nas skrót typu punktu (np. PARCEL_LOCKER, PICKUP, PICKUP_PARCEL).
    • Nie zawsze odzwierciedla pełen zestaw możliwości punktu, bo przewoźnicy mogą zmieniać swoje kategorie.
  • $datum['type_specific']

    • Oryginalny kod lub flaga przekazana przez przewoźnika (może być null).
    • Jeśli jest null lub nieprecyzyjny, można próbować rozpoznać typ na podstawie nazwy ($datum['name']) lub innych pól.

Prosty przykład implementacji

function sdm_filter_points($mapData, $idCarrier, $object, $type, $bounds = null){
    $allowed_types = ['PARCEL_LOCKER', 'PICKUP', 'PICKUP_PARCEL']; // All types allowed
//    $allowed_types = ['PARCEL_LOCKER']; // Only Parcel Lockers allowed
//    $allowed_types = ['PICKUP_PARCEL']; // Only Pickup Parcels allowed
//    $allowed_types = ['PICKUP']; // Only Pickup Parcels allowed

    if($bounds) {
        foreach ($bounds as $index => $bound) {
            $bound_key = $bound['lat'] . '-' . $bound['lon'];
            foreach($mapData['data'][$bound_key] as $key => $datum){
                // Instead of $datum['type'] you can also check $datum['type_specific']. This once is provided by Carrier company
                if(!in_array($datum['type'], $allowed_types)){
                    unset($mapData['data'][$bound_key][$key]);
                }
            }
            $mapData['data'][$bound_key] = array_values($mapData['data'][$bound_key]);
        }
    } else {
        foreach($mapData['data'] as $key => $datum){
            // Instead of $datum['type'] you can also check $datum['type_specific']. This once is provided by Carrier company
            if(!in_array($datum['type'], $allowed_types)){
                unset($mapData['data'][$key]);
            }
        }
    }
    return $mapData;
}

Uwagi

  • Nie każda firma zwraca pełny type_specific — w razie potrzeby typ można wywnioskować z pola name lub opisu.