Is there a way to refactor calculateState()
method to look a bit cleaner and possibly using Laravel collection?
It calculate the outcome state for dispatched qty, refund qty for not in stock and refund qty for return.
It should decrease $this->dispatchedQty
if has been Return ("Code": "Return"
)
Input Json:
$json = '{
"HistoryState": [
{
"Name": "Dispatched",
"Num": 3
},
{
"Name": "Refunding",
"Num": 1,
"Code": "NotInStock"
},
{
"Name": "Refunding",
"Num": 1,
"Code": "Return"
}
]
}';
$statusItem = new App\Services\State($json);
Expected Output:
2 Dispatched
1 Refund Not In Stock
1 Returned
class State
{
protected $state;
protected $dispatchedQty = 0;
protected $refundNotInStockQty = 0;
protected $refundReturnQty = 0;
public function __construct($json)
{
$object = json_decode($json);
$this->state = $object->HistoryState;
$this->calculateState();
}
protected function calculateState()
{
foreach($this->state as $state) {
if ($state->Name == "Dispatched") {
$this->dispatchedQty+= $state->Num;
}
if ($state->Name == "Refunding") {
if ($state->Code == "NotInStock") {
$this->refundNotInStockQty += $state->Num;
} else {
$this->refundReturnQty += $state->Num;
$this->dispatchedQty -= $state->Num;
}
}
}
dd($this->dispatchedQty, $this->refundNotInStockQty, $this->refundReturnQty );
}
}