middleware('auth'); $this->_service = 'reports'; $this->_module = 'gennovadc_reports'; $this->_viewname = 'gennovadcreport'; $this->_title = 'My Dc Reports'; $this->_base_url = '/gennovadcreports'; } public function export(Request $request) { $type = $request->input('type', 0); $month = $request->input('month', date('F Y', strtotime('now'))); if ($type == 'monthsummary') { $monthlyResponse = LambdaRequest::signedrequest('get', 'reports', 'gennovadc_reports/monthly_summary', ['month' => $month]); $rows = []; $totals = []; $headers = []; $rawHeaders = []; if (!empty($monthlyResponse->data->item) && is_array($monthlyResponse->data->item)) { foreach ($monthlyResponse->data->item as $item) { $rawHeaders = array_unique(array_merge($rawHeaders, array_keys((array) $item))); } } usort($rawHeaders, function ($a, $b) { return $a === 'product_name' ? -1 : ($b === 'product_name' ? 1 : 0); }); $headers = array_map(function ($key) { return ucwords(str_replace('_', ' ', $key)); }, $rawHeaders); foreach ($monthlyResponse->data->item as $item) { $row = []; foreach ($rawHeaders as $header) { $value = $item->$header ?? ''; $row[] = $value; if (is_numeric($item->$header ?? null) && $header !== 'product_name' && $header !== 'percent_ach') { $totals[$header] = ($totals[$header] ?? 0) + $item->$header; } } $rows[] = $row; } $totalRow = []; foreach ($rawHeaders as $header) { if ($header === 'product_name') { $totalRow[] = 'Total'; } elseif ($header === 'percent_ach' && isset($totals['units_plan']) && $totals['units_plan'] > 0 && isset($totals['units_ach'])) { $totalRow[] = round(($totals['units_ach'] / $totals['units_plan']) * 100) . '%'; } else { $totalRow[] = $totals[$header] ?? ''; } } $rows[] = $totalRow; $excelData = []; $excelData[] = $headers; $excelData = array_merge($excelData, $rows); return Excel::download(new InvoicesExport($excelData), $type . '-report.xlsx'); } elseif ($type == 'weeksummary') { $weeklyResponse = LambdaRequest::signedrequest('get', 'reports', 'gennovadc_reports/weekly_summary', ['month' => $month]); $weeklyData = $weeklyResponse->data->item ?? []; $weeklySummary = []; $weeklyTotals = []; if (!empty($weeklyData)) { $firstItem = (array) $weeklyData[0]; foreach ($firstItem as $key => $value) { $label = ucwords(str_replace(['_', '-'], ' ', $key)); $weeklySummary[] = [ 'label' => $label, 'key' => $key, ]; if (is_numeric($value)) { $weeklyTotals[$key] = 0; } } foreach ($weeklyData as $item) { foreach ($weeklyTotals as $key => $_) { $weeklyTotals[$key] += $item->$key ?? 0; } } } $excelData = []; $excelData[] = array_column($weeklySummary, 'label'); foreach ($weeklyData as $row) { $rowData = []; foreach ($weeklySummary as $col) { $val = $row->{$col['key']} ?? ''; $rowData[] = is_numeric($val) ? (float) $val : $val; } $excelData[] = $rowData; } if (!empty($weeklyData)) { $totalRow = []; foreach ($weeklySummary as $col) { if ($col['key'] === 'product_name') { $totalRow[] = 'Total'; } elseif ($col['key'] === 'percent_ach') { $totalRow[] = $weeklyTotals['month_plan'] > 0 ? round(($weeklyTotals['units_ach'] / $weeklyTotals['month_plan']) * 100) . '%' : '0.00%'; } else { $totalRow[] = $weeklyTotals[$col['key']] ?? 0; } } $excelData[] = $totalRow; } return Excel::download(new InvoicesExport($excelData), 'weekly-summary.xlsx'); } elseif ($type == 'centersummary') { $centerResponse = LambdaRequest::signedrequest('get', 'reports', 'gennovadc_reports/center_summary', ['month' => $month]); $centerSummarySubmission = $centerResponse->data->item ?? []; $centerTotals = $centerResponse->data->total ?? null; $centerSummary = []; $excelData = []; if (!empty($centerSummarySubmission)) { $firstItem = (array) $centerSummarySubmission[0]; foreach ($firstItem as $key => $val) { $label = ucwords(str_replace(['_', '-'], ' ', $key)); $centerSummary[] = [ 'label' => $label, 'key' => $key, ]; } $excelData[] = array_column($centerSummary, 'label'); foreach ($centerSummarySubmission as $row) { $rowData = []; foreach ($centerSummary as $col) { $val = $row->{$col['key']} ?? ''; $rowData[] = is_numeric($val) ? (float) $val : $val; } $excelData[] = $rowData; } if ($centerTotals) { $totalRow = []; foreach ($centerSummary as $index => $col) { if ($index === 0) { $totalRow[] = 'Total'; continue; } $key = $col['key']; if ($key === 'percent_ach') { $plan = $centerTotals->centers_plan ?? 0; $ach = $centerTotals->centers_ach ?? 0; $percent = $plan > 0 ? round(($ach / $plan) * 100) : 0; $totalRow[] = $percent . '%'; } else { $val = $centerTotals->{$key} ?? 0; $totalRow[] = (float) $val; } } $excelData[] = $totalRow; } } return Excel::download(new InvoicesExport($excelData), 'center-summary.xlsx'); } elseif ($type == 'centertrendsummary') { $centerTrendResponse = LambdaRequest::signedrequest('get', 'reports', 'gennovadc_reports/center_trend_summary'); $centerTrendSummarySubmission = $centerTrendResponse->data->item ?? []; $centerTrendTotals = []; $monthKeys = []; $centerTrendTotals = (array) ($centerTrendResponse->data->total ?? []); $rawMonthKeys = array_keys($centerTrendTotals); $year = 25; $currentYear = date('y'); $centerTrendSummary = [['name' => 'Product Name', 'key' => 'product_name']]; foreach ($rawMonthKeys as $month) { $monthUpper = strtoupper($month); if ($year == $currentYear && in_array($monthUpper, ['JAN','FEB','MAR','APR','MAY','JUN'])) { continue; } if ($month === 'JAN') { $year++; } $displayKey = $month . '-' . $year; $centerTrendSummary[] = ['name' => $displayKey, 'key' => $month]; } $excelData = []; $excelData[] = array_column($centerTrendSummary, 'name'); // header row // Data rows foreach ($centerTrendSummarySubmission as $row) { $rowData = []; foreach ($centerTrendSummary as $col) { $val = isset($row->{$col['key']}) ? $row->{$col['key']} : ''; $rowData[] = $val; } $excelData[] = $rowData; } // Total row if (!empty($centerTrendSummarySubmission)) { $totalRow = ['Total']; foreach (array_slice($centerTrendSummary, 1) as $col) { $val = $centerTrendTotals[$col['key']] ?? 0; $totalRow[] = $val; } $excelData[] = $totalRow; } return Excel::download(new InvoicesExport($excelData), 'center-trend-summary.xlsx'); } elseif ($type == 'unittrendsummary') { $unitTrendResponse = LambdaRequest::signedrequest('get', 'reports', 'gennovadc_reports/unit_trend_summary'); $unitTrendSummarySubmission = $unitTrendResponse->data->item ?? []; $unitTrendTotals = []; $monthKeys = []; if (!empty($unitTrendSummarySubmission)) { $firstItem = (array) $unitTrendSummarySubmission[0]; $monthKeys = array_filter(array_keys($firstItem), fn($key) => $key !== 'product_name'); foreach ($monthKeys as $month) { $unitTrendTotals[$month] = 0; } foreach ($unitTrendSummarySubmission as $item) { foreach ($monthKeys as $month) { $unitTrendTotals[$month] += $item->{$month} ?? 0; } } } $unitTrendSummary = [['name' => 'Product Name', 'key' => 'product_name']]; $year = 25; $currentYear = date('y'); foreach ($monthKeys as $month) { $monthUpper = strtoupper($month); if ($year == $currentYear && in_array($monthUpper, ['JAN','FEB','MAR','APR','MAY','JUN'])) { continue; } if ($month === 'JAN') { $year++; } $displayKey = $month . '-' . $year; // visible in Excel $unitTrendSummary[] = ['name' => $displayKey, 'key' => $month]; // key stays raw } $excelData = []; $excelData[] = array_column($unitTrendSummary, 'name'); foreach ($unitTrendSummarySubmission as $row) { $rowData = []; foreach ($unitTrendSummary as $col) { $val = $row->{$col['key']} ?? ''; $rowData[] = is_numeric($val) ? (float) $val : $val; } $excelData[] = $rowData; } if (!empty($unitTrendSummarySubmission)) { $totalRow = ['Total']; foreach (array_slice($unitTrendSummary, 1) as $col) { $val = $unitTrendTotals[$col['key']] ?? 0; $totalRow[] = (float) $val; } $excelData[] = $totalRow; } return Excel::download(new InvoicesExport($excelData), 'unit-trend-summary.xlsx'); } else { } } public function dashboard(Request $request) { // month $month = $request->input('month', date('F Y', strtotime('now'))); $monthlyResponse = LambdaRequest::signedrequest('get', 'reports', 'gennovadc_reports/monthly_summary', ['month' => $month]); $monthSummary = []; $numericKeys = []; if (!empty($monthlyResponse->data->item)) { $firstItem = (array) $monthlyResponse->data->item[0]; foreach ($firstItem as $key => $val) { $monthSummary[] = ['name' => ucwords(str_replace('_', ' ', $key)), 'key' => $key]; if ($key !== 'product_name' && is_numeric($val)) { $numericKeys[] = $key; } } } $totals = []; foreach ($numericKeys as $key) { $totals[$key] = 0; } foreach ($monthlyResponse->data->item as $item) { foreach ($numericKeys as $key) { $totals[$key] += $item->{$key} ?? 0; } } // week $weeklyResponse = LambdaRequest::signedrequest('get', 'reports', 'gennovadc_reports/weekly_summary', ['month' => $month]); $weeklyData = $weeklyResponse->data->item ?? []; $weeklySummary = []; $weeklyTotals = []; if (!empty($weeklyData)) { $firstItem = (array) $weeklyData[0]; foreach ($firstItem as $key => $value) { $label = ucwords(str_replace(['_', '-'], ' ', $key)); $weeklySummary[] = [ 'label' => $label, 'key' => $key, ]; if (is_numeric($value)) { $weeklyTotals[$key] = 0; } } foreach ($weeklyData as $item) { foreach ($weeklyTotals as $key => $_) { $weeklyTotals[$key] += $item->$key ?? 0; } } } // center $centerResponse = LambdaRequest::signedrequest('get', 'reports', 'gennovadc_reports/center_summary', ['month' => $month]); $centerSummarySubmission = $centerResponse->data->item ?? []; $centerTotals = $centerResponse->data->total ?? null; $centerSummary = []; if (!empty($centerSummarySubmission)) { $firstItem = (array) $centerSummarySubmission[0]; foreach ($firstItem as $key => $val) { $label = ucwords(str_replace(['_', '-'], ' ', $key)); $centerSummary[] = ['name' => $label, 'key' => $key]; } } // centertrend $centerTrendResponse = LambdaRequest::signedrequest('get', 'reports', 'gennovadc_reports/center_trend_summary'); $centerTrendSummarySubmission = $centerTrendResponse->data->item ?? []; $centerTrendTotals = []; $centerTrendTotals = (array) ($centerTrendResponse->data->total ?? []); $monthKeys = array_keys($centerTrendTotals); $year = 25; $currentYear = date('y'); $centerTrendSummary = [['name' => 'Product Name', 'key' => 'product_name']]; foreach ($monthKeys as $month) { $monthUpper = strtoupper($month); if ($year == $currentYear && in_array($monthUpper, ['JAN','FEB','MAR','APR','MAY','JUN'])) { continue; } if ($month === 'JAN') { $year++; } $centerTrendSummary[] = ['name' => $month . '-' . $year, 'key' => $month]; } $unitTrendResponse = LambdaRequest::signedrequest('get', 'reports', 'gennovadc_reports/unit_trend_summary'); $unitTrendSummarySubmission = $unitTrendResponse->data->item ?? []; $unitTrendTotals = []; if (!empty($unitTrendSummarySubmission)) { $firstItem = (array) $unitTrendSummarySubmission[0]; $rawMonthKeys = array_filter(array_keys($firstItem), fn($key) => $key !== 'product_name'); // keep totals indexed by raw month foreach ($rawMonthKeys as $month) { $unitTrendTotals[$month] = 0; } foreach ($unitTrendSummarySubmission as $item) { foreach ($rawMonthKeys as $month) { $unitTrendTotals[$month] += $item->{$month} ?? 0; } } // build month headers with year suffix $year = 25; $currentYear = date('y'); $unitTrendSummary = [['name' => 'Product Name', 'key' => 'product_name']]; foreach ($rawMonthKeys as $month) { $monthUpper = strtoupper($month); if ($year == $currentYear && in_array($monthUpper, ['JAN','FEB','MAR','APR','MAY','JUN'])) { continue; } if ($month === 'JAN') { $year++; } $displayKey = $month . '-' . $year; $unitTrendSummary[] = ['name' => $displayKey, 'key' => $month]; } } else { $rawMonthKeys = []; $unitTrendSummary = [['name' => 'Product Name', 'key' => 'product_name']]; } return view($this->_viewname . '.dashboard', [ 'title' => 'My Dc Dashboard', 'month' => $month, 'monthsummary' => $monthSummary, 'monthsummarysubmission' => $monthlyResponse->data->item ?? [], 'monthTotals' => $totals, 'weeklysummarysubmission' => $weeklyResponse->data->item ?? [], 'weeklysummary' => $weeklySummary, 'weeklyTotals' => $weeklyTotals, 'centersummarysubmission' => $centerSummarySubmission, 'centersummary' => $centerSummary, 'centerTotals' => $centerTotals, 'centertrendsummarysubmission' => $centerTrendSummarySubmission, 'centertrendsummary' => $centerTrendSummary, 'centerTrendTotals' => $centerTrendTotals, 'unittrendsummarysubmission' => $unitTrendSummarySubmission, 'unittrendsummary' => $unitTrendSummary, 'unitTrendTotals' => $unitTrendTotals, ]); } }