Есть ли способ рефакторинга calculateState()
метода, чтобы он выглядел немного чище и, возможно, с использованием коллекции Laravel?
Он рассчитывает состояние результата для отправленного количества, количество возврата для отсутствия на складе и количество возврата для возврата.
Должно уменьшиться $this->dispatchedQty
, если было возвращено ("Code": "Return"
)
Ввод 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);
Ожидаемый вывод:
2Отправлено
1 Возврат отсутствует на складе
1 Возвращено
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 );
}
}