public function makeShutdownFunction() { if (is_null($this->object)) { return false; } $objectId = $this->object->getId(); register_shutdown_function(function () use($objectId) { /** @var OperationHistory $object */ $object = $this->activeRecordFactory->getObject('OperationHistory'); $object->setObject($objectId); if (!$object->stop()) { return; } $collection = $object->getCollection()->addFieldToFilter('parent_id', $objectId); if ($collection->getSize()) { return; } $error = error_get_last(); if (is_null($error)) { return; } if (in_array((int) $error['type'], [E_ERROR, E_CORE_ERROR, E_COMPILE_ERROR])) { $stackTrace = @debug_backtrace(false); $object->setContentData('fatal_error', ['message' => $error['message'], 'file' => $error['file'], 'line' => $error['line'], 'trace' => $this->getHelper('Module\\Exception')->getFatalStackTraceInfo($stackTrace)]); } }); return true; }
/** * DB更新 */ public function Result_AdminReportSalesSalesEdit_update(&$newObjectArray, &$rawDetailArray, $status) { $db =& $this->_core->getDBForUpdate(); //-------------------------- // 案件別売上テーブル //-------------------------- // 完了画面の表示に使うため、複製を利用 $salesObject = clone $newObjectArray['sales']; $loginId = $this->_core->getLoginLoginId(); $loginName = $this->_core->getLoginName(); $now = date('Y-m-d H:i:s'); // ステータスのフラグと変更者、変更時刻 if ($status == ENUM_SALES_GENKA_REPORT_STATUS_INPUTTED) { $salesObject->getField('shime_upd_user_id')->setValue($loginId); $salesObject->getField('shime_upd_user_name')->setValue($loginName); $salesObject->getField('shime_upd_time')->setValue($now); $salesObject->getField('last_save_type')->setValue(ENUM_SALES_GENKA_REPORT_SAVE_TYPE_SAVE); } else { if ($status == ENUM_SALES_GENKA_REPORT_STATUS_FIXED) { $salesObject->getField('fixed_flg')->setValue('1'); $salesObject->getField('fixed_user_id')->setValue($loginId); $salesObject->getField('fixed_user_name')->setValue($loginName); $salesObject->getField('fixed_time')->setValue($now); $salesObject->getField('status')->setValue(ENUM_SALES_GENKA_REPORT_STATUS_FIXED); // 表示用の売上データのステータスも更新 $newObjectArray['sales']->getField('status')->setValue(ENUM_SALES_GENKA_REPORT_STATUS_FIXED); } else { if ($status == ENUM_SALES_GENKA_REPORT_STATUS_CANCEL_FIXED) { $salesObject->getField('fixed_flg')->setValue('0'); $salesObject->getField('status')->setValue(ENUM_SALES_GENKA_REPORT_STATUS_INPUTTED); // 表示用の売上データのステータスも更新 $newObjectArray['sales']->getField('status')->setValue(ENUM_SALES_GENKA_REPORT_STATUS_INPUTTED); } } } //-------------------------- // DB更新の前にログを出力 // 確定時は登録するデータ、それ以外は案件別売上IDをデータとして保存する // ↓ログ出力処理ここから //-------------------------- // ステータス $enumStatus = new SalesGenkaReportStatusEnum(); // ログ作成用のオブジェクトを作成 $logObjectArray = array(); if ($status == ENUM_SALES_GENKA_REPORT_STATUS_FIXED) { $logObjectArray['sales'] = clone $newObjectArray['sales']; foreach ($newObjectArray['detail_list'] as $newDetail) { $logObjectArray['detail_list'][] = clone $newDetail; } } else { $logObjectArray["anken_sales_id"] = $newObjectArray['sales']->getField('anken_sales_id')->getValue(); } // ステータス情報 $statusInfo = $enumStatus->getValue($status); // ステータスが入力中のときは保存種別も追加 if ($status == ENUM_SALES_GENKA_REPORT_STATUS_INPUTTED) { // 最終保存ステータス $enumLastSaveStatus = new SalesGenkaReportSaveTypeEnum(); $lastSaveStatus = $enumLastSaveStatus->getValue(ENUM_SALES_GENKA_REPORT_SAVE_TYPE_SAVE); $statusInfo .= "({$lastSaveStatus})"; } // ログを出力 $action = "売上更新"; $data = $logObjectArray; $userId = $this->_core->getLoginLoginId(); $userName = $this->_core->getLoginName(); OperationHistory::writeOperationHistory($db, $action, $statusInfo, $data, $userId, $userName); unset($logObjectArray); //-------------------------- // ↑ログ出力処理ここまで //-------------------------- // 値に変更が無い場合でも更新日時が変更されるように設定 $salesObject->getField('upd_time')->setValue($now); parent::update($salesObject); // 確定または保存ボタン押下時は売上明細を更新 if ($status == ENUM_SALES_GENKA_REPORT_STATUS_INPUTTED || $status == ENUM_SALES_GENKA_REPORT_STATUS_FIXED) { //-------------------------- // 案件別売上明細テーブルと請求発行確認テーブル // いったん該当する案件別売上IDに紐づくレコードをすべて削除して、 // 新しくすべてのレコードを登録する //-------------------------- // 明細の削除 $onlyAffiliate = false; $this->Result_AdminReportSalesSalesEdit_deleteDetail($newObjectArray['sales']->getField('anken_sales_id')->getValue(), $onlyAffiliate, $db); // すべての明細レコードの登録 foreach ($newObjectArray['detail_list'] as $detail) { // 完了画面の表示に使うため、複製を利用 $detailClone = clone $detail; // 発行申請中、または発行確認済みの請求発行確認情報が存在する場合は取得 $billIssue = new DataReportSalesSalesBillIssue(); if ($detailClone->getField('bill_issue_status')->getValue() == ENUM_BILL_ISSUE_STATUS_APPLIED || $detailClone->getField('bill_issue_status')->getValue() == ENUM_BILL_ISSUE_STATUS_APPROVED) { // 該当データをDataObjectにセット $billIssue->getField('bill_issue_status')->setValue($detailClone->getField('bill_issue_status')->getValue()); $billIssue->getField('bill_issue_operation')->setValue($detailClone->getField('bill_issue_operation')->getValue()); $billIssue->getField('upd_user_id')->setValue($detailClone->getField('bill_issue_upd_user_id')->getValue()); $billIssue->getField('upd_time')->setValue($detailClone->getField('bill_issue_upd_time')->getValue()); } //-------------------------- // 案件別売上明細テーブル //-------------------------- // 請求発行確認テーブルの項目を外す $detailClone->removeField('bill_issue_status'); $detailClone->removeField('bill_issue_operation'); $detailClone->removeField('bill_issue_upd_user_id'); $detailClone->removeField('bill_issue_upd_time'); parent::insert($detailClone); $ankenSalesDetailId = mysql_insert_id(); //-------------------------- // 請求発行確認テーブル //-------------------------- // 請求発行確認情報が存在する場合は登録 if (0 < $billIssue->getChangedCount()) { // 上で登録した案件メディア企業別原価明細IDを設定 $billIssue->getField('anken_sales_detail_id')->setValue($ankenSalesDetailId); parent::insert($billIssue); } } // 確定ボタン押下時は、生データから集計したデータをログとして保存する if ($status == ENUM_SALES_GENKA_REPORT_STATUS_FIXED) { // 明細ログの削除 $this->Result_AdminReportSalesSalesEdit_deleteDetailLog($newObjectArray['sales']->getField('anken_sales_id')->getValue(), $db); foreach ($rawDetailArray as $rawDetail) { // 完了画面の表示に使うため、複製を利用 $detailClone = clone $rawDetail; //-------------------------- // 案件別売上明細ログテーブル //-------------------------- parent::insert($detailClone); } } } }
/** * 請求書発行申請ステータスの更新 * すでにレコードがある場合は更新、ない場合は登録 * @param array $ankenSalesDetailIdList 対象案件別売上明細IDのリスト * @param string $updStatus 更新後の請求書発行申請ステータス * @param array $operation 請求書発行申請操作 */ public function &Result_AdminReportSalesAllLock_changeLockStatus($targetMonth, $updStatus) { // DB接続 $db =& $this->_core->getDBForUpdate(); //-------------------------- // DB更新の前にログを出力 //-------------------------- // 成果データ変更ロックステータス $enumStatus = new SalesEditAllLockStatusEnum(); // ログ作成用のオブジェクトを作成 $logData = array(); $logData['target_month'] = $targetMonth; // ログを出力 $action = "成果データ変更ロック"; $statusInfo = $enumStatus->getValue($updStatus); $userId = $this->_core->getLoginLoginId(); $userName = $this->_core->getLoginName(); OperationHistory::writeOperationHistory($db, $action, $statusInfo, $logData, $userId, $userName); //-------------------------- // 更新処理 //-------------------------- // レコードの有無を確認 $countSql = <<<SQL select sales_edit_all_lock_status_id from ald_sales_edit_all_lock_status where target_month = ? SQL; $param = array($targetMonth); $data = $db->query($countSql, $param); if (0 < count($data)) { // 成果データ変更ロック情報の更新 $updateSql = <<<SQL update ald_sales_edit_all_lock_status set status = ?, upd_user_id = ? where target_month = ? SQL; $param = array($updStatus, $userId, $targetMonth); $db->execute($updateSql, $param); } else { // 成果データ変更ロック情報の登録 $insertSql = <<<SQL insert into ald_sales_edit_all_lock_status (target_month, status, upd_user_id) values (?, ?, ?) SQL; $param = array($targetMonth, $updStatus, $userId); $db->execute($insertSql, $param); } }