示例#1
0
 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;
 }
示例#3
0
 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>
  * &lt;?<br>CSaleOrderPropsValue::Update(8, array("CODE"=&gt;"ADDRESS"));<br>?&gt;<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();
 }
示例#5
0
 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;
 }
示例#6
0
 /**
  * @return array
  */
 public static function getAllFields()
 {
     static $fields = null;
     if ($fields == null) {
         $fields = array_keys(Internals\OrderPropsValueTable::getMap());
     }
     return $fields;
 }
示例#7
0
 /**
  * @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;
 }