Skip to content

Commit a9e0d82

Browse files
authored
Merge pull request #28 from ingrammicro/v16-dev
V16 dev
2 parents b88dd69 + 25a7395 commit a9e0d82

32 files changed

+344
-49
lines changed

README.md

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ This library may be consumed in your project in order to automate the fulfillmen
2727
- Change the status of the requests from it's initial pending state to either inquiring, failed or approved.
2828
- Generate and upload usage files to report usage for active contracts and listings
2929
- Process usage file status changes
30+
- Work with Notes for requests
3031
- Generate logs
3132
- Collect debug logs in case of failure
3233

@@ -38,7 +39,7 @@ Connect PHP SDK is available on [Packagist](https://packagist.org/packages/apsco
3839
```json
3940
{
4041
"require": {
41-
"apsconnect/connect-sdk": "^15.0"
42+
"apsconnect/connect-sdk": "^16.0"
4243
}
4344
}
4445
```
@@ -157,7 +158,7 @@ class UploadUsage extends \Connect\UsageAutomation
157158
['id' => $listing->contract->id]
158159
)
159160
]);
160-
$this->submitUsage($usageFile, $usages);
161+
$this->usage->submitUsage($usageFile, $usages);
161162
return "processing done"
162163
}
163164
else{

src/AutomationEngine.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88

99
namespace Connect;
1010

11-
use Connect\Modules\Fulfilment;
11+
use Connect\Modules\Fulfillment;
1212
use Connect\Modules\TierConfiguration;
1313
use Connect\Modules\Usage;
1414
use GuzzleHttp\ClientInterface;
@@ -22,7 +22,7 @@
2222
* @property Config $config
2323
* @property LoggerInterface $logger
2424
* @property ClientInterface $http
25-
* @property Fulfilment $fulfillment
25+
* @property Fulfillment $fulfillment
2626
* @property TierConfiguration $tierConfiguration
2727
* @property Usage $usage
2828
* @package Connect
@@ -99,4 +99,4 @@ public function __call($name, $arguments)
9999
}
100100
}
101101
}
102-
}
102+
}

src/Conversation.php

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
<?php
2+
3+
/**
4+
* This file is part of the Ingram Micro Cloud Blue Connect SDK.
5+
*
6+
* @copyright (c) 2019. Ingram Micro. All Rights Reserved.
7+
*/
8+
9+
namespace Connect;
10+
11+
/**
12+
* Class Conversation
13+
* @package Connect
14+
*/
15+
class Conversation extends Model
16+
{
17+
public $id;
18+
public $instance_id;
19+
public $created;
20+
public $topic;
21+
22+
/**
23+
* @var RequestsProcessor
24+
* @noparse
25+
*/
26+
public $requestProcessor;
27+
28+
/**
29+
* @var ConversationMessage[]
30+
*/
31+
public $messages;
32+
33+
public function setMessages($messages)
34+
{
35+
$this->messages = Model::modelize('conversationMessages', $messages);
36+
}
37+
38+
/**
39+
* @param $message
40+
* @return array|Model
41+
*/
42+
public function addMessage($message)
43+
{
44+
if (isset($this->id)) {
45+
$request = $this->requestProcessor->sendRequest(
46+
'POST',
47+
"/conversations/" . $this->id . "/messages",
48+
json_encode(array("text" => $message))
49+
);
50+
return Model::modelize('conversationMessage', json_decode($request));
51+
}
52+
}
53+
}

src/ConversationMessage.php

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
<?php
2+
3+
/**
4+
* This file is part of the Ingram Micro Cloud Blue Connect SDK.
5+
*
6+
* @copyright (c) 2019. Ingram Micro. All Rights Reserved.
7+
*/
8+
9+
namespace Connect;
10+
11+
/**
12+
* Class ConversationMessage
13+
* @package Connect
14+
*/
15+
class ConversationMessage extends Model
16+
{
17+
public $id;
18+
public $conversation;
19+
public $created;
20+
public $text;
21+
public $type;
22+
23+
/**
24+
* @var Owner
25+
*/
26+
public $creator;
27+
}

src/FulfillmentAutomation.php

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,9 @@ public function process()
4040
protected function dispatchTierConfig($tierConfigRequest)
4141
{
4242
try {
43-
4443
if ($this->config->products && !in_array(
45-
$tierConfigRequest->configuration->product->id,
46-
$this->config->products
44+
$tierConfigRequest->configuration->product->id,
45+
$this->config->products
4746
)) {
4847
return 'Invalid product';
4948
}
@@ -74,8 +73,11 @@ protected function dispatchTierConfig($tierConfigRequest)
7473
} catch (Inquire $e) {
7574
// update parameters and move to inquire
7675
$this->tierConfiguration->updateTierConfigRequestParameters($tierConfigRequest, $e->params);//WORKING HERE!
77-
$this->tierConfiguration->sendRequest('POST',
78-
'/tier/config-requests/' . $tierConfigRequest->id . '/inquire', '{}');
76+
$this->tierConfiguration->sendRequest(
77+
'POST',
78+
'/tier/config-requests/' . $tierConfigRequest->id . '/inquire',
79+
'{}'
80+
);
7981
$processingResult = 'inquire';
8082
} catch (Fail $e) {
8183
// fail request
@@ -102,7 +104,6 @@ protected function dispatchTierConfig($tierConfigRequest)
102104
protected function dispatch($request)
103105
{
104106
try {
105-
106107
if ($this->config->products && !in_array($request->asset->product->id, $this->config->products)) {
107108
return 'Invalid product';
108109
}
@@ -121,19 +122,34 @@ protected function dispatch($request)
121122
'/requests/' . $request->id . '/approve',
122123
'{"template_id": "' . $msg->templateid . '"}'
123124
);
125+
try {
126+
$request->conversation()->addMessage('Activated using template ' . $msg->templateid);
127+
} catch (\Exception $e) {
128+
$this->logger->error("Error while saving result on conversation for request ".$request->id);
129+
}
124130
$processingResult = 'succeed (Activated using template ' . $msg->templateid . ')';
125131
} else {
126132
$this->fulfillment->sendRequest(
127133
'POST',
128134
'/requests/' . $request->id . '/approve',
129135
'{"activation_tile": "' . $msg->activationTile . '"}'
130136
);
137+
try {
138+
$request->conversation()->addMessage('Activated using Custom ActivationTile');
139+
} catch (GuzzleException $e) {
140+
$this->logger->error("Error while saving result on conversation for request ".$request->id);
141+
}
131142
$processingResult = 'succeed (' . $msg->activationTile . ')';
132143
}
133144
} catch (Inquire $e) {
134145
// update parameters and move to inquire
135146
$this->fulfillment->updateParameters($request, $e->params);
136147
$this->fulfillment->sendRequest('POST', '/requests/' . $request->id . '/inquire', '{}');
148+
try {
149+
$request->conversation()->addMessage($e->getMessage());
150+
} catch (GuzzleException $e) {
151+
$this->logger->error("Error while saving result on conversation for request ".$request->id);
152+
}
137153
$processingResult = 'inquire';
138154
} catch (Fail $e) {
139155
// fail request
@@ -142,14 +158,23 @@ protected function dispatch($request)
142158
'/requests/' . $request->id . '/fail',
143159
'{"reason": "' . $e->getMessage() . '"}'
144160
);
161+
try {
162+
$request->conversation()->addMessage($e->getMessage());
163+
} catch (\Exception $e) {
164+
$this->logger->error("Error while saving result on conversation for request ".$request->id);
165+
}
145166
$processingResult = 'fail';
146167
} catch (Skip $e) {
168+
try {
169+
$request->conversation()->addMessage($e->getMessage());
170+
} catch (\Exception $e) {
171+
$this->logger->error("Error while saving result on conversation for request ".$request->id);
172+
}
147173
$processingResult = 'skip';
148174
}
149175

150176
$this->logger->info("Finished processing of request ID=" . $request->id . " result=" . $processingResult);
151177

152178
return $processingResult;
153179
}
154-
155180
}

src/FulfillmentAutomationInterface.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,21 @@
1414
*/
1515
interface FulfillmentAutomationInterface
1616
{
17+
/**
18+
* @param $request
19+
* @return mixed
20+
* @throws Skip
21+
* @throws Inquire
22+
* @throws Fail
23+
*/
1724
public function processRequest($request);
1825

26+
/**
27+
* @param $tierConfigRequest
28+
* @return mixed
29+
* @throws Skip
30+
* @throws Inquire
31+
* @throws Fail
32+
*/
1933
public function processTierConfigRequest($tierConfigRequest);
2034
}

src/Item.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,13 @@
1414
*/
1515
class Item extends Model
1616
{
17+
public $display_name;
18+
public $global_id;
1719
public $id;
20+
public $item_type;
1821
public $mpn;
22+
public $period;
23+
public $type;
1924

2025
/**
2126
* @var int

src/Model.php

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,6 @@ public static function modelize($key, $value)
190190
* if any of the user cases from above match, create a single Connect\Model object.
191191
*/
192192
foreach ($namespaces as $namespace) {
193-
194193
$fqcn = $namespace . ucfirst($key);
195194
if (class_exists($fqcn, true)) {
196195
return new $fqcn($value);
@@ -199,8 +198,8 @@ public static function modelize($key, $value)
199198
$fqcn = $namespace . ucfirst(Inflector::singularize($key));
200199
if (strpos($key, '_') !== false) {
201200
$fqcn = $namespace . implode('', array_map(function ($word) {
202-
return ucfirst(Inflector::singularize($word));
203-
}, explode('_', $key)));
201+
return ucfirst(Inflector::singularize($word));
202+
}, explode('_', $key)));
204203
}
205204
if (class_exists($fqcn, true)) {
206205
return new $fqcn($value);

src/Modules/Core.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,4 +146,4 @@ public function sendRequest($verb, $path, $body = null)
146146

147147
return $response->getBody()->getContents();
148148
}
149-
}
149+
}

src/Modules/Fulfilment.php renamed to src/Modules/Fulfillment.php

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,40 @@
88

99
namespace Connect\Modules;
1010

11+
use Connect\Config;
1112
use Connect\Model;
1213
use Connect\Param;
1314
use Connect\Request;
15+
use GuzzleHttp\ClientInterface;
1416
use GuzzleHttp\Exception\GuzzleException;
17+
use Psr\Log\LoggerInterface;
1518

1619
/**
17-
* Class Fulfilment
20+
* Class Fulfillment
1821
* @package Connect\Modules
1922
*/
20-
class Fulfilment extends Core
23+
class Fulfillment extends Core
2124
{
25+
/**
26+
* TierConfiguration Service
27+
* @var TierConfiguration
28+
*/
29+
public $tierConfiguration;
30+
31+
/**
32+
* Fulfillment constructor.
33+
* @param Config $config
34+
* @param LoggerInterface $logger
35+
* @param ClientInterface $http
36+
* @param TierConfiguration $tierConfiguration
37+
*/
38+
public function __construct(Config $config, LoggerInterface $logger, ClientInterface $http, TierConfiguration $tierConfiguration)
39+
{
40+
parent::__construct($config, $logger, $http);
41+
42+
$this->tierConfiguration = $tierConfiguration;
43+
}
44+
2245
/**
2346
* List the pending requests
2447
* @param array $filters Filter for listing key->value or key->array(value1, value2)
@@ -79,4 +102,19 @@ public function renderTemplate($templateId, $request)
79102
$query = ($request instanceof Request) ? $request->id : $request;
80103
return $this->sendRequest('GET', '/templates/' . $templateId . '/render?request_id=' . $query);
81104
}
82-
}
105+
106+
/**
107+
* Dynamically call connect native module functions.
108+
* @param string $name
109+
* @param array $arguments
110+
* @return mixed
111+
*/
112+
public function __call($name, $arguments)
113+
{
114+
if (is_callable([$this->tierConfiguration, $name])) {
115+
return call_user_func_array([$this->tierConfiguration, $name], $arguments);
116+
}
117+
118+
return null;
119+
}
120+
}

0 commit comments

Comments
 (0)