GetDistanceFromSourceToAddress.php 1.84 KB
Newer Older
Ketan's avatar
Ketan committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
<?php
/**
 * Copyright © Magento, Inc. All rights reserved.
 * See COPYING.txt for license details.
 */
declare(strict_types=1);

namespace Magento\InventoryDistanceBasedSourceSelection\Model\DistanceProvider;

use Magento\InventoryApi\Api\Data\SourceInterface;
use Magento\InventorySourceSelectionApi\Api\Data\AddressInterface;
use Magento\InventoryDistanceBasedSourceSelectionApi\Api\GetDistanceInterface;
use Magento\InventoryDistanceBasedSourceSelectionApi\Api\GetLatLngFromAddressInterface;

/**
 * Class GetDistanceFromSourceToAddress
 */
class GetDistanceFromSourceToAddress
{
    /**
     * @var GetLatLngFromSource
     */
    private $getLatLngFromSource;

    /**
     * @var GetLatLngFromAddressInterface
     */
    private $getLatLngFromAddress;

    /**
     * @var GetDistanceInterface
     */
    private $getDistance;

    /**
     * GetDistanceFromSourceToAddress constructor.
     *
     * @param GetLatLngFromSource $getLatLngFromSource
     * @param GetLatLngFromAddressInterface $getLatLngFromAddress
     * @param GetDistanceInterface $getDistance
     */
    public function __construct(
        GetLatLngFromSource $getLatLngFromSource,
        GetLatLngFromAddressInterface $getLatLngFromAddress,
        GetDistanceInterface $getDistance
    ) {
        $this->getLatLngFromSource = $getLatLngFromSource;
        $this->getLatLngFromAddress = $getLatLngFromAddress;
        $this->getDistance = $getDistance;
    }

    /**
     * Get distance from source to address
     *
     * @param SourceInterface $source
     * @param AddressInterface $address
     * @return float
     */
    public function execute(SourceInterface $source, AddressInterface $address): float
    {
        return $this->getDistance->execute(
            $this->getLatLngFromSource->execute($source),
            $this->getLatLngFromAddress->execute($address)
        );
    }
}