예제 #1
0
 /**
  * 行を処理します。
  */
 private function &actionLine($useActionId, $code, &$keys, &$values)
 {
     // 無視するぎょうは return null します。
     // 致命的なエラーで行処理を中断する場合は例外をスローします。
     try {
         // 空白行は無視します
         if (empty($values) == true) {
             return null;
         }
         // 例外配列初期化
         $eList = array();
         // 配列の数が合わない
         if (count($keys) != count($values)) {
             //↓↓========nm00137 start===================================
             //配列の数が合わないの場合、配列エラーのメッセージ表示
             $this->_dataFrom['showMismatchErr'] = 'true';
             //↑↑===========nm00137 end==================================
             $e = new ItemCountMismatchException();
             $eList[] = $e;
             // エラー表示するためのダミーデータ
             $data = 1;
             // 処理中断
             throw $e;
         }
         // 連想配列作成
         $data = array_combine($keys, $values);
         ///////////////////////////////
         // 任意のIDから「nm」削除
         ///////////////////////////////
         $addNm = intval($this->_anken['client_user_id_add_nm']);
         if (is_int($addNm) === true && $addNm == 1) {
             $clientUserId = $data['client_user_id'];
             if (substr($clientUserId, 0, 2) == 'nm') {
                 $data['client_user_id'] = substr($clientUserId, 2);
             }
         }
         ///////////////////////////////
         // ゼロ埋め
         ///////////////////////////////
         $padding = intval($this->_anken['client_user_id_padding']);
         if (is_int($padding) === true && $padding != 0) {
             $wantLen = $padding;
             $len = strlen($data['client_user_id']);
             if ($len != 0 && $len != $wantLen) {
                 $id = $data['client_user_id'];
                 $id = str_pad($id, $wantLen, '0', STR_PAD_LEFT);
                 $data['client_user_id'] = $id;
             }
         }
         ///////////////////////////////
         // !error 日付が不正の場合は、対象外
         // !error 日付が現在より新しい場合は、対象外
         ///////////////////////////////
         $data['accept_date'] = trim($data['accept_date']);
         //↓↓========nm00137 start===================================
         //締め日チェック結果対象
         $shimeDateCheckResult = null;
         //↑↑===========nm00137 end==================================
         if (ereg("^([0-9]{4})[\\/\\-]([0-9]{1,2})[\\/\\-]([0-9]{1,2})", $data['accept_date'], $regs) !== false && checkdate($regs[2], $regs[3], $regs[1]) == true) {
             $date = "{$regs['1']}-{$regs['2']}-{$regs['3']}";
             $data['accept_date'] = $date;
             // メール送信用文面
             if (in_array($date, $this->_acceptDateList) == false) {
                 $this->_acceptDateList[$date] = $date;
             }
             //↓↓========nm00137 start===================================
             ///////////////////////////////
             // !error 効締め日無効
             ///////////////////////////////
             //案件締め日
             $anken_shime_date = $this->_anken['shime_date'];
             //確認フラグ
             $confirmFlg = mb_strtoupper(trim($data['accept_flg']));
             $confirmFlg = mb_convert_kana($confirmFlg, 'r');
             //締め日チェック結果
             $shimeDateCheckResult = DateManager::checkValidityShimeDate($anken_shime_date, $date, $confirmFlg);
             if ($shimeDateCheckResult['E'] == true) {
                 $eList[] = new AcceptDateIsInvalidityException();
             }
             //↑↑===========nm00137 end==================================
         } else {
             $eList[] = new AcceptDateFormatException();
         }
         ///////////////////////////////
         // !error statusがY,D,Nではない場合は、対象外
         ///////////////////////////////
         $flg = mb_strtoupper(trim($data['accept_flg']));
         $flg = mb_convert_kana($flg, 'r');
         if (strstr('YDN', $flg) == false) {
             $eList[] = new AcceptFlagFormatException();
         }
         $data['accept_flg'] = $flg;
         // 該当数をカウント
         $this->_updateCount['sum']++;
         ///////////////////////////////
         // !continue 保留のため更新しません。
         ///////////////////////////////
         if ($flg == 'N') {
             // 保留行を表示しないようにします
             $this->_updateCount['N']++;
             $eList = array();
             $eList[] = new AcceptFlagIsSuspensionException();
             //---------------------------------------------------
             // N:保留のため処理終了→表示用処理
             //---------------------------------------------------
             $d["data"] =& $data;
             $d["eListCount"] = count($eList);
             $d["eList"] =& $eList;
             return $d;
         } else {
             if ($flg == 'Y') {
                 $data['int_accept_flg'] = 1;
             } else {
                 if ($flg == 'D') {
                     $data['int_accept_flg'] = 0;
                 }
             }
         }
         if ($useActionId == false) {
             //-----------------------------------------------------
             // !error client_user_id がNULLの場合は、対象外
             //-----------------------------------------------------
             $data['client_user_id'] = trim($data['client_user_id']);
             if (empty($data['client_user_id'])) {
                 $eList[] = new ClientUserIdNotFountException();
             }
             //-----------------------------------------------------
             // !error client_user_idがDBに存在しない場合は、対象外
             //-----------------------------------------------------
             $m =& $this->_model;
             $target =& $m->Result_ClientReportResultUpload_getTargetSeika($code, $data['client_user_id']);
             $count = count($target);
             if ($count == 0) {
                 // 該当する成果無し
                 $eList[] = new SeikaNotFountException();
             } else {
                 if ($count != 1) {
                     // 該当する複数有り
                     $e = new SeikaNotFountException("複数({$count}項目) 該当します。");
                     $eList[] = $e;
                     $this->_updateCount['E']++;
                     // 処理中断
                     throw $e;
                 }
             }
             //-----------------------------------------------------
             // !error 既にuidで更新されていれば、対象外
             //-----------------------------------------------------
             $flg = $target[0]['accept_flg'];
             if (strstr('01', $flg) != false) {
                 $eList[] = new SeikaIsAcceptedException();
             }
             //--------------------------------------------------
             // DB update
             //--------------------------------------------------
             if (count($eList) == 0) {
                 //↓↓========nm00137 start===================================
                 //月度カウントアップ
                 if ($shimeDateCheckResult != null) {
                     $this->_updateCount['Y_1'] += $shimeDateCheckResult['Y_1'];
                     $this->_updateCount['Y_2'] += $shimeDateCheckResult['Y_2'];
                     $this->_updateCount['D_1'] += $shimeDateCheckResult['D_1'];
                     $this->_updateCount['D_2'] += $shimeDateCheckResult['D_2'];
                 }
                 //↑↑===========nm00137 end==================================
                 // update
                 $clientUserId = $data['client_user_id'];
                 $date = $data['accept_date'];
                 $flg = $data['int_accept_flg'];
                 //↓↓========nm00137 start===================================
                 //データチェックの場合、DB更新不要
                 if ($this->_dataFrom['is_data_check'] != true) {
                     $m->Result_ClientReportResultUpload_update($code, $clientUserId, $flg, $date);
                 }
                 //↑↑===========nm00137 end==================================
                 // カウントアップ
                 if ($flg == 1) {
                     $this->_updateCount['Y']++;
                 } else {
                     if ($flg == 0) {
                         $this->_updateCount['D']++;
                     }
                 }
             } else {
                 $this->_updateCount['E']++;
             }
         } else {
             //-----------------------------------------------------
             // !error action_id がNULLの場合は、対象外
             //-----------------------------------------------------
             $data['action_id'] = trim($data['action_id']);
             if (empty($data['action_id'])) {
                 $eList[] = new ActionIdNotFountException();
             }
             //-----------------------------------------------------
             // !error seika_idがDBに存在しない場合は、対象外
             //-----------------------------------------------------
             $m =& $this->_model;
             // 成果IDを取得
             $prefix = $this->_anken['id_prefix'];
             $actionId = $data['action_id'];
             $sessionId = $m->detachPrefixActionId($prefix, $actionId);
             $target =& $m->Result_ClientReportResultUpload_getTargetSeikaBySessionId($code, $sessionId);
             $count = count($target);
             if ($count == 0) {
                 // 該当する成果無し
                 $eList[] = new SeikaNotFountException();
             } else {
                 if ($count != 1) {
                     // 該当する複数有り
                     $e = new SeikaNotFountException("複数({$count}項目) 該当します。");
                     $eList[] = $e;
                     $this->_updateCount['E']++;
                     // 処理中断
                     throw $e;
                 }
             }
             //-----------------------------------------------------
             // !error 既にuidで更新されていれば、対象外
             //-----------------------------------------------------
             $flg = $target[0]['accept_flg'];
             if (strstr('01', $flg) != false) {
                 $eList[] = new SeikaIsAcceptedException();
             }
             //--------------------------------------------------
             // DB update
             //--------------------------------------------------
             if (count($eList) == 0) {
                 //↓↓========nm00137 start===================================
                 //月度カウントアップ
                 if ($shimeDateCheckResult != null) {
                     $this->_updateCount['Y_1'] += $shimeDateCheckResult['Y_1'];
                     $this->_updateCount['Y_2'] += $shimeDateCheckResult['Y_2'];
                     $this->_updateCount['D_1'] += $shimeDateCheckResult['D_1'];
                     $this->_updateCount['D_2'] += $shimeDateCheckResult['D_2'];
                 }
                 //↑↑===========nm00137 end==================================
                 // update
                 $date = $data['accept_date'];
                 $flg = $data['int_accept_flg'];
                 //↓↓========nm00137 start===================================
                 //データチェックの場合、DB更新不要
                 if ($this->_dataFrom['is_data_check'] != true) {
                     $m->Result_ClientReportResultUpload_updateBySessionId($code, $sessionId, $flg, $date);
                 }
                 //↑↑===========nm00137 end==================================
                 // カウントアップ
                 if ($flg == 1) {
                     $this->_updateCount['Y']++;
                 } else {
                     if ($flg == 0) {
                         $this->_updateCount['D']++;
                     }
                 }
             } else {
                 $this->_updateCount['E']++;
             }
         }
     } catch (Exception $e) {
         // 処理中断した場合ここを通ります
         // 想定してない例外が発生した場合ここを通ります
         $this->log->fatal($e);
     }
     //---------------------------------------------------
     // 表示用処理
     //---------------------------------------------------
     $d["data"] =& $data;
     $d["eListCount"] = count($eList);
     $d["eList"] =& $eList;
     return $d;
 }