Browse Source

fix: report master

Muhammad Iqbal Afandi 3 years ago
parent
commit
4336783bc0

+ 51
- 38
app/Exports/TransactionExport.php View File

@@ -3,53 +3,66 @@
3 3
 namespace App\Exports;
4 4
 
5 5
 use App\Models\Transaction;
6
+use App\Services\TransactionService;
7
+use Illuminate\Contracts\Support\Responsable;
8
+use Illuminate\Contracts\View\View;
6 9
 use Illuminate\Http\Request;
7
-use Maatwebsite\Excel\Concerns\FromCollection;
10
+use Maatwebsite\Excel\Concerns\Exportable;
11
+use Maatwebsite\Excel\Concerns\FromView;
8 12
 use Maatwebsite\Excel\Concerns\ShouldAutoSize;
13
+use Maatwebsite\Excel\Concerns\WithStyles;
14
+use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
9 15
 
10
-class TransactionExport implements ShouldAutoSize, FromCollection
16
+class TransactionExport implements ShouldAutoSize, Responsable, FromView, WithStyles
11 17
 {
18
+    use Exportable;
19
+
20
+    private $fileName = 'transaction-report.xls';
21
+
12 22
     public function __construct(private Request $request)
13 23
     {}
14 24
 
15
-    public function collection()
25
+    public function view(): View
16 26
     {
17
-        $transaction = Transaction::filter($this->request->only('startDate', 'endDate', 'outlet'))->get();
27
+        $transactions = Transaction::filter(request()->only('startDate', 'endDate', 'outlet'))
28
+            ->get()
29
+            ->groupBy('created_at')
30
+            ->transform(fn($transactions) => [[
31
+                'date' => $transactions->first()->getRawOriginal('created_at'),
32
+                'createdAt' => $transactions->first()->created_at,
33
+                'totalTransaction' => $transactions->count(),
34
+                'totalPrice' => (new TransactionService)->totalPriceGroup($transactions),
35
+            ]])
36
+            ->flatten(1);
18 37
 
19
-        return $transaction;
38
+        return view('excel.transaction-report', compact('transactions'));
20 39
     }
21 40
 
22
-    // public function view(): View
23
-    // {
24
-    //     $startDate = $this->request->startDate;
25
-    //     $endDate = $this->request->endDate;
26
-    //     $mutations = Mutation::filter($startDate, $endDate)->get();
27
-
28
-    //     return inertia('excel.dashboard.payment-report.index', [
29
-    //         'mutations' => $mutations,
30
-    //         'startDate' => Carbon::parse($startDate)->format('d/m/Y'),
31
-    //         'endDate' => Carbon::parse($endDate)->subDay()->format('d/m/Y'),
32
-    //     ]);
33
-    // }
34
-
35
-    // public function styles(Worksheet $sheet)
36
-    // {
37
-    //     $lastRow = $sheet->getHighestDataRow();
38
-    //     $lastSecondRow = $lastRow - 1;
39
-
40
-    //     $sheet->getRowDimension($lastSecondRow)->setRowHeight(16);
41
-
42
-    //     return [
43
-    //         1 => [
44
-    //             'font' => ['bold' => true, 'size' => 16],
45
-    //             'alignment' => ['vertical' => 'center', 'horizontal' => 'center'],
46
-    //         ],
47
-    //         3 => ['font' => ['bold' => true]],
48
-    //         $lastSecondRow => ['font' => ['bold' => true, 'size' => 12]],
49
-    //         $lastRow => [
50
-    //             'font' => ['bold' => true, 'size' => 12],
51
-    //             'alignment' => ['horizontal' => 'left'],
52
-    //         ],
53
-    //     ];
54
-    // }
41
+    public function styles(Worksheet $sheet)
42
+    {
43
+        $lastRow = $sheet->getHighestDataRow();
44
+        $lastSecondRow = $lastRow - 1;
45
+
46
+        return [
47
+            1 => [
48
+                'font' => ['bold' => true, 'size' => 12],
49
+                'alignment' => ['vertical' => 'center', 'horizontal' => 'center'],
50
+            ],
51
+            2 => [
52
+                'font' => ['bold' => true, 'size' => 12],
53
+                'alignment' => ['vertical' => 'center', 'horizontal' => 'center'],
54
+            ],
55
+            4 => [
56
+                'font' => ['bold' => true],
57
+            ],
58
+            $lastRow => [
59
+                'font' => ['bold' => true, 'size' => 12],
60
+                'alignment' => ['horizontal' => 'left'],
61
+            ],
62
+            $lastSecondRow => [
63
+                'font' => ['bold' => true, 'size' => 12],
64
+                'alignment' => ['horizontal' => 'left'],
65
+            ],
66
+        ];
67
+    }
55 68
 }

+ 17
- 13
app/Http/Controllers/ReportTransactionController.php View File

@@ -5,8 +5,9 @@ namespace App\Http\Controllers;
5 5
 use App\Exports\TransactionExport;
6 6
 use App\Models\Outlet;
7 7
 use App\Models\Transaction;
8
-use Carbon\Carbon;
9
-use Maatwebsite\Excel\Facades\Excel;
8
+use App\Services\TransactionService;
9
+use Inertia\Controller;
10
+use Inertia\Inertia;
10 11
 
11 12
 class ReportTransactionController extends Controller
12 13
 {
@@ -17,18 +18,21 @@ class ReportTransactionController extends Controller
17 18
      */
18 19
     public function index()
19 20
     {
21
+        $transactions = Transaction::filter(request()->only('startDate', 'endDate', 'outlet'))
22
+            ->get()
23
+            ->groupBy('created_at')
24
+            ->transform(fn($transactions) => [[
25
+                'date' => $transactions->first()->getRawOriginal('created_at'),
26
+                'createdAt' => $transactions->first()->created_at,
27
+                'totalTransaction' => $transactions->count(),
28
+                'totalPrice' => (new TransactionService)->totalPriceGroupAsString($transactions),
29
+            ]])
30
+            ->flatten(1)
31
+            ->toArray();
32
+
20 33
         return inertia('transaction/Report', [
21 34
             'filters' => request()->all('startDate', 'endDate', 'outlet'),
22
-            'transactions' => Transaction::filter(request()->only('startDate', 'endDate', 'outlet'))
23
-                ->latest()
24
-                ->paginate(10)
25
-                ->withQueryString()
26
-                ->through(fn($transaction) => [
27
-                    'startDate' => Carbon::parse($transaction->getRawOriginal('created_at'))->translatedFormat('Y-m-d'),
28
-                    'createdAt' => $transaction->created_at,
29
-                    'price' => $transaction->totalPriceAsFullString(),
30
-                ])
31
-            ,
35
+            'transactions' => (new TransactionService)->getPaginator($transactions),
32 36
             'outlets' => Outlet::all()
33 37
                 ->transform(fn($outlet) => [
34 38
                     'label' => $outlet->name,
@@ -42,6 +46,6 @@ class ReportTransactionController extends Controller
42 46
      */
43 47
     public function exportExcel()
44 48
     {
45
-        return Excel::download(new TransactionExport(request()), 'report-transaction.xls');
49
+        return new TransactionExport(request());
46 50
     }
47 51
 }

+ 15
- 0
app/Services/CurrencyFormatService.php View File

@@ -0,0 +1,15 @@
1
+<?php
2
+
3
+namespace App\Services;
4
+
5
+class CurrencyFormatService
6
+{
7
+    public function setRupiahFormat(int $number, int $decimal = 0, bool $sign = false)
8
+    {
9
+        if ($sign) {
10
+            return 'Rp' . number_format($number, $decimal, ',', '.');
11
+        } else {
12
+            return number_format($number, $decimal, ',', '.');
13
+        }
14
+    }
15
+}

+ 40
- 0
app/Services/TransactionService.php View File

@@ -0,0 +1,40 @@
1
+<?php
2
+
3
+namespace App\Services;
4
+
5
+use App\Services\CurrencyFormatService;
6
+use Illuminate\Database\Eloquent\Collection;
7
+use Illuminate\Pagination\LengthAwarePaginator;
8
+
9
+class TransactionService
10
+{
11
+    public function getPaginator(array $items)
12
+    {
13
+        $total = count($items);
14
+        $page = request('page') ?? 1;
15
+        $perPage = 10;
16
+        $offset = ($page - 1) * $perPage;
17
+        $items = array_slice($items, $offset, $perPage);
18
+
19
+        return new LengthAwarePaginator($items, $total, $perPage, $page, [
20
+            'path' => request()->url(),
21
+            'query' => request()->query(),
22
+        ]);
23
+    }
24
+
25
+    public function totalPrice(Collection $collections)
26
+    {
27
+        $collections->transform(fn($transactions) => $transactions->totalPrice());
28
+        return $collections;
29
+    }
30
+
31
+    public function totalPriceGroup(Collection $collections)
32
+    {
33
+        return $this->totalPrice($collections)->sum();
34
+    }
35
+
36
+    public function totalPriceGroupAsString(Collection $collections)
37
+    {
38
+        return (new CurrencyFormatService)->setRupiahFormat($this->totalPriceGroup($collections), 0, true);
39
+    }
40
+}

+ 1
- 1
public/js/resources_js_pages_mutation_Report_vue.js View File

@@ -1202,7 +1202,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1202 1202
             options: $props.outlets
1203 1203
           }, null, 8
1204 1204
           /* PROPS */
1205
-          , ["modelValue", "options"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_7, [$props.mutations.data.length ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup["AppButton"], {
1205
+          , ["modelValue", "options"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_7, [$props.mutations.total ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup["AppButton"], {
1206 1206
             key: 0,
1207 1207
             label: "Export excel",
1208 1208
             "class-button": "p-button-text md:w-16rem",

+ 3
- 3
public/js/resources_js_pages_transaction_Create_vue.js View File

@@ -870,7 +870,7 @@ __webpack_require__.r(__webpack_exports__);
870 870
           id: form.laundry.id,
871 871
           item: form.laundry.name,
872 872
           unit: form.laundry.unit,
873
-          quantity: form.quantityLaundry,
873
+          quantity: form.quantityLaundry.toFixed(1),
874 874
           price: form.laundry.price,
875 875
           discount: 0,
876 876
           totalPrice: form.quantityLaundry * form.laundry.price
@@ -2327,10 +2327,10 @@ var TransactionReportTable = [{
2327 2327
   field: 'createdAt',
2328 2328
   header: 'Tanggal'
2329 2329
 }, {
2330
-  field: 'numberOfTransaction',
2330
+  field: 'totalTransaction',
2331 2331
   header: 'Jumlah Transaksi'
2332 2332
 }, {
2333
-  field: 'price',
2333
+  field: 'totalPrice',
2334 2334
   header: 'Total Nilai'
2335 2335
 }];
2336 2336
 

+ 2
- 2
public/js/resources_js_pages_transaction_Index_vue.js View File

@@ -2170,10 +2170,10 @@ var TransactionReportTable = [{
2170 2170
   field: 'createdAt',
2171 2171
   header: 'Tanggal'
2172 2172
 }, {
2173
-  field: 'numberOfTransaction',
2173
+  field: 'totalTransaction',
2174 2174
   header: 'Jumlah Transaksi'
2175 2175
 }, {
2176
-  field: 'price',
2176
+  field: 'totalPrice',
2177 2177
   header: 'Total Nilai'
2178 2178
 }];
2179 2179
 

+ 4
- 4
public/js/resources_js_pages_transaction_Report_vue.js View File

@@ -1192,7 +1192,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1192 1192
             options: $props.outlets
1193 1193
           }, null, 8
1194 1194
           /* PROPS */
1195
-          , ["modelValue", "options"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_7, [$props.transactions.data.length ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup["AppButton"], {
1195
+          , ["modelValue", "options"])) : (0,vue__WEBPACK_IMPORTED_MODULE_0__.createCommentVNode)("v-if", true)])])]), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createElementVNode)("div", _hoisted_7, [$props.transactions.total ? ((0,vue__WEBPACK_IMPORTED_MODULE_0__.openBlock)(), (0,vue__WEBPACK_IMPORTED_MODULE_0__.createBlock)($setup["AppButton"], {
1196 1196
             key: 0,
1197 1197
             label: "Export excel",
1198 1198
             "class-button": "p-button-text md:w-16rem",
@@ -1220,7 +1220,7 @@ function render(_ctx, _cache, $props, $setup, $data, $options) {
1220 1220
               return [(0,vue__WEBPACK_IMPORTED_MODULE_0__.createVNode)($setup["AppButton"], {
1221 1221
                 icon: "pi pi-link",
1222 1222
                 "class": "p-button-text p-button-icon-only p-button-rounded p-button-text",
1223
-                href: "/transactions?startDate=".concat(data.startDate, "&endDate=").concat(data.startDate)
1223
+                href: "/transactions?startDate=".concat(data.date, "&endDate=").concat(data.date)
1224 1224
               }, null, 8
1225 1225
               /* PROPS */
1226 1226
               , ["href"])];
@@ -1301,10 +1301,10 @@ var TransactionReportTable = [{
1301 1301
   field: 'createdAt',
1302 1302
   header: 'Tanggal'
1303 1303
 }, {
1304
-  field: 'numberOfTransaction',
1304
+  field: 'totalTransaction',
1305 1305
   header: 'Jumlah Transaksi'
1306 1306
 }, {
1307
-  field: 'price',
1307
+  field: 'totalPrice',
1308 1308
   header: 'Total Nilai'
1309 1309
 }];
1310 1310
 

+ 2
- 2
public/js/resources_js_pages_transaction_Show_vue.js View File

@@ -1216,10 +1216,10 @@ var TransactionReportTable = [{
1216 1216
   field: 'createdAt',
1217 1217
   header: 'Tanggal'
1218 1218
 }, {
1219
-  field: 'numberOfTransaction',
1219
+  field: 'totalTransaction',
1220 1220
   header: 'Jumlah Transaksi'
1221 1221
 }, {
1222
-  field: 'price',
1222
+  field: 'totalPrice',
1223 1223
   header: 'Total Nilai'
1224 1224
 }];
1225 1225
 

+ 2
- 2
public/js/resources_js_pages_transaction_TableHeader_js.js View File

@@ -52,10 +52,10 @@ var TransactionReportTable = [{
52 52
   field: 'createdAt',
53 53
   header: 'Tanggal'
54 54
 }, {
55
-  field: 'numberOfTransaction',
55
+  field: 'totalTransaction',
56 56
   header: 'Jumlah Transaksi'
57 57
 }, {
58
-  field: 'price',
58
+  field: 'totalPrice',
59 59
   header: 'Total Nilai'
60 60
 }];
61 61
 

+ 1
- 1
public/js/vue.js View File

@@ -57778,7 +57778,7 @@ module.exports = JSON.parse('{"name":"axios","version":"0.21.4","description":"P
57778 57778
 /******/ 		// This function allow to reference async chunks
57779 57779
 /******/ 		__webpack_require__.u = (chunkId) => {
57780 57780
 /******/ 			// return url for filenames based on template
57781
-/******/ 			return "js/" + chunkId + ".js?id=" + {"resources_js_pages_Access_vue":"a18ed856923fae52","resources_js_pages_auth_ForgotPassword_vue":"c9f401672b6f2423","resources_js_pages_auth_Login_vue":"cb0cb153b976d2c1","resources_js_pages_auth_ResetPassword_vue":"1078df5cebf2e3c6","resources_js_pages_auth_VerifyEmail_vue":"a0ee23b849c826b1","resources_js_pages_customer_Create_vue":"43d285d678ba8793","resources_js_pages_customer_Edit_vue":"01d10f0dd19b734c","resources_js_pages_customer_Index_vue":"0ca5a813eacb510a","resources_js_pages_customer_TableHeader_js":"71be5afdca048a9c","resources_js_pages_discount_Index_vue":"7a086c011a3cdf92","resources_js_pages_expense_Create_vue":"18c4b47fcb9e103a","resources_js_pages_expense_Index_vue":"d195311d84b82d44","resources_js_pages_expense_Show_vue":"4801bedc7912088f","resources_js_pages_expense_TableHeader_js":"72e3dee74175b1c0","resources_js_pages_laundry_Create_vue":"aae1027a621900d5","resources_js_pages_laundry_Edit_vue":"160898ea138ee162","resources_js_pages_laundry_Index_vue":"29e5e4317fa0862d","resources_js_pages_laundry_TableHeader_js":"494e577855bbcaf6","resources_js_pages_mutation_Report_vue":"d74f6004bddcfdc6","resources_js_pages_mutation_TableHeader_js":"82c2999bd7d098a1","resources_js_pages_outlet_Create_vue":"48bdc532cf3f8c62","resources_js_pages_outlet_Edit_vue":"32338ffd7c28e656","resources_js_pages_outlet_Index_vue":"e1f9a19ae0ffa3df","resources_js_pages_outlet_TableHeader_js":"498bf7e64bc0d0c4","resources_js_pages_product_Create_vue":"4e737e98d38eca28","resources_js_pages_product_Edit_vue":"ddac8c4ce1363cc3","resources_js_pages_product_Index_vue":"ff1e209ae8b6ebbd","resources_js_pages_product_TableHeader_js":"b8eaaa9de25a2322","resources_js_pages_transaction_Create_vue":"bc8669735a72a0ec","resources_js_pages_transaction_Index_vue":"6da809da30371f6f","resources_js_pages_transaction_Report_vue":"eeca91c15c146171","resources_js_pages_transaction_Show_vue":"2087aac76bbbf7f1","resources_js_pages_transaction_TableHeader_js":"ba35ab28bb4ac891","resources_js_pages_user_Create_vue":"1f5759b89d51290b","resources_js_pages_user_Edit_vue":"8e9cac16a201e333","resources_js_pages_user_Index_vue":"e798523892e8e90c","resources_js_pages_user_Show_vue":"e674f453c14893b2","resources_js_pages_user_TableHeader_js":"5653ecbcd70fd235"}[chunkId] + "";
57781
+/******/ 			return "js/" + chunkId + ".js?id=" + {"resources_js_pages_Access_vue":"a18ed856923fae52","resources_js_pages_auth_ForgotPassword_vue":"c9f401672b6f2423","resources_js_pages_auth_Login_vue":"cb0cb153b976d2c1","resources_js_pages_auth_ResetPassword_vue":"1078df5cebf2e3c6","resources_js_pages_auth_VerifyEmail_vue":"a0ee23b849c826b1","resources_js_pages_customer_Create_vue":"43d285d678ba8793","resources_js_pages_customer_Edit_vue":"01d10f0dd19b734c","resources_js_pages_customer_Index_vue":"0ca5a813eacb510a","resources_js_pages_customer_TableHeader_js":"71be5afdca048a9c","resources_js_pages_discount_Index_vue":"7a086c011a3cdf92","resources_js_pages_expense_Create_vue":"18c4b47fcb9e103a","resources_js_pages_expense_Index_vue":"d195311d84b82d44","resources_js_pages_expense_Show_vue":"4801bedc7912088f","resources_js_pages_expense_TableHeader_js":"72e3dee74175b1c0","resources_js_pages_laundry_Create_vue":"aae1027a621900d5","resources_js_pages_laundry_Edit_vue":"160898ea138ee162","resources_js_pages_laundry_Index_vue":"29e5e4317fa0862d","resources_js_pages_laundry_TableHeader_js":"494e577855bbcaf6","resources_js_pages_mutation_Report_vue":"608a7017c0fa0d0d","resources_js_pages_mutation_TableHeader_js":"82c2999bd7d098a1","resources_js_pages_outlet_Create_vue":"48bdc532cf3f8c62","resources_js_pages_outlet_Edit_vue":"32338ffd7c28e656","resources_js_pages_outlet_Index_vue":"e1f9a19ae0ffa3df","resources_js_pages_outlet_TableHeader_js":"498bf7e64bc0d0c4","resources_js_pages_product_Create_vue":"4e737e98d38eca28","resources_js_pages_product_Edit_vue":"ddac8c4ce1363cc3","resources_js_pages_product_Index_vue":"ff1e209ae8b6ebbd","resources_js_pages_product_TableHeader_js":"b8eaaa9de25a2322","resources_js_pages_transaction_Create_vue":"d5f754e0bfd1f1bd","resources_js_pages_transaction_Index_vue":"4681e530e6df52b1","resources_js_pages_transaction_Report_vue":"93044a85eefc7324","resources_js_pages_transaction_Show_vue":"ebd8059da08e93b1","resources_js_pages_transaction_TableHeader_js":"be63e672e103818b","resources_js_pages_user_Create_vue":"1f5759b89d51290b","resources_js_pages_user_Edit_vue":"8e9cac16a201e333","resources_js_pages_user_Index_vue":"e798523892e8e90c","resources_js_pages_user_Show_vue":"e674f453c14893b2","resources_js_pages_user_TableHeader_js":"5653ecbcd70fd235"}[chunkId] + "";
57782 57782
 /******/ 		};
57783 57783
 /******/ 	})();
57784 57784
 /******/ 	

+ 1
- 1
resources/js/pages/mutation/Report.vue View File

@@ -123,7 +123,7 @@ const isAdmin = computed(() => usePage().props.value.isAdmin)
123 123
           </div>
124 124
           <div class="col-12 md:col-4 flex justify-content-end">
125 125
             <AppButton
126
-              v-if="mutations.data.length"
126
+              v-if="mutations.total"
127 127
               label="Export excel"
128 128
               class-button="p-button-text md:w-16rem"
129 129
               icon="pi pi-file-excel"

+ 1
- 1
resources/js/pages/transaction/Create.vue View File

@@ -178,7 +178,7 @@ const addTransactionBasket = () => {
178 178
       id: form.laundry.id,
179 179
       item: form.laundry.name,
180 180
       unit: form.laundry.unit,
181
-      quantity: form.quantityLaundry,
181
+      quantity: form.quantityLaundry.toFixed(1),
182 182
       price: form.laundry.price,
183 183
       discount: 0,
184 184
       totalPrice: form.quantityLaundry * form.laundry.price,

+ 2
- 2
resources/js/pages/transaction/Report.vue View File

@@ -115,7 +115,7 @@ const isAdmin = computed(() => usePage().props.value.isAdmin)
115 115
           </div>
116 116
           <div class="col-12 md:col-4 flex justify-content-end">
117 117
             <AppButton
118
-              v-if="transactions.data.length"
118
+              v-if="transactions.total"
119 119
               label="Export excel"
120 120
               class-button="p-button-text md:w-16rem"
121 121
               icon="pi pi-file-excel"
@@ -138,7 +138,7 @@ const isAdmin = computed(() => usePage().props.value.isAdmin)
138 138
           <AppButton
139 139
             icon="pi pi-link"
140 140
             class="p-button-text p-button-icon-only p-button-rounded p-button-text"
141
-            :href="`/transactions?startDate=${data.startDate}&endDate=${data.startDate}`"
141
+            :href="`/transactions?startDate=${data.date}&endDate=${data.date}`"
142 142
           />
143 143
         </template>
144 144
       </Column>

+ 2
- 2
resources/js/pages/transaction/TableHeader.js View File

@@ -17,6 +17,6 @@ export const TransactionBasketTable = [
17 17
 
18 18
 export const TransactionReportTable = [
19 19
   { field: 'createdAt', header: 'Tanggal' },
20
-  { field: 'numberOfTransaction', header: 'Jumlah Transaksi' },
21
-  { field: 'price', header: 'Total Nilai' },
20
+  { field: 'totalTransaction', header: 'Jumlah Transaksi' },
21
+  { field: 'totalPrice', header: 'Total Nilai' },
22 22
 ]

+ 38
- 0
resources/views/excel/transaction-report.blade.php View File

@@ -0,0 +1,38 @@
1
+<table>
2
+    <thead>
3
+        <tr>
4
+            <th colspan="4">Laporan Transaksi</th>
5
+        </tr>
6
+        <tr>
7
+            <th colspan="4" rowspan="2">Periode {{ $transactions->first()['createdAt'] }} -
8
+                {{ $transactions->last()['createdAt'] }} </th>
9
+        </tr>
10
+        <tr></tr>
11
+        <tr>
12
+            <th>#</th>
13
+            <th>Tanggal</th>
14
+            <th>Jumlah Transaksi</th>
15
+            <th>Total Nilai</th>
16
+        </tr>
17
+    </thead>
18
+    <tbody>
19
+        @foreach ($transactions->chunk(100) as $chunk)
20
+            @foreach ($chunk as $index => $transaction)
21
+                <tr>
22
+                    <td>{{ ++$index }}</td>
23
+                    <td>{{ $transaction['createdAt'] }}</td>
24
+                    <td>{{ $transaction['totalTransaction'] }}</td>
25
+                    <td>{{ (new App\Services\CurrencyFormatService)->setRupiahFormat($transaction['totalPrice'], 0, true) }}</td>
26
+                </tr>
27
+            @endforeach
28
+        @endforeach
29
+        <tr>
30
+            <td colspan="2">Total</td>
31
+        </tr>
32
+        <tr>
33
+            <td colspan="2">Transaksi / Nilai</td>
34
+            <td>{{ $transactions->sum('totalTransaction') }}</td>
35
+            <td>{{ (new App\Services\CurrencyFormatService)->setRupiahFormat($transactions->sum('totalPrice'), 0, true)  }}</td>
36
+        </tr>
37
+    </tbody>
38
+</table>