ParkingFeeService.php 2.6KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. <?php
  2. namespace App\Services;
  3. use App\Models\EntryTransaction;
  4. use App\Models\ParkingFee;
  5. use App\Services\HelperService;
  6. use Carbon\Carbon;
  7. class ParkingFeeService
  8. {
  9. private static function parkingFee()
  10. {
  11. return ParkingFee::get();
  12. }
  13. private static function parkingPrice()
  14. {
  15. return HelperService::addPrevValue(self::parkingFee()
  16. ->pluck('price')->toArray());
  17. }
  18. private static function parkingTime()
  19. {
  20. return HelperService::addPrevValue(self::parkingFee()
  21. ->pluck('time_period')->toArray());
  22. }
  23. public static function totalTimeParkingPerToday($entryTransactionId)
  24. {
  25. $entryTransaction = EntryTransaction::where('transaction_number',
  26. $entryTransactionId)->first();
  27. $vehicleEntryTime = $entryTransaction->getRawOriginal('created_at');
  28. return ceil(Carbon::parse($vehicleEntryTime)->floatDiffInRealHours(
  29. now()
  30. ));
  31. }
  32. public static function totalTimeParkingPerDay($entryTransactionId)
  33. {
  34. return self::totalTimeParkingPerToday($entryTransactionId) > 24
  35. ? ceil(self::totalTimeParkingPerToday($entryTransactionId) / 24)
  36. : 0;
  37. }
  38. public static function totalPriceParkingPerDay($entryTransactionId)
  39. {
  40. $parkingPrice = self::parkingPrice();
  41. return self::totalTimeParkingPerDay($entryTransactionId) *
  42. end($parkingPrice);
  43. }
  44. public static function totalPriceParkingPerToday($entryTransactionId)
  45. {
  46. $totalPriceParkingToday = 0;
  47. foreach (self::parkingTime() as $index => $time) {
  48. if ($time >= self::totalTimeParkingPerToday($entryTransactionId)) {
  49. $totalPriceParkingToday = self::parkingPrice()[$index];
  50. break;
  51. }
  52. }
  53. return $totalPriceParkingToday;
  54. }
  55. public static function totalTimeParking($entryTransactionId)
  56. {
  57. return self::totalTimeParkingPerDay($entryTransactionId)
  58. ? self::totalTimeParkingPerDay($entryTransactionId) . ' Hari'
  59. : self::totalTimeParkingPerToday($entryTransactionId) . ' Jam';
  60. }
  61. public static function totalPriceParking($entryTransactionId)
  62. {
  63. return self::totalTimeParkingPerDay($entryTransactionId)
  64. ? self::totalPriceParkingPerDay($entryTransactionId)
  65. : self::totalPriceParkingPerToday($entryTransactionId);
  66. }
  67. public static function totalPriceParkingString($entryTransactionId)
  68. {
  69. return HelperService::setRupiahFormat(self::totalPriceParking($entryTransactionId), true);
  70. }
  71. }