Example #1
0
 /**
  * 予約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;
 }
Example #2
0
 /**
  * 実行
  */
 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);
         }
     }
 }