summaryrefslogtreecommitdiff
path: root/app/views/rafts/editor.html.erb
diff options
context:
space:
mode:
Diffstat (limited to 'app/views/rafts/editor.html.erb')
-rw-r--r--app/views/rafts/editor.html.erb108
1 files changed, 108 insertions, 0 deletions
diff --git a/app/views/rafts/editor.html.erb b/app/views/rafts/editor.html.erb
new file mode 100644
index 0000000..cde56d8
--- /dev/null
+++ b/app/views/rafts/editor.html.erb
@@ -0,0 +1,108 @@
+<div class="d-flex justify-content-between align-items-center mb-3">
+ <h1 class="display-1">Rafts editor</h1>
+ <%= link_to "Back to dashboard", root_path, class: "btn btn-outline-secondary" %>
+</div>
+
+<!-- Bulk assign all rafts -->
+<div class="card">
+ <div class="card-header">Assign ALL rafts</div>
+ <div class="card-body">
+ <%= form_with url: assign_all_rafts_path, method: :patch, class: "row g-2", data: { turbo: false } do %>
+ <div class="col-12 col-md-6">
+ <select class="form-select" name="crop_id">
+ <option value="">— Unassigned (clear) —</option>
+ <% @crops.each do |crop| %>
+ <option value="<%= crop.id %>"><%= crop.name %></option>
+ <% end %>
+ </select>
+ </div>
+ <div class="col-12 col-md-auto">
+ <button class="btn btn-primary">Apply to all</button>
+ </div>
+ <% end %>
+ </div>
+</div>
+
+<div class="table-responsive">
+ <table class="table table-sm table-striped text-center align-middle my-3">
+ <thead>
+ <tr>
+ <th class="text-start">Bed</th>
+ <% max_cols = @beds.map { |b| b.rafts.count }.max %>
+ <% (1..max_cols).each do |i| %>
+ <th>R<%= i %></th>
+ <% end %>
+ </tr>
+ </thead>
+ <tbody>
+ <% @beds.each do |bed| %>
+ <tr>
+ <th><%= bed.location %></th>
+ <% bed.rafts.order(:location).each do |raft| %>
+ <td>
+ <% if raft.crop %>
+ <%= raft.crop.name %>
+ <% else %>
+ —
+ <% end %>
+ </td>
+ <% end %>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+</div>
+
+<!-- Per-bed tables -->
+<% @beds.each do |bed| %>
+ <div class="card mb-3" id="bed-<%= bed.id %>">
+ <div class="card-header d-flex flex-wrap gap-2 align-items-center">
+ <span class="me-auto">Bed <strong>#<%= bed.location %></strong></span>
+ <%= form_with url: assign_bed_rafts_path, method: :patch, class: "d-flex gap-2 align-items-center", data: { turbo: false } do %>
+ <input type="hidden" name="bed_id" value="<%= bed.id %>">
+ <select class="form-select" name="crop_id">
+ <option value="">— Unassigned (clear) —</option>
+ <% @crops.each do |crop| %>
+ <option value="<%= crop.id %>"><%= crop.name %></option>
+ <% end %>
+ </select>
+ <button class="btn btn-primary">Apply</button>
+ <% end %>
+ </div>
+ <div class="card-body p-0">
+ <div class="table-responsive">
+ <table class="table table-sm mb-0 align-middle">
+ <thead class="table-light">
+ <tr>
+ <th class="text-nowrap text-center">Raft</th>
+ <th>Crop</th>
+ <th class="text-end">Actions</th>
+ </tr>
+ </thead>
+ <tbody>
+ <% bed.rafts.order(:location).each do |raft| %>
+ <tr>
+ <td class="text-center"><strong><%= raft.location %></strong></td>
+ <td style="max-width: 280px;">
+ <%= form_with url: assign_one_raft_path(raft), method: :patch, class: "d-flex gap-2", data: { turbo: false } do %>
+ <select class="form-select" name="crop_id">
+ <option value="">— Unassigned (clear) —</option>
+ <% @crops.each do |crop| %>
+ <option value="<%= crop.id %>" <%= "selected" if raft.crop_id == crop.id %>><%= crop.name %></option>
+ <% end %>
+ </select>
+ <button class="btn btn-outline-primary">Save</button>
+ <% end %>
+ </td>
+ <td class="text-end">
+ <%= button_to "Clear", assign_one_raft_path(raft, crop_id: ""), method: :patch,
+ form: { data: { turbo: false } }, class: "btn btn-outline-secondary btn-sm" %>
+ </td>
+ </tr>
+ <% end %>
+ </tbody>
+ </table>
+ </div>
+ </div>
+ </div>
+<% end %>
Copyright 2019--2025 Marius PETER