| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- <?php
-
- namespace App\Services;
-
- use App\Services\CurrencyFormatService;
- use Illuminate\Database\Eloquent\Collection as EloquentCollection;
- use Illuminate\Pagination\LengthAwarePaginator;
- use Illuminate\Support\Collection as SupportCollection;
-
- class TransactionService extends CurrencyFormatService
- {
- public function getPaginator(array $items)
- {
- $total = count($items);
- $page = request('page') ?? 1;
- $perPage = 10;
- $offset = ($page - 1) * $perPage;
- $items = array_slice($items, $offset, $perPage);
-
- return new LengthAwarePaginator($items, $total, $perPage, $page, [
- 'path' => request()->url(),
- 'query' => request()->query(),
- ]);
- }
-
- public function totalPrice(EloquentCollection $collections)
- {
- return $collections->transform(fn($collect) => $collect->totalPrice());
- }
-
- public function totalPriceGroup(EloquentCollection $collections)
- {
- return $this->totalPrice($collections)->sum();
- }
-
- public function totalPriceGroupAsString(EloquentCollection $collections)
- {
- return $this->setRupiahFormat($this->totalPriceGroup($collections), true);
- }
-
- public function totalDiscountGiven(EloquentCollection $collections)
- {
- return $collections->transform(fn($collect) => $collect->totalDiscountGiven());
- }
-
- public function totalDiscountGivenGroup(EloquentCollection $collections)
- {
- return $this->totalDiscountGiven($collections)->sum();
- }
-
- public function totalDiscountGivenGroupAsString(EloquentCollection $collections)
- {
- return $this->setRupiahFormat($this->totalDiscountGivenGroup($collections), true);
- }
-
- public function totalPerMonth(EloquentCollection $collections)
- {
- return $collections->transform(fn($collection) => $collection->count());
- }
-
- public function statisticData(SupportCollection $collections, int $take = -1)
- {
- $collections = $collections->take($take);
- $collections->transform(fn($collections) => $this->totalPerMonth($collections));
- return $collections;
- }
-
- public function topTransaction(EloquentCollection $collections, int $take = 5)
- {
- return $collections
- ->transform(fn($collect) => [[
- 'customerNumber' => $collect->first()->customer->customer_number,
- 'name' => $collect->first()->customer->name,
- 'totalPrice' => $this->totalPriceGroup($collect),
- ]])
- ->sortByDesc('totalPrice')
- ->take($take)
- ->flatten(1);
- }
- }
|