예제 #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;
 }
예제 #2
0
 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;
 }