/** * 予約IDから単価更新予約オブジェクトを取得します。<br> * 見つからない場合nullを返します。 * @param array $ankenData 案件情報 * @param string $reserveId 予約ID */ public function &getObjectByID(&$ankenData, $reserveId) { $code = $ankenData['campaign_code']; $o = new DataAnkenPriceReserve(); $o->getField('reserve_id')->setValue($reserveId); $db =& $this->_core->getDB(); $sql = $o->getSelectSQL_Bind_ChangedField(); $data =& $o->getChangedFieldValues(); $data =& $db->query($sql, $data); if (count($data) == 1) { $o->setData($data[0], true); // 無料成果の単価、卸値追加 $o->addField(new DataField('price')); $o->addField(new DataField('oroshi')); // 単価、卸値取得 $data = $this->getPriceReservePriceRecord($reserveId, 1); if (count($data) == 1) { $o->getField('price')->setValue($data[0]['price']); $o->getField('oroshi')->setValue($data[0]['oroshi']); } // 有料成果の単価、卸値追加 $o->addField(new DataField('extra_price')); $o->addField(new DataField('extra_oroshi')); // 単価、卸値取得 $data = $this->getPriceReservePriceRecord($reserveId, 2); if (count($data) == 1) { $o->getField('extra_price')->setValue($data[0]['price']); $o->getField('extra_oroshi')->setValue($data[0]['oroshi']); } } else { unset($o); } return $o; }
/** * 実行 */ protected function perform() { // 案件ID $ankenId = $this->_request['aid']; // モデル $m =& $this->_model; // tmpファイル if (empty($ankenId) == false && is_uploaded_file($_FILES['upload']['tmp_name'])) { // キャンペーンコード $code =& $m->getCampaignCode($ankenId); $filename = md5(time() . rand(0, 100)); $path = ABS_DATAROOT . 'tmp/' . $filename; try { $mediaIdList =& $m->getMediaIdList(); move_uploaded_file($_FILES['upload']['tmp_name'], $path); $results = array(); $lines = file($path); $keys = array('anken_id', 'media_id', 'reserve_date', 'price', 'oroshi', 'extra_price', 'extra_oroshi', 'reserve_hour', 'sql_text'); foreach ($lines as $index => $line) { try { // 空白行は無視します if (trim($line) == "") { continue; } // 例外配列初期化 $eList = array(); // 配列化 $values = explode(',', $line); // 配列の数が合わない // 数を合わせる if (count($keys) != count($values)) { $new = array(); $count = count($keys); for ($i = 0; $i < $count; $i++) { // 値を初期化 $new[$i] = ""; // 値とコピー $v = trim($values[$i]); if ($v != "") { $new[$i] = $v; } } // 変数を置き換える unset($values); $values = $new; } // データ配列を生成 $data =& array_combine($keys, $values); //////////////////////////////////////////////////// // 案件ID (省略不可) //////////////////////////////////////////////////// // 案件IDフォーマット $csvAnkenId = trim($data['anken_id']); if (empty($csvAnkenId) == true && is_numeric($csvAnkenId) == false) { $eList[] = new PriceReserveNewAll_AnkenNotFountException(); } else { if ($ankenId != $csvAnkenId) { // 選択可能な案件ID $eList[] = new PriceReserveNewAll_AnkenNotFountException(); } else { $data['anken_id'] = $ankenId; } } //////////////////////////////////////////////////// // メディアID (省略不可) //////////////////////////////////////////////////// // メディアIDフォーマット $mediaId = trim($data['media_id']); if (empty($mediaId) == true && is_numeric($mediaId) == false) { $eList[] = new PriceReserveNewAll_MediaId_NullException(); } else { if (in_array($mediaId, $mediaIdList) == false) { // 選択可能なメディアID $eList[] = new PriceReserveNewAll_MediaId_NullException(); } else { // 登録されているメディアID $count = $m->getTeikeiMedieCount($code, $mediaId); if ($count == 0) { $eList[] = new PriceReserveNewAll_TeikeiMedia_NotFountException(); } else { $data['media_id'] = $mediaId; } } } //////////////////////////////////////////////////// // 更新予約日時(YYYY-MM-DD-HH)(省略不可) //////////////////////////////////////////////////// $reserveDate = trim($data['reserve_date']); $data['reserve_date'] = null; $data['reserve_hour'] = null; // 配列化 $reserveDate = explode('-', $reserveDate); if (count($reserveDate) !== 4) { $eList[] = new PriceReserveNewAll_ReserveDate_FormatException(); $data['reserve_date'] = null; } else { $date = $reserveDate[0] . "-" . $reserveDate[1] . "-" . $reserveDate[2]; $ireserveDate = strtotime($date); if ($ireserveDate == false) { // 形式エラー $eList[] = new PriceReserveNewAll_ReserveDate_FormatException(); $data['reserve_date'] = $date; } else { $data['reserve_date'] = date('Y-m-d', $ireserveDate); } // 予約時間 $reserveHour = $reserveDate[3]; if (strlen(trim($reserveHour)) == 0) { // 未入力 $eList[] = new PriceReserveNewAll_ReserveHour_FormatException(); $data['reserve_hour'] = null; } else { if (is_numeric($reserveHour) == false) { $eList[] = new PriceReserveNewAll_ReserveHour_FormatException(); } else { if ($reserveHour < 0 || 23 < $reserveHour) { $eList[] = new PriceReserveNewAll_ReserveHour_FormatException(); } else { $data['reserve_hour'] = $reserveHour; // 予約日時のチェック if (time() > strtotime($data['reserve_date'] . " " . $reserveHour . ":00:00")) { $eList[] = new PriceReserveNewAll_ReserveDate_PastDateException(); } } } } } //////////////////////////////////////////////////// // 予約済みかどうかチェック //////////////////////////////////////////////////// if (count($eList) == 0) { $reserveDate = $data['reserve_date']; $reserveHour = $data['reserve_hour']; $countReserve = $m->getPriceReserveCount($ankenId, $mediaId, $reserveDate, $reserveHour); if ($countReserve > 0) { $eList[] = new PriceReserveNewAll_Exist_ReserveDataException(); } } //////////////////////////////////////////////////// // 申込単価 //////////////////////////////////////////////////// // フォーマット $price = trim($data['price']); if (empty($price) == false) { if (is_numeric($price) == false || $price < 0) { $eList[] = new PriceReserveNewAll_Price_FormatException("申込単価"); } } else { // 省略時 $data['price'] = 0; $price = 0; } //////////////////////////////////////////////////// // 申込卸値 //////////////////////////////////////////////////// // フォーマット $oroshi = trim($data['oroshi']); if (empty($oroshi) == false) { if (is_numeric($oroshi) == false || $oroshi < 0) { $eList[] = new PriceReserveNewAll_Oroshi_FormatException("申込卸値"); } } else { // 省略 $data['oroshi'] = 0; $oroshi = 0; } //////////////////////////////////////////////////// // 入金単価 //////////////////////////////////////////////////// // フォーマット $extraPrice = trim($data['extra_price']); if (empty($extraPrice) == false) { if (is_numeric($extraPrice) == false || $extraPrice < 0) { $eList[] = new PriceReserveNewAll_Price_FormatException("入金単価"); } } else { // 省略時 $data['extra_price'] = 0; $extraPrice = 0; } //////////////////////////////////////////////////// // 入金卸値 //////////////////////////////////////////////////// // フォーマット $extraOroshi = trim($data['extra_oroshi']); if (empty($extraOroshi) == false) { if (is_numeric($extraOroshi) == false || $extraOroshi < 0) { $eList[] = new PriceReserveNewAll_Oroshi_FormatException("入金卸値"); } } else { // 省略 $data['extra_oroshi'] = 0; $extraOroshi = 0; } //////////////////////////////////////////////////// // 更新用SQL作成 //////////////////////////////////////////////////// $sql_text = $m->getPriceUpdateSQL($code, $mediaId, $price, $oroshi, $extraPrice, $extraOroshi); $data['sql_text'] = $sql_text; //////////////////////////////////////////////////// // オブジェクト生成 //////////////////////////////////////////////////// $o = new DataAnkenPriceReserve(); $o->setData($data); $o->getField('anken_id')->setValue($ankenId); $now = date('Y-m-d H:i:s'); $o->getField('reg_time')->setValue($now); $p = clone $o; $p->removeField('price'); $p->removeField('oroshi'); //////////////////////////////////////////////////// // 値チェック //////////////////////////////////////////////////// $check =& $p->getChecker(); $check->checkAll(); if ($check->getErrorCount() != 0) { $msg = $check->getErrorMessage(); $eList[] = new PriceReserveNewAll_CheckerException($msg); } //////////////////////////////////////////////////// // DB insert //////////////////////////////////////////////////// if (count($eList) == 0) { $loginUserId = $this->_core->getLoginLoginId(); $p->getField('upd_user_id')->setValue($loginUserId); $m->insert($p); $reserveId = mysql_insert_id(); $m->Anken_PriceReservePrice_insert($reserveId, $price, $oroshi, $extraPrice, $extraOroshi); } //////////////////////////////////////////////////// // 表示用処理 //////////////////////////////////////////////////// $num = $index + 1; $results[$num] = array("data" => $data, "eListCount" => count($eList), "eList" => $eList); } catch (PriceReserveNewAllException $e) { # 続けて処理できない例外 $num = $index + 1; $results[$num] = array("data" => $data, "eListCount" => 1, "eList" => array($e)); } catch (Exception $e) { throw $e; } } // 結果表示 $this->_dataFrom['anken_id'] = $ankenId; $this->_dataFrom['list'] = $results; } catch (Exception $e) { $e->display(); } // ファイル削除 if (is_file($path) == true) { @unlink($path); } } }