agenta/agentanovaposhta

Nova Poshta regions, cities, warehouses updater and search

dev-master 2022-09-30 09:23 UTC

This package is auto-updated.

Last update: 2024-04-29 04:47:32 UTC


README

Импорт справочников Новой Почты (регионы, города, отделения), обновление справочника отделений из консоли. Компонент Livewire для выбора отделения (область, город, отделение).

Установка

Требования

Laravel 8
PHP 8.x
  1. Добавить через composer:
composer require agenta/agentanovaposhta
  1. Публикация файлов библиотеки daaner/novaposhta:
php artisan vendor:publish --provider="Daaner\NovaPoshta\NovaPoshtaServiceProvider"
  1. Публикация файла конфигурации (config/agentanovaposhta.php):
php artisan vendor:publish --tag=config
  1. Добавить в файл .env
#API-кей "Новой почты" (см. в личном кабинете)
NP_API_KEY=
#кол-во объектов на странице API (по опыту - максимум 100, иначе периодически таймаут)
AGENTA_NP_CHUNK_SIZE=100 

В конфиге можно настроить какие типы отделений импортировать в базу данных:

'import_warehouse_type' => [$NORMAL, $SHOP, $CARGO, $POSTOMAT, $POSTOMAT_PB],

и какие типы отделений доступны для выбора пользователем:

'allowed_warehouse_type' => [$NORMAL, $SHOP, $CARGO, $POSTOMAT, $POSTOMAT_PB],
  1. Запуск миграции:
php artisan migrate
  1. Запустить первичный импорт данных (может занимать 10-30 минут и более):
#импорт областей и населенных пунктов
php artisan np:import_cities
#импорт отделений
php artisan np:update_warehouses

Использование

Обновление данных

"Новая Почта" рекомендует обновлять справочник отделений один раз в сутки. Для этого следует запускать команду консоли (данные будут только добавляться, без удаления уже существующих — если отделение не работающее, то модели будет установлен active = false):

php artisan np:update_warehouses

Также можно обновлять справочник населенных пунктов и областей (без удаления, только создание и обновление):

php artisan np:import_cities

Компонент Livewire

  1. Опубликуйте шаблон компонента и оформите его нужными стилями:
php artisan vendor:publish --tag="views-agentanovaposhta"
  1. Добавьте в свой blade-шаблон
       ...
        @livewireStyles
    </head>
<body>

    @livewire('novaposhta-select-warehouse')
    ...
    @livewireScripts
    
</body>

компоненту можно передавать параметр 'cargo' => true для отображения только тех городов и отделений, которые являются грузовыми (для грузов свыше 30 кг), а также предыдущие выбранные значения области, города и отделения для отображения в случае перезагрузки страницы

@livewire('novaposhta-select-warehouse', [
    'cargo' => true,
    'selectedRegion' => old('np_region_id'),
    'selectedCity' => old('np_city_id'),
    'selectedWarehouse' => old('np_warehouse_id'),
])

Автор