Skip to content

Commit

Permalink
Cancel booking added to show booking info
Browse files Browse the repository at this point in the history
  • Loading branch information
xGrz committed Jul 1, 2024
1 parent 565dfda commit 694b725
Show file tree
Hide file tree
Showing 9 changed files with 219 additions and 234 deletions.
38 changes: 0 additions & 38 deletions resources/views/bookings/bookingDateForm.blade.php

This file was deleted.

62 changes: 60 additions & 2 deletions resources/views/bookings/bookings-create.blade.php
Original file line number Diff line number Diff line change
@@ -1,3 +1,61 @@
<div>
asda
@php use Illuminate\Support\Carbon; @endphp
<div class="grid gap-2">
<x-p-paper>
<x-slot:title>Select shipments</x-slot:title>
<x-p-table>
<x-p-thead>
<x-p-tr>
<x-p-th>
<x-p-checkbox wire:model.live="selectedAll"/>
</x-p-th>
<x-p-th left>Number</x-p-th>
<x-p-th left>Shipment date</x-p-th>
<x-p-th left>Shipper</x-p-th>
<x-p-th left>Receiver</x-p-th>
<x-p-th left>Type</x-p-th>
<x-p-th right>Items</x-p-th>
</x-p-tr>
</x-p-thead>
<x-p-tbody>
@foreach($shipments as $shipment)
<x-p-tr>
<x-p-td>
<x-p-checkbox wire:model.live="shipmentList" value="{{$shipment->number}}"/>
</x-p-td>
<x-p-td>{{$shipment->number}}</x-p-td>
<x-p-td>{{$shipment->shipment_date->format('d-m-Y')}}</x-p-td>
<x-p-td>{{$shipment->shipper_name}}</x-p-td>
<x-p-td>{{$shipment->receiver_name}}</x-p-td>
<x-p-td><x-dhl-ui::shipment-type :shipment="$shipment" /></x-p-td>
<x-p-td right>
{{$shipment->items->count()}}
</x-p-td>
</x-p-tr>
@endforeach
</x-p-tbody>
</x-p-table>
</x-p-paper>
@if($postalCode)
<x-p-paper>
<x-slot:title>Courier booking details</x-slot:title>
<div class="grid grid-cols-2 sm:grid-cols-4 md:grid-cols-5 gap-2 max-w-6xl mx-auto">
<div class="col-span-2 md:col-span-3">
@include('dhl-ui::bookings.form-components.pickup-date')
</div>

@include('dhl-ui::bookings.form-components.pickup-from')
@include('dhl-ui::bookings.form-components.pickup-to')

<div class="col-span-full">
@include('dhl-ui::bookings.form-components.pickup-info')
</div>

</div>
<div class="text-center col-span-4 mt-4 mb-1">
<x-p-button size="large" wire:click="book" disabled="{{!$postalCode}}">Book courier</x-p-button>
</div>
</x-p-paper>

@endif
<div wire:loading>Loading...</div>
</div>
2 changes: 1 addition & 1 deletion resources/views/bookings/bookings-listing.blade.php
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<div>
<x-p-pagination livewire :source="$bookings"/>
<x-p-paper class="bg-slate-800">
<x-slot:title>Item list</x-slot:title>
<x-slot:title>Bookings listing</x-slot:title>
<x-slot:actions>
<x-p-button color="success" href="{{ route('dhl24.bookings.create') }}">New courier booking</x-p-button>
</x-slot:actions>
Expand Down
7 changes: 6 additions & 1 deletion resources/views/bookings/bookings-show.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,11 @@
</x-p-table>
</x-p-paper>
<div class="mt-4 text-right">
<x-p-button color="danger">Cancel booking</x-p-button>
<x-p-button
color="danger"
wire:click="$dispatch('openModal', { component: 'cancel-booking-modal', arguments: { booking: {{$booking->id}} } })"
>
Cancel booking
</x-p-button>
</div>
</div>
41 changes: 0 additions & 41 deletions resources/views/bookings/create-mass-booking.blade.php

This file was deleted.

This file was deleted.

2 changes: 2 additions & 0 deletions src/DHLUIServiceProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

use Illuminate\Support\ServiceProvider;
use Livewire\Livewire;
use xGrz\Dhl24UI\Livewire\Bookings\DHLBookingsCreate;
use xGrz\Dhl24UI\Livewire\Bookings\DHLBookingsListing;
use xGrz\Dhl24UI\Livewire\Bookings\DHLBookingsShow;
use xGrz\Dhl24UI\Livewire\Bookings\DHLCancelBookingModal;
Expand Down Expand Up @@ -69,6 +70,7 @@ public function boot(): void

Livewire::component('bookings-listing', DHLBookingsListing::class);
Livewire::component('bookings-show', DHLBookingsShow::class);
Livewire::component('bookings-create', DHLBookingsCreate::class);
Livewire::component('cancel-booking-modal', DHLCancelBookingModal::class);


Expand Down
151 changes: 150 additions & 1 deletion src/Livewire/Bookings/DHLBookingsCreate.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,162 @@

namespace xGrz\Dhl24UI\Livewire\Bookings;

use Illuminate\Database\Eloquent\Collection;
use Illuminate\Support\Carbon;
use Illuminate\View\View;
use xGrz\Dhl24\Exceptions\DHL24Exception;
use xGrz\Dhl24\Facades\DHL24;
use xGrz\Dhl24\Models\DHLShipment;
use xGrz\Dhl24UI\Livewire\BaseComponent;

class DHLBookingsCreate extends BaseComponent
{
public Collection $shipments;
public string|null $postalCode = null;
public array $shipmentList = [];
public bool $selectedAll = false;
public array $dateOptions = [];
public array $pickupFromOptions = [];
public array $pickupToOptions = [];
public string $pickupDate = '';
public string $pickupFrom = '';
public string $pickupTo = '';
public string $info = '';


public function render(): View
{
return view('livewire.d-h-l-bookings-create');
self::loadShipments();
self::findPostalCode();
self::getDateOptions();
$this->pickupFromOptions = self::refreshPickupFromOptions();
$this->pickupToOptions = self::refreshPickupToOptions();

return view('dhl-ui::bookings.bookings-create')
->extends('p::app')
->section('content');
}

public function book(): void
{
$from = Carbon::parse($this->pickupDate . ' ' . $this->pickupFrom);
$to = Carbon::parse($this->pickupDate . ' ' . $this->pickupTo);
try {
DHL24::booking()->book($from, $to, self::getSelectedShipments(), $this->info);
session()->flash('success', 'Courier successfully booked for ' . $from->format('d-m-Y') . ' between ' . $from->format('H:i') . '-' . $to->format('H:i'));
$this->redirectRoute('dhl24.bookings.index');
} catch (DHL24Exception $e) {
$this->dispatch(
'openModal',
component: 'error-modal',
arguments: [
'title' => 'Create booking failed',
'message' => $e->getMessage(),
]);
}
}

public function loadShipments(): void
{
$shipmentDate = count($this->shipmentList)
? DHLShipment::select('shipment_date')->where('number', collect($this->shipmentList)->first())?->first()?->shipment_date
: null;

$this->shipments = DHLShipment::whereDoesntHave('courier_booking')
->with(['items', 'tracking'])
->when($shipmentDate, fn($query) => $query->whereDate('shipment_date', $shipmentDate))
->latest()
->limit(50)
->get();
}

public function updatedShipmentList(): void
{
$this->selectedAll = (count($this->shipmentList) === $this->shipments->count());
}

public function updatedSelectedAll(): void
{
if (!$this->selectedAll) {
$this->shipmentList = [];
return;
}
$this->shipmentList = $this->shipments->map(fn($shipment) => $shipment->number)->toArray();
}

public function updatedPickupDate(): void
{
$this->pickupFrom = '';
$this->pickupTo = '';
}

private function findPostalCode(): void
{
if (!count($this->shipmentList)) {
self::resetBooking();
return;
}

$this->postalCode = $this->shipments
->filter(fn($shipment) => $shipment->number === (int)$this->shipmentList[0])
?->first()
->shipper_postal_code;
}

private function resetBooking(): void
{
$this->postalCode = null;
$this->pickupFromOptions = [];
$this->pickupToOptions = [];
$this->pickupFrom = '';
$this->pickupTo = '';
}

private function getDateOptions(): void
{
if (!$this->postalCode) {
self::resetBooking();
return;
}
$this->dateOptions = DHL24::booking()->options(self::getSelectedShipments())->availableDates();
$this->pickupDate = $this->dateOptions[0];
}

private function getSelectedShipments()
{
return $this->shipments->filter(function ($shipment) {
return in_array($shipment->number, $this->shipmentList);
});

}

private function refreshPickupFromOptions(): array
{
if (!$this->postalCode) return [];
$pickupFromOptions = DHL24::booking()
->options(self::getSelectedShipments())
->pickupStartingOptions(Carbon::parse($this->pickupDate));

if (empty($this->pickupFrom)) $this->pickupFrom = collect($pickupFromOptions)->first();
if (!in_array($this->pickupFrom, $pickupFromOptions)) {
$this->pickupFrom = collect($pickupFromOptions)->first();
}
return $pickupFromOptions;
}

private function refreshPickupToOptions(): array
{
if (!$this->postalCode) return [];
$pickupToOptions = DHL24::booking()
->options(self::getSelectedShipments())
->pickupEndingOptions(Carbon::parse($this->pickupDate . ' ' . $this->pickupFrom));

if (empty($this->pickupTo)) $this->pickupTo = end($pickupToOptions);
if (!in_array($this->pickupTo, $pickupToOptions)) {
$this->pickupTo = end($pickupToOptions);
}
return $pickupToOptions;
}


}
Loading

0 comments on commit 694b725

Please sign in to comment.