質問編集履歴

6

コントローラーの追記

2020/05/14 09:32

投稿

rikutennis
rikutennis

スコア55

test CHANGED
File without changes
test CHANGED
@@ -212,15 +212,53 @@
212
212
 
213
213
  ```
214
214
 
215
- ヘッダーの定義部分はこのようになっています。
215
+ ヘッダーの定義部分(コントローラー)はこのようになっています。
216
216
 
217
217
  ```PHP
218
218
 
219
+ class HourListController extends BaseController
220
+
221
+ {
222
+
223
+ const CSV_DEFAULT_DATE_FORMAT = 'Y-m-d';
224
+
225
+ const PROJECT_SESSION_NAME = 'userDepartData';
226
+
227
+
228
+
229
+ public function download()
230
+
231
+ {
232
+
219
- $stream = fopen('php://temp', 'r+b');
233
+ $stream = fopen('php://temp', 'r+b');
220
-
234
+
221
- $header = config('hourListCSV.csv_header');
235
+ $header = config('hourListCSV.csv_header');
222
-
236
+
223
- fputcsv($stream, $header);
237
+ fputcsv($stream, $header);
238
+
239
+
240
+
241
+ rewind($stream);
242
+
243
+ $csv = str_replace(PHP_EOL, "\r\n", stream_get_contents($stream));
244
+
245
+ $csv = mb_convert_encoding($csv, 'SJIS-win', 'UTF-8');
246
+
247
+ $file_name = date('Y_m_d').'_工数一覧'.'.csv';
248
+
249
+ $headers = [
250
+
251
+ 'Content-Type' => 'text/csv',
252
+
253
+ 'Content-Disposition' => 'attachment; filename="'. $file_name . '"',
254
+
255
+ ];
256
+
257
+
258
+
259
+ return response()->make($csv, 200, $headers);
260
+
261
+ }
224
262
 
225
263
  ```
226
264
 

5

追記

2020/05/14 09:32

投稿

rikutennis
rikutennis

スコア55

test CHANGED
File without changes
test CHANGED
@@ -104,6 +104,28 @@
104
104
 
105
105
  ```PHP
106
106
 
107
+ public function periodSeparator($date)
108
+
109
+ {
110
+
111
+ if ($date->quarter < 3) {
112
+
113
+ $periodSeparator["startMonth"] = 1;
114
+
115
+ $periodSeparator["endMonth"] = 6;
116
+
117
+ } else {
118
+
119
+ $periodSeparator["startMonth"] = 7;
120
+
121
+ $periodSeparator["endMonth"]= 12;
122
+
123
+ }
124
+
125
+ return $periodSeparator;
126
+
127
+ }
128
+
107
129
  $todayDate = Carbon::now();
108
130
 
109
131
  $periodSeparator = self::periodSeparator($todayDate);
@@ -194,6 +216,8 @@
194
216
 
195
217
  ```PHP
196
218
 
219
+ $stream = fopen('php://temp', 'r+b');
220
+
197
221
  $header = config('hourListCSV.csv_header');
198
222
 
199
223
  fputcsv($stream, $header);

4

weekNumByMonthの説明追加

2020/05/14 09:24

投稿

rikutennis
rikutennis

スコア55

test CHANGED
File without changes
test CHANGED
@@ -96,11 +96,51 @@
96
96
 
97
97
  $weekNumByMonth[$month]
98
98
 
99
+ ```には月ごとの週数が入ってます。
100
+
101
+ 日曜日の回数+最後の週が日曜日で終わらない時は+1となっています。
102
+
103
+ Carbonを使って以下のように取得しています。
104
+
105
+ ```PHP
106
+
107
+ $todayDate = Carbon::now();
108
+
109
+ $periodSeparator = self::periodSeparator($todayDate);
110
+
111
+ for ($month = $periodSeparator["startMonth"]; $month <= $periodSeparator["endMonth"]; $month++) {
112
+
113
+     $date = Carbon::create($todayDate->year, $month);
114
+
115
+     $weekNumByMonth[$month] = $date->endOfMonth()->weekOfYear - $date->startOfMonth()->weekOfYear + 1;
116
+
117
+ }
118
+
119
+ ```
120
+
99
- ```には月ごとの週数が入ってます。例)$weekNumByMonth[1] = 5
121
+ 例)$weekNumByMonth[1] = 5
122
+
100
-
123
+ 例)$weekNumByMonth[2] = 5
124
+
101
-
125
+ 例)$weekNumByMonth[3] = 6
126
+
102
-
127
+ 例)$weekNumByMonth[4] = 5
128
+
103
-
129
+ 例)$weekNumByMonth[5] = 5
130
+
131
+ 例)$weekNumByMonth[6] = 5
132
+
133
+ 例)$weekNumByMonth[7] = 5
134
+
135
+ 例)$weekNumByMonth[8] = 6
136
+
137
+ 例)$weekNumByMonth[9] = 5
138
+
139
+ 例)$weekNumByMonth[10] = 5
140
+
141
+ 例)$weekNumByMonth[11] = 6
142
+
143
+ 例)$weekNumByMonth[12] = 5
104
144
 
105
145
 
106
146
 

3

$periodSeparatorについての説明追加

2020/05/14 07:00

投稿

rikutennis
rikutennis

スコア55

test CHANGED
File without changes
test CHANGED
@@ -76,6 +76,22 @@
76
76
 
77
77
  ```には半期の始めと終わりの月が入ってます
78
78
 
79
+ 例)
80
+
81
+ (1〜6月の場合)
82
+
83
+ $periodSeparator["startMonth"] = 1
84
+
85
+ $periodSeparator["endMonth"] = 6
86
+
87
+
88
+
89
+ (7〜12月の場合)
90
+
91
+ $periodSeparator["startMonth"] = 7
92
+
93
+ $periodSeparator["endMonth"] = 12
94
+
79
95
  ```ここに言語を入力
80
96
 
81
97
  $weekNumByMonth[$month]

2

HTMLの追加

2020/05/14 06:45

投稿

rikutennis
rikutennis

スコア55

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  ここに質問の内容を詳しく書いてください。
6
6
 
7
- PHP(CakePHP)で労務管理システムを作っています。
7
+ PHP(Laravel)で労務管理システムを作っています。
8
8
 
9
9
  CSV出力機能実装中につまづいてしまいました。
10
10
 
@@ -17,6 +17,72 @@
17
17
 
18
18
 
19
19
  このように上段に月、下段に週となるように出力するCSVのヘッダーを作りたいです。
20
+
21
+
22
+
23
+ ###HTML
24
+
25
+ ```HTML
26
+
27
+ <thead>
28
+
29
+ <tr>
30
+
31
+ <th rowspan="2">名前</th>
32
+
33
+ <th rowspan="2">部署</th>
34
+
35
+ <th rowspan="2">役職</th>
36
+
37
+ <th rowspan="2">予想</th>
38
+
39
+ <th rowspan="2">残業</th>
40
+
41
+ <th rowspan="2">合計</th>
42
+
43
+ @for ($month = $periodSeparator["startMonth"]; $month <= $periodSeparator["endMonth"]; $month++)
44
+
45
+ <th colspan={{ $weekNumByMonth[$month] }}>{{ $month }}月</th>
46
+
47
+ @endfor
48
+
49
+ </tr>
50
+
51
+ <tr>
52
+
53
+ @for ($month = $periodSeparator["startMonth"]; $month <= $periodSeparator["endMonth"]; $month++)
54
+
55
+ @for ($weeks = 1; $weeks <= $weekNumByMonth[$month]; $weeks++)
56
+
57
+ <th>{{ $weeks }}週</th>
58
+
59
+ @endfor
60
+
61
+ @endfor
62
+
63
+ </tr>
64
+
65
+ </thead>
66
+
67
+ ```
68
+
69
+ ```ここに言語を入力
70
+
71
+ $periodSeparator["startMonth"]
72
+
73
+ $periodSeparator["endMonth"]
74
+
75
+
76
+
77
+ ```には半期の始めと終わりの月が入ってます
78
+
79
+ ```ここに言語を入力
80
+
81
+ $weekNumByMonth[$month]
82
+
83
+ ```には月ごとの週数が入ってます。例)$weekNumByMonth[1] = 5
84
+
85
+
20
86
 
21
87
 
22
88
 

1

最終的なCSVのヘッダーのイメージ追加

2020/05/14 06:33

投稿

rikutennis
rikutennis

スコア55

test CHANGED
File without changes
test CHANGED
@@ -10,19 +10,23 @@
10
10
 
11
11
 
12
12
 
13
- ####実装イメージ
13
+ ####最終的な実装イメージ
14
14
 
15
- ![実装イメージ](a6a1c4442f6c995eb1265b3258b73bff.png)
15
+ ![イメージ説明](786b8155a5909383a8b254b74141adf3.png)
16
16
 
17
17
 
18
18
 
19
- このように上段に月、下段に週となるようにCSVのヘッダーを作りたいです。
19
+ このように上段に月、下段に週となるように出力するCSVのヘッダーを作りたいです。
20
+
21
+
20
22
 
21
23
 
22
24
 
23
25
  ### 該当のソースコード
24
26
 
25
27
  現在のConfigはこちら
28
+
29
+ **hourListCSV**
26
30
 
27
31
  ```PHP
28
32