/** * @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; }
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 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; }