/** * Add separate flow for annotated data objects. * * @param \Magento\Framework\Webapi\ServiceOutputProcessor $subject * @param \Closure $proceed * @param $data * @param $type * @return mixed */ public function aroundConvertValue(\Magento\Framework\Webapi\ServiceOutputProcessor $subject, \Closure $proceed, $data, $type) { if ($data instanceof \Flancer32\Lib\DataObject) { $result = []; $typeData = $this->_typePropertiesRegistry->register($type); /** * @var string $propertyName * @var \Praxigento\Core\Reflection\Data\Property $propertyData */ foreach ($typeData as $propertyName => $propertyData) { $attrName = $this->_toolConvert->camelCaseToSnakeCase($propertyName); $getter = 'get' . ucfirst($propertyName); $value = call_user_func([$data, $getter]); $isRequired = $propertyData->getIsRequired(); $propertyType = $propertyData->getType(); if ($isRequired || $value) { if ($this->_toolType->isSimple($propertyType)) { $result[$attrName] = $value; } else { // the last 2 chars will be removed for arrays // in \Magento\Framework\Webapi\ServiceOutputProcessor::convertValue if (is_array($value)) { $propertyType = $this->_toolType->getTypeAsArrayOfTypes($propertyType); } $result[$attrName] = $proceed($value, $propertyType); } } } } else { $result = $proceed($data, $type); } return $result; }
public function getPeriodPrev($periodValue, $periodType = self::TYPE_DAY) { $result = null; switch ($periodType) { case self::TYPE_DAY: $dt = date_create_from_format('Ymd', $periodValue); $ts = strtotime('previous day', $dt->getTimestamp()); $dt = $this->toolConvert->toDateTime($ts); $result = date_format($dt, 'Ymd'); break; case self::TYPE_WEEK: /* week period ends on ... */ $end = $this->getWeekLastDay(); $dt = date_create_from_format('Ymd', $periodValue); $ts = strtotime("previous {$end}", $dt->getTimestamp()); $dt = $this->toolConvert->toDateTime($ts); $result = date_format($dt, 'Ymd'); break; case self::TYPE_MONTH: $dt = date_create_from_format('Ym', $periodValue); $ts = strtotime('previous month', $dt->getTimestamp()); $dt = $this->toolConvert->toDateTime($ts); $result = date_format($dt, 'Ym'); break; case self::TYPE_YEAR: $dt = date_create_from_format('Y', $periodValue); $ts = strtotime('previous year', $dt->getTimestamp()); $dt = $this->toolConvert->toDateTime($ts); $result = date_format($dt, 'Y'); break; } return $result; }