/** * Осуществляет вставку новой записи в прайс-лист * @param array $arFieldVals массив с значениями полей; key->имя поля, value->значение * @return bool Возвращает успех или неудачу */ public function insertItem($arFieldVals) { $gprice_gen_obj = new GeneralPrice(0, $this->_dbase); if (!isset($this->_alloysFieldsNamesArray)) { $this->_alloysFieldsNamesArray = $this->_dbase->getFieldsNames('alloys'); } if (!isset($this->_productFieldsNamesArray)) { $this->_productFieldsNamesArray = $this->_dbase->getFieldsNames('production'); } // возможно, логичнее сделать проверку на необходимые размеры на клиенте // составляем запросы для поучения id_alloys и id_production и заполняем некоторые поля general_price foreach ($arFieldVals as $field => $value) { if (in_array($field, $this->_alloysFieldsNamesArray)) { $alloy_fields[$field] = array($arFieldVals[$field]); // array() ставим, чтобы корректно отработала функция _getFilterQuery() continue; } elseif (in_array($field, $this->_productFieldsNamesArray)) { $product_fields[$field] = array($arFieldVals[$field]); // array() ставим, чтобы корректно отработала функция _getFilterQuery() continue; } else { $gprice_gen_obj->__set($field, $value); } } $alloy_query = $this->_getFilterQuery('alloys', $alloy_fields, array('id')); $product_query = $this->_getFilterQuery('production', $product_fields, array('id')); // проверяем наличие записей в alloys и production, удовлетворяющих заданным требованиям try { $ids = $this->_dbase->select($alloy_query); $alloy_id = $ids[0]['id']; $ids = $this->_dbase->select($product_query); $product_id = $ids[0]['id']; } catch (Exception $e) { print $e->getMessage(); return false; } // если такой записи в alloys нет, то создаем ее и записываем полученный id if (!($alloy_id > 0)) { $alloy_gen_obj = new Alloy(0, $this->_dbase); foreach ($alloy_fields as $field => $value) { $alloy_gen_obj->__set($field, $value[0]); } if (!$alloy_gen_obj->save()) { return false; } $alloy_id = $alloy_gen_obj->id; } // если такой записи в production нет, то создаем ее и записываем полученный id if (!($product_id > 0)) { $class_name = getProductGenObject($product_fields); $s = "\$product_gen_obj = new {$class_name}(0, \$this->_dbase);"; eval($s); foreach ($product_fields as $field => $value) { $product_gen_obj->__set($field, $value[0]); } if (!$product_gen_obj->save()) { return false; } $product_id = $product_gen_obj->id; } // задаем недостающие поля для $gprice_gen_obj->alloy_id = $alloy_id; $gprice_gen_obj->product_id = $product_id; if (!$gprice_gen_obj->save()) { return false; } $gprice_id = $gprice_gen_obj->id; // получаем все необходимые записи общего прайс-листа из таблицы general_price $query = "SELECT `id` FROM `metotech_metalls`.`special_prices` WHERE `price_name` = '" . mysql_real_escape_string($this->_priceName) . "'"; try { $ids = $this->_dbase->select($query); $sprice_id = $ids[0]['id']; } catch (Exception $e) { print $e->getMessage(); return false; } $mapping_gen_obj = new GenericObject(); $mapping_gen_obj->initialize(0, 'prices_mapping', $this->_dbase); $mapping_gen_obj->sprice_id = $sprice_id; $mapping_gen_obj->gprice_id = $gprice_id; if (!$mapping_gen_obj->save()) { return false; } return true; }