ParkingFeeService.php 2.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  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 parkingPrice()
  10. {
  11. return HelperService::addPrevValue(ParkingFee::get()
  12. ->pluck('price')->toArray());
  13. }
  14. private static function parkingTime()
  15. {
  16. return HelperService::addPrevValue(ParkingFee::get()
  17. ->pluck('time_period')->toArray());
  18. }
  19. public static function totalTimeParkingPerToday($entryTransactionId)
  20. {
  21. $entryTransaction = EntryTransaction::where('transaction_number',
  22. $entryTransactionId)->first();
  23. $vehicleEntryTime = $entryTransaction->getRawOriginal('created_at');
  24. return ceil(Carbon::parse($vehicleEntryTime)->floatDiffInRealHours(
  25. now()
  26. ));
  27. }
  28. public static function totalTimeParkingPerDay($entryTransactionId)
  29. {
  30. return self::totalTimeParkingPerToday($entryTransactionId) > 24
  31. ? ceil(self::totalTimeParkingPerToday($entryTransactionId) / 24)
  32. : 0;
  33. }
  34. public static function totalPriceParkingPerDay($entryTransactionId)
  35. {
  36. $parkingPrice = self::parkingPrice();
  37. return self::totalTimeParkingPerDay($entryTransactionId) *
  38. end($parkingPrice);
  39. }
  40. public static function totalPriceParkingPerToday($entryTransactionId)
  41. {
  42. $totalPriceParkingToday = 0;
  43. foreach (self::parkingTime() as $index => $time) {
  44. if ($time >= self::totalTimeParkingPerToday($entryTransactionId)) {
  45. $totalPriceParkingToday = self::parkingPrice()[$index];
  46. break;
  47. }
  48. }
  49. return $totalPriceParkingToday;
  50. }
  51. public static function totalTimeParking($entryTransactionId)
  52. {
  53. return self::totalTimeParkingPerDay($entryTransactionId)
  54. ? self::totalTimeParkingPerDay($entryTransactionId) . ' Hari'
  55. : self::totalTimeParkingPerToday($entryTransactionId) . ' Jam';
  56. }
  57. public static function totalTimeParkingHuman($entryTransactionId)
  58. {
  59. $entryTransaction = EntryTransaction::where('transaction_number',
  60. $entryTransactionId)->first();
  61. return Carbon::parse(
  62. now()
  63. )->diffForHumans(
  64. $entryTransaction->getRawOriginal('created_at')
  65. );
  66. }
  67. public static function totalPriceParking($entryTransactionId)
  68. {
  69. return self::totalTimeParkingPerDay($entryTransactionId)
  70. ? self::totalPriceParkingPerDay($entryTransactionId)
  71. : self::totalPriceParkingPerToday($entryTransactionId);
  72. }
  73. public static function totalPriceParkingString($entryTransactionId)
  74. {
  75. return HelperService::setRupiahFormat(
  76. self::totalPriceParking($entryTransactionId),
  77. true
  78. );
  79. }
  80. }