/** * 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 string $billing_segment_id 請求先セグメント * @param string $sales_genka_type 原価種別 * @param string $media_company_id メディア企業ID * @param string $target_month 月度 */ public function &Result_AdminReportSalesSalesSalesReport_getSales($like = null) { $db =& $this->_core->getDB(); // 条件を作成 $where = " s.status = ? "; $statusEnum = new SalesGenkaReportStatusEnum(); $param = array($statusEnum->getKey("確定")); // 請求先セグメントID if (isset($like["billing_segment_id"]) == true && -1 < intval($like["billing_segment_id"])) { $billingSegmentId = $like['billing_segment_id']; $where .= " and b.billing_segment_id=? "; $param[] = $billingSegmentId; } // 案件ID if (empty($like['anken_id']) == false) { $ankenId = $like['anken_id']; $where .= " and s.anken_id=? "; $param[] = $ankenId; } // クライアントID if (empty($like['client_id']) == false) { $clientId = $like['client_id']; $where .= " and s.client_id=? "; $param[] = $clientId; } // 担当者名称 if (empty($like['tanto_name']) == false) { $name = mb_strtolower($like['tanto_name']); $where .= " and LOWER(s.tanto_consulting_name) like ? "; $param[] = "%{$name}%"; } // 月度 if (empty($like['str_target_month']) == false) { $where .= ' and (s.target_month=?) '; $param[] = $like['str_target_month']; } // 入金種別 if (0 < count($like['payment_type'])) { $type = $like['payment_type']; $where .= ' and (d.payment_type_id in (' . implode(",", $type) . ')) '; } // 売上原価種別 if (empty($like['sales_genka_type_id']) == false) { $salesGenkaTypeId = $like['sales_genka_type_id']; $where .= " and d.sales_genka_type_id=? "; $param[] = $salesGenkaTypeId; } // SQL $sql = <<<SQL select s.client_id, s.client_name, s.anken_id, s.anken_name, s.billing_company_id, s.target_month, s.tanto_consulting_name, s.status, d.sales_genka_type_id, d.title, d.sales_price, d.sales_count, d.total_sales, d.payment_scheduled_date, d.payment_type_id, d.memo from ald_anken_sales as s inner join ald_anken_sales_detail as d on s.anken_sales_id=d.anken_sales_id inner join ald_billing_company b on s.billing_company_id = b.billing_company_id where {$where} order by s.anken_id, d.anken_sales_detail_id SQL; return $db->query($sql, $param); }