Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Optimization profile #36

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
151 changes: 151 additions & 0 deletions UnitTestFiles/Test/V5/OptimizationProfilesUnitTests.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,151 @@
<?php

namespace UnitTestFiles\Test;

use Route4Me\Constants;
use Route4Me\Exception\ApiError;
use Route4Me\Route4Me;
use Route4Me\V5\AddressBook\ResponsePagination;
use Route4Me\V5\OptimizationProfiles\Part;
use Route4Me\V5\OptimizationProfiles\ResponseOptimizationProfile;
use Route4Me\V5\OptimizationProfiles\ResponseOptimizationProfiles;
use Route4Me\V5\OptimizationProfiles\ResponseSaveOptimizationProfile;
use Route4Me\V5\OptimizationProfiles\ResponseSaveOptimizationProfiles;
use Route4Me\V5\OptimizationProfiles\OptimizationProfiles;

final class OptimizationProfilesTests extends \PHPUnit\Framework\TestCase
{
public static ?string $default_profile_id = null;

public static function setUpBeforeClass() : void
{
Route4Me::setApiKey(Constants::API_KEY);
}

public function testPartCanBeCreateEmpty() : void
{
$this->assertInstanceOf(Part::class, new Part());
}

public function testPartCanBeCreateFromArray() : void
{
$this->assertInstanceOf(Part::class, new Part([
'guid' => '1',
'Data' => '2',
'Config' => '3'
]));
}

public function testResponseOptimizationProfilesCanBeCreateEmpty() : void
{
$this->assertInstanceOf(ResponseOptimizationProfiles::class, new ResponseOptimizationProfiles());
}

public function testResponseOptimizationProfilesCanBeCreateFromArray() : void
{
$this->assertInstanceOf(ResponseOptimizationProfiles::class, new ResponseOptimizationProfiles([
'items' => [
[
'optimization_profile_id' => '1',
'profile_name' => 'aaa',
'is_default' => false
], [
'optimization_profile_id' => '2',
'profile_name' => 'bbb',
'is_default' => true
]
]
]));
}

public function testResponseSaveOptimizationProfilesCanBeCreateEmpty() : void
{
$this->assertInstanceOf(ResponseSaveOptimizationProfiles::class, new ResponseSaveOptimizationProfiles());
}

public function testResponseSaveOptimizationProfilesCanBeCreateFromArray() : void
{
$this->assertInstanceOf(ResponseSaveOptimizationProfiles::class, new ResponseSaveOptimizationProfiles([
'items' => [
[
'guid' => '1',
'id' => 'aaa',
'parts' => [[
'guid' => '11',
'Data' => '22',
'Config' => '33'
], [
'guid' => '111',
'Data' => '222',
'Config' => '333'
]]
], [
'guid' => '2',
'id' => 'bbb',
'parts' => [[
'guid' => '111',
'Data' => '222',
'Config' => '333'
]]
]
]
]));
}

public function testOptimizationProfilesCanBeCreateEmpty() : void
{
$this->assertInstanceOf(OptimizationProfiles::class, new OptimizationProfiles());
}

public function testGetAllMustReturnResponseOptimizationProfiles() : void
{
$op = new OptimizationProfiles();
$profiles = $op->getAll();

$this->assertInstanceOf(ResponseOptimizationProfiles::class, $profiles);
$this->assertNotNull($profiles->items);

foreach ($profiles->items as $key => $value) {
if ($value->is_default) {
self::$default_profile_id = $value->optimization_profile_id;
break;
}
}
$this->assertNotNull(self::$default_profile_id);
}

public function testSaveMustReturnResponseSaveOptimizationProfiles() : void
{
$op = new OptimizationProfiles();

$params = [
'items' => [[
'guid' => 'eaa',
'parts' => [[
'guid' => 'pav',
'data' => [ 'append_date_to_route_name' => true ]
]],
'id' => self::$default_profile_id
]]
];

$result = $op->save($params);

$this->assertInstanceOf(ResponseSaveOptimizationProfile::class, $result);
}

public function testDeleteMustReturnResponseSaveOptimizationProfiles() : void
{
$op = new OptimizationProfiles();

$params = [
'items' => [[
'id' => self::$default_profile_id
]]
];

$result = $op->delete($params);

$this->assertInstanceOf(ResponseSaveOptimizationProfile::class, $result);
}
}
2 changes: 1 addition & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
"name": "route4me/route4me-php",
"description": "Access Route4Me's logistics-as-a-service API using our PHP SDK",
"minimum-stability": "stable",
"version": "1.3.1",
"version": "1.4.0",
"authors": [
{
"name": "Igor Route4Me",
Expand Down
67 changes: 67 additions & 0 deletions examples/OptimizationProfile/FullflowSample.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<?php

//**********************************************************************
// Optimization profile Workflow fulflow sample.
//**********************************************************************

namespace Route4Me;

$root = realpath(dirname(__FILE__).'/../../');
require $root.'/vendor/autoload.php';

use Exception;
use Route4Me\Exception\ApiError;
use Route4Me\V5\OptimizationProfiles\OptimizationProfiles;

// Set the api key in the Route4me class
Route4Me::setApiKey(Constants::API_KEY);

$op = new OptimizationProfiles();

try {
// get default optimization profile id
$profiles = $op->getAll();
$default_profile = null;

foreach ($profiles->items as $key => $value) {
if ($value->is_default) {
$default_profile = $value;
break;
}
}

if ($default_profile === null) {
echo 'Default profile is absent.' . PHP_EOL;
} else {
echo 'Found default optimization profile: ' . $default_profile->optimization_profile_id . PHP_EOL;

// data to save
$params = [
'items' => [[
'guid' => 'eaa',
'parts' => [[
'guid' => 'pav',
'data' => [ 'append_date_to_route_name' => true ]
]],
'id' => $default_profile->optimization_profile_id
]]
];

$res = $op->save($params);
echo 'Data for optimization_profile_id: ' . $default_profile->optimization_profile_id
. ' was saved successful.' . PHP_EOL;

// id to delete
$params = [
'items' => [[
'id' => $default_profile->optimization_profile_id
]]
];

$res = $op->delete($params);
echo 'Optimization profile with optimization_profile_id: ' . $default_profile->optimization_profile_id
. ' was deleted successful.' . PHP_EOL;
}
} catch (Exception | ApiError $e) {
echo 'Error, Code: ' . $e->getCode() . PHP_EOL . 'Message: ' . $e->getMessage() . PHP_EOL;
}
2 changes: 2 additions & 0 deletions phpunit.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@
<file>UnitTestFiles/Test/UserTests.php</file>
<file>UnitTestFiles/Test/VehicleTests.php</file>
<file>UnitTestFiles/Test/V5/AddressBookUnitTests.php</file>
<file>UnitTestFiles/Test/V5/OptimizationProfilesUnitTests.php</file>
<file>UnitTestFiles/Test/V5/OrderUnitTests.php</file>
<file>UnitTestFiles/Test/V5/PodWorkflowUnitTests.php</file>
<file>UnitTestFiles/Test/V5/RecurringRoutesUnitTests.php</file>
Expand All @@ -42,6 +43,7 @@
</testsuite>
<testsuite name="Route4me PHP SDK Test Suite Small">
<file>UnitTestFiles/Test/V5/AddressBookUnitTests.php</file>
<file>UnitTestFiles/Test/V5/OptimizationProfilesUnitTests.php</file>
<file>UnitTestFiles/Test/V5/OrderUnitTests.php</file>
<file>UnitTestFiles/Test/V5/PodWorkflowUnitTests.php</file>
<file>UnitTestFiles/Test/V5/RecurringRoutesUnitTests.php</file>
Expand Down
14 changes: 11 additions & 3 deletions src/Route4Me/OptimizationProblem.php
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,12 @@ class OptimizationProblem extends Common
*/
public $links = [];

/**
* Optimization profile ID
* @var string
*/
public $optimization_profile_id;

public function __construct()
{
Route4Me::setBaseUrl(Endpoint::BASE_URL);
Expand All @@ -103,6 +109,7 @@ public static function fromArray(array $params)
{
$problem = new self();
$problem->optimization_problem_id = Common::getValue($params, 'optimization_problem_id');
$problem->optimization_profile_id = Common::getValue($params, 'optimization_profile_id');
$problem->user_errors = Common::getValue($params, 'user_errors', []);
$problem->state = Common::getValue($params, 'state', []);
$problem->sent_to_background = Common::getValue($params, 'sent_to_background', []);
Expand Down Expand Up @@ -144,9 +151,10 @@ public static function optimize(OptimizationProblemParams $params)
'method' => 'POST',
'query' => Route4Me::generateRequestParameters($allQueryFields, $params),
'body' => [
'addresses' => $params->getAddressesArray(),
'depots' => $params->getDepotsArray(),
'parameters' => $params->getParametersArray(),
'addresses' => $params->getAddressesArray(),
'depots' => $params->getDepotsArray(),
'parameters' => $params->getParametersArray(),
'optimization_profile_id' => $params->optimization_profile_id
],
]);

Expand Down
4 changes: 3 additions & 1 deletion src/Route4Me/OptimizationProblemParams.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ class OptimizationProblemParams extends Common
public $route_path_output;
public $optimized_callback_url;
public $redirect = true;
public $optimization_profile_id;

public static function fromArray($params)
{
Expand All @@ -42,7 +43,7 @@ public static function fromArray($params)
$param->addAddress($address);
}

if (isset($params['depots'] )) {
if (isset($params['depots'])) {
foreach ($params['depots'] as $depot) {
if (!($depot instanceof Address)) {
$depot = Address::fromArray($depot);
Expand All @@ -59,6 +60,7 @@ public static function fromArray($params)
$param->optimization_problem_id = self::getValue($params, 'optimization_problem_id');
$param->reoptimize = self::getValue($params, 'reoptimize');
$param->redirect = filter_var(self::getValue($params, 'redirect', true), FILTER_VALIDATE_BOOLEAN);
$param->optimization_profile_id = self::getValue($params, 'optimization_profile_id');

return $param;
}
Expand Down
4 changes: 4 additions & 0 deletions src/Route4Me/V5/Enum/Endpoint.php
Original file line number Diff line number Diff line change
Expand Up @@ -133,4 +133,8 @@ class Endpoint
const ORDER_BATCH_UPDATE = self::ORDER . "/batch-update";
const ORDER_BATCH_UPDATE_FILTER = self::ORDER_BATCH_UPDATE . "/filter";
const ORDER_CUSTOM_FIELDS = self::ORDER . "/order-custom-user-fields";

const OPTIMIZATION_PROFILES_LIST = self::MAIN_HOST . "/optimization-profiles/data-list";
const OPTIMIZATION_PROFILES_SAVE = self::MAIN_HOST . "/optimization-profiles/save-entities";
const OPTIMIZATION_PROFILES_DELETE = self::MAIN_HOST . "/optimization-profiles/delete-entities";
}
11 changes: 6 additions & 5 deletions src/Route4Me/V5/OptimizationProblem.php
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,7 @@ public static function fromArray(array $params)


$problem->optimization_problem_id = Common::getValue($params, 'optimization_problem_id');
$problem->optimization_profile_id = Common::getValue($params, 'optimization_profile_id');
$problem->user_errors = Common::getValue($params, 'user_errors', []);
$problem->state = Common::getValue($params, 'state', []);
$problem->sent_to_background = Common::getValue($params, 'sent_to_background', []);
Expand Down Expand Up @@ -115,9 +116,10 @@ public static function optimize(OptimizationProblemParams $params)
'method' => 'POST',
'query' => Route4Me::generateRequestParameters($allQueryFields, $params),
'body' => [
'addresses' => $params->getAddressesArray(),
'depots' => $params->getDepotsArray(),
'parameters' => $params->getParametersArray(),
'addresses' => $params->getAddressesArray(),
'depots' => $params->getDepotsArray(),
'parameters' => $params->getParametersArray(),
'optimization_profile_id' => $params->optimization_profile_id
],
]);

Expand Down Expand Up @@ -162,5 +164,4 @@ public function removeOptimization($params)

return $response;
}

}
}
4 changes: 3 additions & 1 deletion src/Route4Me/V5/OptimizationProblemParams.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ class OptimizationProblemParams extends \Route4Me\Common
public $route_path_output;
public $optimized_callback_url;
public $redirect = true;
public $optimization_profile_id;

public static function fromArray($params)
{
Expand All @@ -44,7 +45,7 @@ public static function fromArray($params)
$param->addAddress($address);
}

if (isset($params['depots'] )) {
if (isset($params['depots'])) {
foreach ($params['depots'] as $depot) {
if (!($depot instanceof AddressV5)) {
$depot = AddressV5::fromArray($depot);
Expand All @@ -61,6 +62,7 @@ public static function fromArray($params)
$param->optimization_problem_id = self::getValue($params, 'optimization_problem_id');
$param->reoptimize = self::getValue($params, 'reoptimize');
$param->redirect = filter_var(self::getValue($params, 'redirect', true), FILTER_VALIDATE_BOOLEAN);
$param->optimization_profile_id = self::getValue($params, 'optimization_profile_id');

return $param;
}
Expand Down
Loading