setType($data['type']); } if (!empty($data['amount'])) { $this->setAmount($this->factoryAmount($data['amount'])); } } } /** * Возвращает вид оплаты в чеке (cashless | prepayment | postpayment | consideration) * @return string Вид оплаты в чеке */ public function getType() { return $this->_type; } /** * Устанавливает вид оплаты в чеке * @param string $value */ public function setType($value) { if ($value === null || $value === '') { throw new EmptyPropertyValueException( 'Empty value for "type" parameter in Settlement', 0, 'settlement.type' ); } elseif (TypeCast::canCastToEnumString($value)) { if (SettlementType::valueExists($value)) { $this->_type = (string)$value; } else { throw new InvalidPropertyValueException( 'Invalid value for "type" parameter in Settlement', 0, 'settlement.type', $value ); } } else { throw new InvalidPropertyValueTypeException( 'Invalid value type for "type" parameter in Settlement', 0, 'settlement.type', $value ); } } /** * Возвращает размер оплаты * @return AmountInterface Размер оплаты */ public function getAmount() { return $this->_amount; } /** * Устанавливает сумму платежа * @param AmountInterface|array $value Сумма платежа */ public function setAmount($value) { if ($value === null || $value === '') { throw new EmptyPropertyValueException( 'Empty value for "amount" parameter in Settlement', 0, 'settlement.amount' ); } elseif (is_array($value)) { $this->_amount = $this->factoryAmount($value); } elseif ($value instanceof AmountInterface) { $this->_amount = $value; } else { throw new InvalidPropertyValueTypeException( 'Invalid value type for "amount" parameter in Settlement', 0, 'settlement.amount', $value ); } } /** * Фабричный метод создания суммы * * @param array $options Сумма в виде ассоциативного массива * * @return AmountInterface Созданный инстанс суммы */ private function factoryAmount($options) { $amount = new MonetaryAmount(null, $options['currency']); if ($options['value'] > 0) { $amount->setValue($options['value']); } return $amount; } }