rentease/internal/view/booking_by_id.templ
2024-11-15 16:25:34 +01:00

151 lines
4.9 KiB
Text

package view
import (
"fmt"
"github.com/rjNemo/rentease/internal/view/layout"
)
templ BookingById(booking *BookingViewModel) {
@layout.BaseLayout() {
<section class="flex justify-between items-center p-4 bg-base-100">
<hgroup class="flex flex-col">
<h1 class="text-2xl font-bold text-primary">{ booking.Name }</h1>
<span class="text-sm text-base-content/60">{ booking.Id }</span>
</hgroup>
<div class="flex items-center gap-4">
<a class="btn btn-primary btn-sm" href={ booking.PdfUrl } target="_blank">Create PDF</a>
<a href="https://web.whatsapp.com/" target="_blank" rel="noreferrer noopener" class="btn btn-ghost btn-sm btn-square">
<img src="/static/icons/whatsapp.png" class="w-6 h-6"/>
</a>
<a href="https://dashboard.stripe.com/payments/new" target="_blank" rel="noreferrer noopener" class="btn btn-ghost btn-sm btn-square">
<img src="/static/icons/stripe.png" class="w-6 h-6"/>
</a>
if booking.Canceled {
<span class="badge badge-error">Canceled</span>
} else {
<button class="btn btn-outline btn-error btn-sm" hx-patch={ booking.CancelUrl } hx-swap="outerHTML">Cancel</button>
}
</div>
</section>
<section>
<form hx-put={ booking.Url }>
<fieldset>
<div class="grid">
<label for="name">
Customer name
<input type="text" id="name" name="name" value={ booking.Name } required autofocus/>
</label>
<label for="phone_number">
Phone number
<input type="tel" id="phone_number" name="phone_number" value={ booking.PhoneNumber }/>
</label>
<label for="customer_number">
Customer number
<input type="number" id="customer_number" name="customer_number" required value={ booking.CustomerNumber }/>
</label>
</div>
<div class="grid">
<label for="email">
Email
<input type="email" id="email" name="email" value={ booking.Email }/>
</label>
<label for="from">
From
<input type="date" id="from" name="from" value={ booking.From }/>
</label>
<label for="to">
To
<input type="date" id="to" name="to" value={ booking.To }/>
</label>
</div>
<div class="grid">
<label for="platform">
Platform
<select id="platform" name="platform">
<option value={ booking.Platform } selected>{ booking.Platform } </option>
for _, platform := range booking.Platforms {
<option value={ platform }>{ platform } </option>
}
</select>
</label>
<label for="platform_fees">
Fees
<input type="number" id="platform_fees" inputmode="decimal" step="0.01" name="platform_fees" value={ booking.PlatformFees }/>
</label>
<label for="external_id">
Platform ID
<input type="text" id="external_id" name="external_id" value={ booking.ExternalId }/>
</label>
</div>
</fieldset>
<button type="submit">Update</button>
</form>
</section>
<section>
<h3>Line Items </h3>
<div class="overflow-auto">
<table class="striped">
<thead>
<tr>
<th scope="col">Item</th>
<th scope="col">Quantity</th>
<th scope="col">Price (€)</th>
<th scope="col">Payment Method</th>
<th scope="col">Payment Status</th>
<th scope="col">Sub-total (€)</th>
<th scope="col"></th>
</tr>
</thead>
<tbody id="line-items">
for _, item := range booking.Items {
@LineItem(&item)
}
</tbody>
<tfoot>
<tr>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col"></th>
<th scope="col">{ booking.Total }</th>
<th scope="col"></th>
</tr>
</tfoot>
</table>
</div>
</section>
<details>
<summary role="button" class="secondary">Add line </summary>
<form hx-post={ fmt.Sprintf("%s/items", booking.Url) } hx-target="#line-items" hx-swap="afterend" hx-on::after-request=" if(event.detail.successful) this.reset()">
<article>
<label for="new-line-item">
Item
<select name="item" id="new-line-item">
for _, item := range booking.ItemList {
<option value={ item }>{ item } </option>
}
</select>
</label>
<label for="new-line-quantity">
Quantity
<input type="number" name="quantity" id="new-line-quantity" required/>
</label>
<label for="new-line-price">
Price
<input type="number" name="price" inputmode="decimal" step="0.01" id="new-line-price" required/>
</label>
<label for="new-line-method">
Payment Method
<select name="method" id="new-line-method">
for _, paymentMethod := range booking.PaymentMethods {
<option value={ paymentMethod }>{ paymentMethod } </option>
}
</select>
</label>
<button type="submit">Add</button>
</article>
</form>
</details>
}
}