Skip to content

Commit

Permalink
Merge pull request #28 from ingrammicro/v16-dev
Browse files Browse the repository at this point in the history
V16 dev
  • Loading branch information
marcserrat authored Apr 30, 2019
2 parents b88dd69 + 25a7395 commit a9e0d82
Show file tree
Hide file tree
Showing 32 changed files with 344 additions and 49 deletions.
5 changes: 3 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ This library may be consumed in your project in order to automate the fulfillmen
- Change the status of the requests from it's initial pending state to either inquiring, failed or approved.
- Generate and upload usage files to report usage for active contracts and listings
- Process usage file status changes
- Work with Notes for requests
- Generate logs
- Collect debug logs in case of failure

Expand All @@ -38,7 +39,7 @@ Connect PHP SDK is available on [Packagist](https://packagist.org/packages/apsco
```json
{
"require": {
"apsconnect/connect-sdk": "^15.0"
"apsconnect/connect-sdk": "^16.0"
}
}
```
Expand Down Expand Up @@ -157,7 +158,7 @@ class UploadUsage extends \Connect\UsageAutomation
['id' => $listing->contract->id]
)
]);
$this->submitUsage($usageFile, $usages);
$this->usage->submitUsage($usageFile, $usages);
return "processing done"
}
else{
Expand Down
6 changes: 3 additions & 3 deletions src/AutomationEngine.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@

namespace Connect;

use Connect\Modules\Fulfilment;
use Connect\Modules\Fulfillment;
use Connect\Modules\TierConfiguration;
use Connect\Modules\Usage;
use GuzzleHttp\ClientInterface;
Expand All @@ -22,7 +22,7 @@
* @property Config $config
* @property LoggerInterface $logger
* @property ClientInterface $http
* @property Fulfilment $fulfillment
* @property Fulfillment $fulfillment
* @property TierConfiguration $tierConfiguration
* @property Usage $usage
* @package Connect
Expand Down Expand Up @@ -99,4 +99,4 @@ public function __call($name, $arguments)
}
}
}
}
}
53 changes: 53 additions & 0 deletions src/Conversation.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
<?php

/**
* This file is part of the Ingram Micro Cloud Blue Connect SDK.
*
* @copyright (c) 2019. Ingram Micro. All Rights Reserved.
*/

namespace Connect;

/**
* Class Conversation
* @package Connect
*/
class Conversation extends Model
{
public $id;
public $instance_id;
public $created;
public $topic;

/**
* @var RequestsProcessor
* @noparse
*/
public $requestProcessor;

/**
* @var ConversationMessage[]
*/
public $messages;

public function setMessages($messages)
{
$this->messages = Model::modelize('conversationMessages', $messages);
}

/**
* @param $message
* @return array|Model
*/
public function addMessage($message)
{
if (isset($this->id)) {
$request = $this->requestProcessor->sendRequest(
'POST',
"/conversations/" . $this->id . "/messages",
json_encode(array("text" => $message))
);
return Model::modelize('conversationMessage', json_decode($request));
}
}
}
27 changes: 27 additions & 0 deletions src/ConversationMessage.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<?php

/**
* This file is part of the Ingram Micro Cloud Blue Connect SDK.
*
* @copyright (c) 2019. Ingram Micro. All Rights Reserved.
*/

namespace Connect;

/**
* Class ConversationMessage
* @package Connect
*/
class ConversationMessage extends Model
{
public $id;
public $conversation;
public $created;
public $text;
public $type;

/**
* @var Owner
*/
public $creator;
}
39 changes: 32 additions & 7 deletions src/FulfillmentAutomation.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,9 @@ public function process()
protected function dispatchTierConfig($tierConfigRequest)
{
try {

if ($this->config->products && !in_array(
$tierConfigRequest->configuration->product->id,
$this->config->products
$tierConfigRequest->configuration->product->id,
$this->config->products
)) {
return 'Invalid product';
}
Expand Down Expand Up @@ -74,8 +73,11 @@ protected function dispatchTierConfig($tierConfigRequest)
} catch (Inquire $e) {
// update parameters and move to inquire
$this->tierConfiguration->updateTierConfigRequestParameters($tierConfigRequest, $e->params);//WORKING HERE!
$this->tierConfiguration->sendRequest('POST',
'/tier/config-requests/' . $tierConfigRequest->id . '/inquire', '{}');
$this->tierConfiguration->sendRequest(
'POST',
'/tier/config-requests/' . $tierConfigRequest->id . '/inquire',
'{}'
);
$processingResult = 'inquire';
} catch (Fail $e) {
// fail request
Expand All @@ -102,7 +104,6 @@ protected function dispatchTierConfig($tierConfigRequest)
protected function dispatch($request)
{
try {

if ($this->config->products && !in_array($request->asset->product->id, $this->config->products)) {
return 'Invalid product';
}
Expand All @@ -121,19 +122,34 @@ protected function dispatch($request)
'/requests/' . $request->id . '/approve',
'{"template_id": "' . $msg->templateid . '"}'
);
try {
$request->conversation()->addMessage('Activated using template ' . $msg->templateid);
} catch (\Exception $e) {
$this->logger->error("Error while saving result on conversation for request ".$request->id);
}
$processingResult = 'succeed (Activated using template ' . $msg->templateid . ')';
} else {
$this->fulfillment->sendRequest(
'POST',
'/requests/' . $request->id . '/approve',
'{"activation_tile": "' . $msg->activationTile . '"}'
);
try {
$request->conversation()->addMessage('Activated using Custom ActivationTile');
} catch (GuzzleException $e) {
$this->logger->error("Error while saving result on conversation for request ".$request->id);
}
$processingResult = 'succeed (' . $msg->activationTile . ')';
}
} catch (Inquire $e) {
// update parameters and move to inquire
$this->fulfillment->updateParameters($request, $e->params);
$this->fulfillment->sendRequest('POST', '/requests/' . $request->id . '/inquire', '{}');
try {
$request->conversation()->addMessage($e->getMessage());
} catch (GuzzleException $e) {
$this->logger->error("Error while saving result on conversation for request ".$request->id);
}
$processingResult = 'inquire';
} catch (Fail $e) {
// fail request
Expand All @@ -142,14 +158,23 @@ protected function dispatch($request)
'/requests/' . $request->id . '/fail',
'{"reason": "' . $e->getMessage() . '"}'
);
try {
$request->conversation()->addMessage($e->getMessage());
} catch (\Exception $e) {
$this->logger->error("Error while saving result on conversation for request ".$request->id);
}
$processingResult = 'fail';
} catch (Skip $e) {
try {
$request->conversation()->addMessage($e->getMessage());
} catch (\Exception $e) {
$this->logger->error("Error while saving result on conversation for request ".$request->id);
}
$processingResult = 'skip';
}

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

return $processingResult;
}

}
14 changes: 14 additions & 0 deletions src/FulfillmentAutomationInterface.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,21 @@
*/
interface FulfillmentAutomationInterface
{
/**
* @param $request
* @return mixed
* @throws Skip
* @throws Inquire
* @throws Fail
*/
public function processRequest($request);

/**
* @param $tierConfigRequest
* @return mixed
* @throws Skip
* @throws Inquire
* @throws Fail
*/
public function processTierConfigRequest($tierConfigRequest);
}
5 changes: 5 additions & 0 deletions src/Item.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,13 @@
*/
class Item extends Model
{
public $display_name;
public $global_id;
public $id;
public $item_type;
public $mpn;
public $period;
public $type;

/**
* @var int
Expand Down
5 changes: 2 additions & 3 deletions src/Model.php
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,6 @@ public static function modelize($key, $value)
* if any of the user cases from above match, create a single Connect\Model object.
*/
foreach ($namespaces as $namespace) {

$fqcn = $namespace . ucfirst($key);
if (class_exists($fqcn, true)) {
return new $fqcn($value);
Expand All @@ -199,8 +198,8 @@ public static function modelize($key, $value)
$fqcn = $namespace . ucfirst(Inflector::singularize($key));
if (strpos($key, '_') !== false) {
$fqcn = $namespace . implode('', array_map(function ($word) {
return ucfirst(Inflector::singularize($word));
}, explode('_', $key)));
return ucfirst(Inflector::singularize($word));
}, explode('_', $key)));
}
if (class_exists($fqcn, true)) {
return new $fqcn($value);
Expand Down
2 changes: 1 addition & 1 deletion src/Modules/Core.php
Original file line number Diff line number Diff line change
Expand Up @@ -146,4 +146,4 @@ public function sendRequest($verb, $path, $body = null)

return $response->getBody()->getContents();
}
}
}
44 changes: 41 additions & 3 deletions src/Modules/Fulfilment.php → src/Modules/Fulfillment.php
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,40 @@

namespace Connect\Modules;

use Connect\Config;
use Connect\Model;
use Connect\Param;
use Connect\Request;
use GuzzleHttp\ClientInterface;
use GuzzleHttp\Exception\GuzzleException;
use Psr\Log\LoggerInterface;

/**
* Class Fulfilment
* Class Fulfillment
* @package Connect\Modules
*/
class Fulfilment extends Core
class Fulfillment extends Core
{
/**
* TierConfiguration Service
* @var TierConfiguration
*/
public $tierConfiguration;

/**
* Fulfillment constructor.
* @param Config $config
* @param LoggerInterface $logger
* @param ClientInterface $http
* @param TierConfiguration $tierConfiguration
*/
public function __construct(Config $config, LoggerInterface $logger, ClientInterface $http, TierConfiguration $tierConfiguration)
{
parent::__construct($config, $logger, $http);

$this->tierConfiguration = $tierConfiguration;
}

/**
* List the pending requests
* @param array $filters Filter for listing key->value or key->array(value1, value2)
Expand Down Expand Up @@ -79,4 +102,19 @@ public function renderTemplate($templateId, $request)
$query = ($request instanceof Request) ? $request->id : $request;
return $this->sendRequest('GET', '/templates/' . $templateId . '/render?request_id=' . $query);
}
}

/**
* Dynamically call connect native module functions.
* @param string $name
* @param array $arguments
* @return mixed
*/
public function __call($name, $arguments)
{
if (is_callable([$this->tierConfiguration, $name])) {
return call_user_func_array([$this->tierConfiguration, $name], $arguments);
}

return null;
}
}
2 changes: 1 addition & 1 deletion src/Modules/TierConfiguration.php
Original file line number Diff line number Diff line change
Expand Up @@ -97,4 +97,4 @@ public function getTierParameterByProductAndTierId($parameterId, $tierId, $produ

return ($param) ? $param : null;
}
}
}
Loading

0 comments on commit a9e0d82

Please sign in to comment.