/** * 実行 */ protected function perform() { // DB接続 $db =& $this->_core->getDB(); // モデル $m =& $this->_model; //----------------------------- // 検索が押された処理 //----------------------------- if (isset($this->_request['search']) == true) { // 対象月の入力値を取得 $input = $this->_like['target_month']; $input = strtotime($input); // 対象年と月を取得 $targetYear = date('Y', $input); $targetMonth = date('m', $input); // YYYYMM文字列を作成 $targetYm = date('Ym', $input); // 案件リストを取得 $ankenList =& $m->Result_AdminReportSalesAnken_getAnkenList(); // 結果変数 $result = array(); //------------------------------------ // 案件のリストを取得し、ループで処理 //------------------------------------ foreach ($ankenList as $anken) { $row = array(); //------------------------------ // 案件情報を設定 //------------------------------ $row["anken"] = $anken; // 案件ID $ankenId = $anken['anken_id']; // キャンペーンコード $code = $anken['campaign_code']; //------------------------------ // 検索条件を作成 //------------------------------ // 締め日から対象範囲を取得 $hani =& $m->Result_AdminReportSalesAnken_getFromTo($anken, $targetYear, $targetMonth); $like['from'] = $hani['from']; $like['to'] = $hani['to']; // 承認日付を基準とします $like['date_target'] = 2; //----------------------- // 期間内に成果があり場合、売上原価取得 //----------------------- if (empty($anken['accept_date_max']) == false && empty($anken['accept_date_min']) == false && $like['from'] <= $anken['accept_date_max'] && $anken['accept_date_min'] <= $like['to']) { // 売上集計クラス $summary =& ListSummaryManager::createForClient($ankenId, $db, $code, $like, $anken['price_type_cd']); $tankaList =& $summary->getAcceptCountWithPrice(); // 卸値取得 $oroshiList =& $summary->getAcceptCountWithOroshi(); // 売上データがある場合に表示 if (empty($tankaList) == false) { // 単価ごとに1レコードを処理 foreach ($tankaList as $tanka) { // キャプション(承認・入金) $subTotal['caption'] = $tanka['add_caption_2']; // 単価 $price = $tanka['sales_price']; $subTotal['sales_price'] = $price; // 件数 $count = $tanka['accept']; $subTotal['accept'] = $count; // 単価小計 $sum = $price * $count; $subTotal['sub_total'] = $sum; // 単価 $row['tanka_list'][] = $subTotal; // 単価合計 $row["sales"]["sales"] += $sum; $sum = $tanka['sum_oroshi']; $row["cost"]["cost"] += $sum; } } // 卸値データがある場合に表示 if (empty($oroshiList) == false) { // 卸値ごとに1レコードを処理 foreach ($oroshiList as $oroshi) { // キャプション(承認・入金) $subTotal['caption'] = $oroshi['add_caption_2']; // 卸値 $price = $oroshi['oroshi_price']; $subTotal['oroshi_price'] = $price; // 件数 $count = $oroshi['accept']; $subTotal['accept'] = $count; // 卸値小計 $sum = $price * $count; $subTotal['sub_total'] = $sum; // 卸値 $row['oroshi_list'][] = $subTotal; } } } //----------------------- // 結果に追加 //----------------------- $deviceCd = $anken['device_cd']; $result[$deviceCd][] = $row; } $report =& $result; //--------------------------------- // 事前登録を取得しデフォルト値を設定します。 //--------------------------------- $m->Result_AdminReportSalesAnken_addBeforeValue($report, $targetYm); //--------------------------------- // 売上原価と事前登録ともない案件は削除 //--------------------------------- $m->Result_AdminReportSalesAnken_deleteEmptyAnken($report); //--------------------------------- // 請求先の情報を付与(事前送付、必着日) //--------------------------------- $m->Result_AdminReportSalesAnken_addBillingInfoValue($report, $targetYear, $targetMonth); //--------------------------------- // 履歴を取得しデフォルト値を設定します。 //--------------------------------- $m->Result_AdminReportSalesAnken_addHistoryValue($report, $targetYm); //--------------------------------- // 入力テキストボックス名称を付加します。 //--------------------------------- $m->Result_AdminReportSalesAnken_addInputBoxName($report); //--------------------------------- // 合計を取得 //--------------------------------- $total =& $m->Result_AdminReportSalesAnken_makeTotal($report); $report["total"] =& $total; //--------------------------------- // セッションに保存 //--------------------------------- $hash = sha1(rand()); $name = "old_admin_report_sales_anken_" . $hash; $this->_core->setSession($name, $report); //--------------------------------- // テンプレート変数追加 //--------------------------------- $this->_dataFrom['show'] = true; $this->_dataFrom['group_pc']['list'] =& $report[1]; $this->_dataFrom['group_mobile']['list'] =& $report[2]; $this->_dataFrom['group_sonota']['list'] =& $report[3]; $this->_dataFrom['group_sonota_count'] = count($report[3]); $this->_dataFrom['total'] =& $report["total"]; $this->_dataFrom['hash'] = $hash; } // 表示するための設定 $this->_dataFrom['form_action'] = "admin_report_sales_anken_conf.php"; $this->_dataFrom['step'] = "input"; $this->_dataFrom['input_type'] = "input"; $this->_dataFrom['path_core_table'] = ABS_TMPL . "result/admin_report_sales_anken_core_table.tpl"; }
/** * 対象案件の売上と支払を、締め日区切りで集計します */ function &getSummaryDataGroupByShimebi(&$db, &$anken) { $code = $anken['campaign_code']; $ankenId = $anken['anken_id']; $campaignFrom = $anken['campaign_from']; $campaignTo = $anken['campaign_to']; $shime = $anken['shime_date']; // 締め日区切りの配列を取得 // 締め日から締め日を from, to で配列にする $span =& DateManager::getArrayShimeSpan($ankenId, $campaignFrom, $campaignTo, $shime); // 戻り値用配列を初期化 $total = array(); // 期間ごとに処理 foreach ($span as $key => $value) { // 条件配列を初期化 $like = array(); // 対象期間(締め日区切り) $like['from'] = $value['from']; $like['to'] = $value['to']; // 集計オブジェクトを取得 $client =& ListSummaryManager::createForClient($ankenId, $db, $code, $like); $media =& ListSummaryManager::createForMedia($ankenId, $db, $code, $like); $year = date('Y', strtotime($like['from'])); $month = date('m', strtotime($like['from'])); $total[$year][$month]['input'] = $client->getAmountReward(); $total[$year][$month]['output'] = $media->getAmountReward(); } return $total; }
/** * アフィリエイト売上金額を取得します。 * @param array $kikan 期間(From,To) * @param string $targetMonth 対象年月 * @param array $anken 対象案件 */ public function &Result_AdminReportSalesSalesEdit_getAffiliateSales(&$kikan, &$anken) { // DB接続 $db =& $this->_core->getDB(); $kikanTo = $kikan['To']; $toYear = date('Y', $kikanTo); $toMonth = date('m', $kikanTo); $result = array(); // 検索範囲を取得 $hani =& $this->Result_AdminReportSalesSalesEdit_getFromTo($anken, $toYear, $toMonth); $from = $hani['from']; $to = $hani['to']; // 案件ID $ankenId = $anken['anken_id']; // キャンペーンコード $code = $anken['campaign_code']; // 条件 $like['from'] = $from; $like['to'] = $to; // 承認日付を基準とします $like['date_target'] = 2; // 単価タイプ $priceTypeCd = $anken['price_type_cd']; // 集計クラス $summary =& ListSummaryManager::createForClient($ankenId, $db, $code, $like, $priceTypeCd); $data =& $summary->getAcceptCountWithPrice(); // 複数単価の場合は集計する $count = count($data); $i = 1; foreach ($data as $row) { $r = array(); // アフィリエイト成果の売上原価種別IDは1 $r['sales_genka_type_id'] = "1"; // 表示順 $r['order'] = $i; $r['price'] = intval($row['sales_price']); $r['accept'] = intval($row['accept']); // 報酬金額 $r['cost'] = $r['price'] * $r['accept']; // 売上金額0円の場合は表示しない if ($r['cost'] == 0) { continue; } // 定率成果個数 $r['rate_accept'] = $row['rate_accept']; // 結果配列に追加 $result[] = $r; $i++; } return $result; }