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; }
/** * @return Entity\Result */ public function save() { $result = new Entity\Result(); $itemsFromDb = array(); if ($this->getOrder()->getId() > 0) { $itemsFromDbList = Internals\OrderPropsValueTable::getList(array("filter" => array("ORDER_ID" => $this->getOrder()->getId()), "select" => array("ID"))); while ($itemsFromDbItem = $itemsFromDbList->fetch()) { $itemsFromDb[$itemsFromDbItem["ID"]] = true; } } /** @var PropertyValue $property */ foreach ($this->collection as $property) { $r = $property->save(); if (!$r->isSuccess()) { $result->addErrors($r->getErrors()); } if (isset($itemsFromDb[$property->getId()])) { unset($itemsFromDb[$property->getId()]); } } foreach ($itemsFromDb as $k => $v) { Internals\OrderPropsValueTable::delete($k); } return $result; }
private function getOrderProps($arOrder) { $dbRes = \Bitrix\Sale\Internals\OrderPropsValueTable::getList(array('filter' => array('ORDER_ID' => $arOrder["ID"]), 'select' => array('*', 'TYPE' => 'PROPERTY.TYPE', 'IS_ZIP' => 'PROPERTY.IS_ZIP', 'IS_PAYER' => 'PROPERTY.IS_PAYER', 'IS_EMAIL' => 'PROPERTY.IS_EMAIL', 'IS_PHONE' => 'PROPERTY.IS_PHONE', 'IS_ADDRESS' => 'PROPERTY.IS_ADDRESS', 'IS_LOCATION' => 'PROPERTY.IS_LOCATION'))); while ($pVal = $dbRes->fetch()) { if ($pVal['IS_PAYER'] == 'Y') { $arOrder["CUSTOMER_FIO"] = $pVal['VALUE']; } elseif ($pVal['IS_EMAIL'] == 'Y') { $arOrder["CUSTOMER_EMAIL"] = $pVal['VALUE']; } elseif ($pVal['IS_PHONE'] == 'Y') { $arOrder["CUSTOMER_PHONE"] = $pVal['VALUE']; } elseif ($pVal['IS_ADDRESS'] == 'Y') { $arOrder["CUSTOMER_ADDRESS"] = $pVal['VALUE']; } elseif ($pVal['IS_ZIP'] == 'Y') { $arOrder["CUSTOMER_ZIP"] = $pVal['VALUE']; } elseif ($pVal['CODE'] == 'CITY') { $arOrder["CUSTOMER_CITY"] = $pVal['VALUE']; } elseif ($pVal['IS_LOCATION'] == 'Y') { $arVal = CSaleLocation::GetByID($pVal["VALUE"], LANG); $arOrder["CUSTOMER_LOCATION"] = htmlspecialcharsEx($arVal["COUNTRY_NAME"] . (strlen($arVal["COUNTRY_NAME"]) <= 0 || strlen($arVal["CITY_NAME"]) <= 0 ? "" : " - ") . $arVal["CITY_NAME"]); } } return $arOrder; }
/** * <p>Метод обновляет параметры значения с кодом ID свойства заказа на параметры из массива arFields. Метод динамичный.</p> <p></p> <div class="note"> <b>Примечание:</b> если при оформлении заказа не были заполнены какие-то свойства, то эти свойства обновить потом не получится, т.к. их нет в базе данных (незаполненные свойства не имеют пустых значений в базе). Поэтому, если нужно заполнить такое свойство, то сперва нужно создать его через <a href="http://dev.1c-bitrix.ru/api_help/sale/classes/csaleorderpropsvalue/csaleorderpropsvalue__add.af505780.php">CSaleOrderPropsValue::Add</a> и только затем значение этого свойства будет доступно для <b>CSaleOrderPropsValue::Update</b> и <a href="http://dev.1c-bitrix.ru/api_help/sale/classes/csaleorderpropsvalue/csaleorderpropsvalue__getlist.52da0d54.php">CSaleOrderPropsValue::Getlist</a>.</div> * * * @param int $ID Код значения свойства заказа. * * @param array $arFields Ассоциативный массив параметров значения свойства, ключами в * котором являются названия параметров значения свойства, а * значениями - соответствующие новые значения. <br><br> Допустимые * ключи: <ul> <li> <b>ORDER_ID</b> - код заказа;</li> <li> <b>ORDER_PROPS_ID</b> - код * свойства;</li> <li> <b>NAME</b> - название свойства;</li> <li> <b>VALUE</b> - значение * свойства;</li> <li> <b>CODE</b> - символьный код свойства.</li> </ul> * * @return int <p>Метод возвращает код обновленного значения свойства или <i>false</i> * в случае ошибки.</p> <a name="examples"></a> * * <h4>Example</h4> * <pre> * <?<br>CSaleOrderPropsValue::Update(8, array("CODE"=>"ADDRESS"));<br>?><br> * </pre> * * * @static * @link http://dev.1c-bitrix.ru/api_help/sale/classes/csaleorderpropsvalue/csaleorderpropsvalue__update.4d3a46b6.php * @author Bitrix */ public static function Update($ID, $arFields) { if (!self::CheckFields('UPDATE', $arFields, $ID)) { return false; } // if ($arFields['VALUE']) // { // if (! ($propertyId = $arFields['ORDER_PROPS_ID']) // && ($propertyValue = Internals\OrderPropsValueTable::getById($ID)->fetch())) // { // $propertyId = $propertyValue['ORDER_PROPS_ID']; // } // // if ($propertyId && ($oldProperty = CSaleOrderProps::GetById($propertyId))) // { // $oldProperty['VALUE'] = $arFields['VALUE']; // $arFields['VALUE'] = CSaleOrderPropsAdapter::convertOldToNew($oldProperty, 'VALUE', true); // } // } // location ID to CODE if ((string) $arFields['VALUE'] != '') { if ((string) $arFields['ORDER_PROPS_ID'] != '') { $propId = intval($arFields['ORDER_PROPS_ID']); } else { $propValue = self::GetByID($ID); $propId = $propValue['ORDER_PROPS_ID']; } $arFields['VALUE'] = self::translateLocationIDToCode($arFields['VALUE'], $propId); } return Internals\OrderPropsValueTable::update($ID, array_intersect_key($arFields, CSaleOrderPropsValueAdapter::$allFields))->getId(); }
public static function loadForOrder(Order $order) { $objects = array(); $propertyValues = array(); $propertyValuesMap = array(); $properties = array(); if ($order->getId() > 0) { $result = OrderPropsValueTable::getList(array('select' => array('ID', 'NAME', 'VALUE', 'CODE', 'ORDER_PROPS_ID'), 'filter' => array('ORDER_ID' => $order->getId()))); while ($row = $result->fetch()) { $propertyValues[$row['ID']] = $row; $propertyValuesMap[$row['ORDER_PROPS_ID']] = $row['ID']; } } $filter = array(); if ($order->getPersonTypeId() > 0) { $filter[] = array('=PERSON_TYPE_ID' => $order->getPersonTypeId()); } $result = OrderPropsTable::getList(array('select' => array('ID', 'PERSON_TYPE_ID', 'NAME', 'TYPE', 'REQUIRED', 'DEFAULT_VALUE', 'SORT', 'USER_PROPS', 'IS_LOCATION', 'PROPS_GROUP_ID', 'DESCRIPTION', 'IS_EMAIL', 'IS_PROFILE_NAME', 'IS_PAYER', 'IS_LOCATION4TAX', 'IS_FILTERED', 'CODE', 'IS_ZIP', 'IS_PHONE', 'IS_ADDRESS', 'ACTIVE', 'UTIL', 'INPUT_FIELD_LOCATION', 'MULTIPLE', 'SETTINGS'), 'filter' => $filter, 'order' => array('SORT' => 'ASC'))); while ($row = $result->fetch()) { $properties[$row['ID']] = $row; } $result = OrderPropsRelationTable::getList(array('select' => array('PROPERTY_ID', 'ENTITY_ID', 'ENTITY_TYPE'), 'filter' => array('PROPERTY_ID' => array_keys($properties)))); $propRelation = array(); while ($row = $result->fetch()) { if (empty($row)) { continue; } if (!isset($propRelation[$row['PROPERTY_ID']])) { $propRelation[$row['PROPERTY_ID']] = array(); } $propRelation[$row['PROPERTY_ID']][] = $row; } foreach ($properties as $property) { $id = $property['ID']; if (isset($propertyValuesMap[$id])) { $fields = $propertyValues[$propertyValuesMap[$id]]; unset($propertyValues[$propertyValuesMap[$id]]); unset($propertyValuesMap[$id]); } else { if ($property['ACTIVE'] == 'N' || $property['UTIL'] == 'Y') { continue; } $fields = null; } if (isset($propRelation[$id])) { $objects[] = new static($property, $fields, $propRelation[$id]); } else { $objects[] = new static($property, $fields); } } foreach ($propertyValues as $propertyValue) { $objects[] = new static(null, $propertyValue); } return $objects; }
/** * @return array */ public static function getAllFields() { static $fields = null; if ($fields == null) { $fields = array_keys(Internals\OrderPropsValueTable::getMap()); } return $fields; }
/** * @return array */ public static function getAllFields() { static $fields = null; if ($fields == null) { $map = Internals\OrderPropsValueTable::getMap(); foreach ($map as $key => $value) { if (is_array($value)) { $fields[] = $key; } elseif ($value instanceof Entity\ScalarField) { $fields[] = $value->getName(); } } } return $fields; }