private static function get($codeName, $order, $payment, $shipment) { static $cache = array(); if (is_numeric($order)) { $order = ($v = $cache[$order]) ? $v : OrderTable::getById($order)->fetch(); } elseif ($order instanceof Order) { $order = $order->getFieldValues(); } if (is_array($order)) { $cache[$order['ID']] = $order; } else { return null; } $result = null; list($entity, $item) = self::getMap($codeName, $order['PERSON_TYPE_ID']); switch ($entity) { case 'VALUE': $result = $item; break; case 'ORDER': $result = $order[$item]; break; case 'PAYMENT': if ($payment) { $result = $payment[$item]; } break; case 'SHIPMENT': if ($shipment) { $result = $shipment[$item]; } break; case 'PROPERTY': $property = OrderPropsValueTable::getList(array('select' => array('VALUE'), 'filter' => array('ORDER_ID' => $order['ID'], 'ORDER_PROPS_ID' => $item), 'limit' => 1))->fetch(); if ($property) { $result = $property['VALUE']; } break; case 'COMPANY': $companyId = null; if ($payment) { $companyId = $payment['COMPANY_ID']; } elseif ($shipment) { $companyId = $shipment['COMPANY_ID']; } if ($companyId) { if (substr($item, 0, 3) == 'UF_') { global $USER_FIELD_MANAGER; if ($value = $USER_FIELD_MANAGER->GetUserFieldValue(CompanyTable::getUfId(), $item, $companyId)) { $result = $value; } } else { if ($company = CompanyTable::getById($companyId)->fetch()) { $result = $company[$item]; } } } break; case 'USER': global $USER; if (($userId = $order['USER_ID']) && ($user = $USER->GetByID($userId)->Fetch())) { $result = $user[$item]; } break; } return $result; }
public function getBusinessValue($mapping) { $value = null; if (is_array($mapping) && isset($mapping['PROVIDER_NAME'], $mapping['PROVIDER_FIELD'])) { switch ($mapping['PROVIDER_NAME']) { case 'SHIPMENT': $value = $this->getField($mapping['PROVIDER_FIELD']); break; case 'COMPANY': if ($companyId = $this->getField('COMPANY_ID')) { if (substr($mapping['PROVIDER_FIELD'], 0, 3) == 'UF_') { global $USER_FIELD_MANAGER; $value = $USER_FIELD_MANAGER->GetUserFieldValue(Internals\CompanyTable::getUfId(), $mapping['PROVIDER_FIELD'], $companyId) ?: null; } elseif ($company = Internals\CompanyTable::getById($companyId)->fetch()) { $value = $company[$mapping['PROVIDER_FIELD']]; } } break; default: /** @var ShipmentCollection $collection */ $value = ($collection = $this->getCollection()) && ($order = $collection->getOrder()) ? $order->getBusinessValue($mapping) : BusinessValue::getValueFromMapping($mapping); } } return $value; }