Early bird field to db

This commit is contained in:
2024-01-16 20:00:40 +02:00
parent 57ae053855
commit 6afff866a2
10 changed files with 270 additions and 150 deletions

View File

@@ -39,6 +39,7 @@ defmodule Osuuspuutarha.Orders.Order do
field :pcode, :string field :pcode, :string
field :phone, :string field :phone, :string
field :split_invoice, :boolean, default: false field :split_invoice, :boolean, default: false
field :early_bird, :boolean, default: false
timestamps() timestamps()
end end
@@ -58,7 +59,8 @@ defmodule Osuuspuutarha.Orders.Order do
:email, :email,
:is_member, :is_member,
:split_invoice, :split_invoice,
:even_weeks :even_weeks,
:early_bird
]) ])
|> validate_required([ |> validate_required([
:order_type, :order_type,
@@ -71,7 +73,8 @@ defmodule Osuuspuutarha.Orders.Order do
:phone, :phone,
:email, :email,
:is_member, :is_member,
:split_invoice :split_invoice,
:early_bird
]) ])
end end
end end

View File

@@ -24,14 +24,23 @@
], ],
prompt: "Ei valintaa" prompt: "Ei valintaa"
%> %>
<%= if @action == :edit && @changeset.data.order_type == :everyother do %> <%= error_tag f, :order_type %>
<%= if @action == :edit && (@changeset.data.order_type == :everyother || @changeset.data.order_type == :everyother_pikku) do %>
<div class="checkbox-container"> <div class="checkbox-container">
<%= checkbox f, :even_weeks, class: "checkbox" %> <%= checkbox f, :even_weeks, class: "checkbox" %>
<%= label f, :even_weeks, "Parilliset viikot" %> <%= label f, :even_weeks, "Parilliset viikot" %>
<%= error_tag f, :even_weeks %> <%= error_tag f, :even_weeks %>
</div> </div>
<% end %> <% end %>
<%= error_tag f, :order_type %>
<%= if @action == :edit do %>
<div class="checkbox-container">
<%= checkbox f, :early_bird, class: "checkbox" %>
<%= label f, :early_bird, "Early Bird" %>
<%= error_tag f, :early_bird %>
</div>
<% end %>
<%= label f, :location, "Valitse jakopaikka" %> <%= label f, :location, "Valitse jakopaikka" %>
<%= select f, <%= select f,

View File

@@ -6,7 +6,7 @@ defmodule OsuuspuutarhaWeb.OrderLive.Index do
@impl true @impl true
def mount(_params, _session, socket) do def mount(_params, _session, socket) do
{:ok, assign(socket, :orders, Orders.list_orders())} {:ok, assign(socket, :orders, Orders.get_sorted_by(:desc, :inserted_at))}
end end
@impl true @impl true

View File

@@ -84,6 +84,13 @@
<% end %> <% end %>
</th> </th>
<th class="table_header"> <th class="table_header">
<%= cond do %>
<% @live_action==:sorted_desc && @column==:early_bird -> %> <%= link "Early Bird? ↓" , to: Routes.order_index_path(@socket, :sorted_asc, :early_bird) %>
<% @live_action==:sorted_asc && @column==:early_bird -> %> <%= link "Early Bird? ↑" , to: Routes.order_index_path(@socket, :sorted_desc, :early_bird) %>
<% true -> %> <%= link "Early Bird?" , to: Routes.order_index_path(@socket, :sorted_asc, :early_bird) %>
<% end %>
</th>
<th class="table_header">
<%= cond do %> <%= cond do %>
<% @live_action == :sorted_desc && @column == :inserted_at -> %> <%= link "Lisätty ↓", to: Routes.order_index_path(@socket, :sorted_asc, :inserted_at) %> <% @live_action == :sorted_desc && @column == :inserted_at -> %> <%= link "Lisätty ↓", to: Routes.order_index_path(@socket, :sorted_asc, :inserted_at) %>
<% @live_action == :sorted_asc && @column == :inserted_at -> %> <%= link "Lisätty ↑", to: Routes.order_index_path(@socket, :sorted_desc, :inserted_at) %> <% @live_action == :sorted_asc && @column == :inserted_at -> %> <%= link "Lisätty ↑", to: Routes.order_index_path(@socket, :sorted_desc, :inserted_at) %>
@@ -113,6 +120,7 @@
<td><%= Osuuspuutarha.Orders.Parser.parse_boolean(order.is_member) %></td> <td><%= Osuuspuutarha.Orders.Parser.parse_boolean(order.is_member) %></td>
<td><%= Osuuspuutarha.Orders.Parser.parse_boolean(order.split_invoice) %></td> <td><%= Osuuspuutarha.Orders.Parser.parse_boolean(order.split_invoice) %></td>
<td><%= Osuuspuutarha.Orders.Parser.parse_boolean(order.even_weeks) %></td> <td><%= Osuuspuutarha.Orders.Parser.parse_boolean(order.even_weeks) %></td>
<td><%= Osuuspuutarha.Orders.Parser.parse_boolean(order.early_bird) %></td>
<td><%= Osuuspuutarha.Orders.Parser.parse_date(order.inserted_at) %></td> <td><%= Osuuspuutarha.Orders.Parser.parse_date(order.inserted_at) %></td>
<td><%= Osuuspuutarha.Orders.Parser.parse_date(order.updated_at) %></td> <td><%= Osuuspuutarha.Orders.Parser.parse_date(order.updated_at) %></td>

View File

@@ -2,92 +2,94 @@
<%= if @live_action in [:edit] do %> <%= if @live_action in [:edit] do %>
<.modal return_to={Routes.order_show_path(@socket, :show, @order)}> <.modal return_to={Routes.order_show_path(@socket, :show, @order)}>
<.live_component <.live_component module={OsuuspuutarhaWeb.OrderLive.FormComponent} id={@order.id} title={@page_title}
module={OsuuspuutarhaWeb.OrderLive.FormComponent} action={@live_action} submit_text="Tallenna" has_privacy_consent={false} order={@order}
id={@order.id} return_to={Routes.order_show_path(@socket, :show, @order)} />
title={@page_title}
action={@live_action}
submit_text="Tallenna"
has_privacy_consent={false}
order={@order}
return_to={Routes.order_show_path(@socket, :show, @order)}
/>
</.modal> </.modal>
<% end %> <% end %>
<ul> <ul>
<li> <li>
<strong>Tilausmuoto:</strong> <strong>Tilausmuoto:</strong>
<%= @order.order_type %> <%= @order.order_type %>
</li> </li>
<li> <li>
<strong>Jakopaikka:</strong> <strong>Jakopaikka:</strong>
<%= @order.location %> <%= @order.location %>
</li> </li>
<li> <li>
<strong>Etunimi:</strong> <strong>Etunimi:</strong>
<%= @order.fname %> <%= @order.fname %>
</li> </li>
<li> <li>
<strong>Sukunimi:</strong> <strong>Sukunimi:</strong>
<%= @order.lname %> <%= @order.lname %>
</li> </li>
<li> <li>
<strong>Osoite:</strong> <strong>Osoite:</strong>
<%= @order.address %> <%= @order.address %>
</li> </li>
<li> <li>
<strong>Postinumero:</strong> <strong>Postinumero:</strong>
<%= @order.pcode %> <%= @order.pcode %>
</li> </li>
<li> <li>
<strong>Postitoimipaikka:</strong> <strong>Postitoimipaikka:</strong>
<%= @order.city %> <%= @order.city %>
</li> </li>
<li> <li>
<strong>Puhelinnumero:</strong> <strong>Puhelinnumero:</strong>
<%= @order.phone %> <%= @order.phone %>
</li> </li>
<li> <li>
<strong>Sähköpostiosoite:</strong> <strong>Sähköpostiosoite:</strong>
<%= @order.email %> <%= @order.email %>
</li> </li>
<li> <li>
<strong>Jäsen?</strong> <strong>Jäsen?</strong>
<%= @order.is_member %> <%= @order.is_member %>
</li> </li>
<li> <li>
<strong>Kahdella laskulla:</strong> <strong>Kahdella laskulla:</strong>
<%= @order.split_invoice %> <%= @order.split_invoice %>
</li> </li>
<li> <li>
<strong>Parilliset viikot:</strong> <strong>Parilliset viikot:</strong>
<%= @order.even_weeks %> <%= @order.even_weeks %>
</li> </li>
<li> <li>
<strong>Lisätty:</strong> <strong>Early bird:</strong>
<%= @order.inserted_at.day %>.<%= @order.inserted_at.month %>.<%= @order.inserted_at.year %> <%= @order.early_bird %>
</li> </li>
<li> <li>
<strong>Viimeisin muutos:</strong> <strong>Lisätty:</strong>
<%= @order.updated_at.day %>.<%= @order.updated_at.month %>.<%= @order.updated_at.year %> <%= @order.inserted_at.day %>.<%= @order.inserted_at.month %>.<%= @order.inserted_at.year %>
</li> </li>
</ul> <li>
<strong>Viimeisin muutos:</strong>
<%= @order.updated_at.day %>.<%= @order.updated_at.month %>.<%= @order.updated_at.year %>
</li>
<span><%= live_patch "Muokkaa", to: Routes.order_show_path(@socket, :edit, @order), class: "button" %></span> | </ul>
<span><%= live_redirect "Takaisin", to: Routes.order_index_path(@socket, :index) %></span>
<span>
<%= live_patch "Muokkaa" , to: Routes.order_show_path(@socket, :edit, @order), class: "button" %>
</span> |
<span>
<%= live_redirect "Takaisin" , to: Routes.order_index_path(@socket, :index) %>
</span>

View File

@@ -47,6 +47,7 @@ defmodule OsuuspuutarhaWeb.Exports.OrderView do
Parser.parse_location(order.location), Parser.parse_location(order.location),
Parser.parse_boolean(order.even_weeks), Parser.parse_boolean(order.even_weeks),
Parser.parse_boolean(order.split_invoice), Parser.parse_boolean(order.split_invoice),
Parser.parse_boolean(order.early_bird),
Parser.parse_date(order.inserted_at), Parser.parse_date(order.inserted_at),
Parser.parse_date(order.updated_at) Parser.parse_date(order.updated_at)
] ]

View File

@@ -0,0 +1,9 @@
defmodule Osuuspuutarha.Repo.Migrations.AddEarlyBird do
use Ecto.Migration
def change do
alter table(:orders) do
add :early_bird, :boolean, default: false, null: false
end
end
end

View File

@@ -8,7 +8,21 @@ defmodule Osuuspuutarha.OrdersTest do
import Osuuspuutarha.OrdersFixtures import Osuuspuutarha.OrdersFixtures
@invalid_attrs %{address: nil, city: nil, email: nil, even_weeks: nil, fname: nil, is_member: nil, lname: nil, location: nil, order_type: nil, pcode: nil, phone: nil, split_invoice: nil} @invalid_attrs %{
address: nil,
city: nil,
email: nil,
even_weeks: nil,
fname: nil,
is_member: nil,
lname: nil,
location: nil,
order_type: nil,
pcode: nil,
phone: nil,
split_invoice: nil,
early_bird: nil
}
test "list_orders/0 returns all orders" do test "list_orders/0 returns all orders" do
order = order_fixture() order = order_fixture()
@@ -21,7 +35,21 @@ defmodule Osuuspuutarha.OrdersTest do
end end
test "create_order/1 with valid data creates a order" do test "create_order/1 with valid data creates a order" do
valid_attrs = %{address: "some address", city: "some city", email: "some email", even_weeks: true, fname: "some fname", is_member: true, lname: "some lname", location: :koroinen, order_type: :full, pcode: "some pcode", phone: "some phone", split_invoice: true} valid_attrs = %{
address: "some address",
city: "some city",
email: "some email",
even_weeks: true,
fname: "some fname",
is_member: true,
lname: "some lname",
location: :koroinen,
order_type: :full,
pcode: "some pcode",
phone: "some phone",
split_invoice: true,
early_bird: true
}
assert {:ok, %Order{} = order} = Orders.create_order(valid_attrs) assert {:ok, %Order{} = order} = Orders.create_order(valid_attrs)
assert order.address == "some address" assert order.address == "some address"
@@ -36,6 +64,7 @@ defmodule Osuuspuutarha.OrdersTest do
assert order.pcode == "some pcode" assert order.pcode == "some pcode"
assert order.phone == "some phone" assert order.phone == "some phone"
assert order.split_invoice == true assert order.split_invoice == true
assert order.early_bird == true
end end
test "create_order/1 with invalid data returns error changeset" do test "create_order/1 with invalid data returns error changeset" do
@@ -44,7 +73,22 @@ defmodule Osuuspuutarha.OrdersTest do
test "update_order/2 with valid data updates the order" do test "update_order/2 with valid data updates the order" do
order = order_fixture() order = order_fixture()
update_attrs = %{address: "some updated address", city: "some updated city", email: "some updated email", even_weeks: false, fname: "some updated fname", is_member: false, lname: "some updated lname", location: :ocean, order_type: :everyother, pcode: "some updated pcode", phone: "some updated phone", split_invoice: false}
update_attrs = %{
address: "some updated address",
city: "some updated city",
email: "some updated email",
even_weeks: false,
fname: "some updated fname",
is_member: false,
lname: "some updated lname",
location: :ocean,
order_type: :everyother,
pcode: "some updated pcode",
phone: "some updated phone",
split_invoice: false,
early_bird: false
}
assert {:ok, %Order{} = order} = Orders.update_order(order, update_attrs) assert {:ok, %Order{} = order} = Orders.update_order(order, update_attrs)
assert order.address == "some updated address" assert order.address == "some updated address"
@@ -59,6 +103,7 @@ defmodule Osuuspuutarha.OrdersTest do
assert order.pcode == "some updated pcode" assert order.pcode == "some updated pcode"
assert order.phone == "some updated phone" assert order.phone == "some updated phone"
assert order.split_invoice == false assert order.split_invoice == false
assert order.early_bird == false
end end
test "update_order/2 with invalid data returns error changeset" do test "update_order/2 with invalid data returns error changeset" do

View File

@@ -4,9 +4,51 @@ defmodule OsuuspuutarhaWeb.OrderLiveTest do
import Phoenix.LiveViewTest import Phoenix.LiveViewTest
import Osuuspuutarha.OrdersFixtures import Osuuspuutarha.OrdersFixtures
@create_attrs %{address: "some address", city: "some city", email: "some email", even_weeks: true, fname: "some fname", is_member: true, lname: "some lname", location: :koroinen, order_type: :full, pcode: "some pcode", phone: "some phone", split_invoice: true} @create_attrs %{
@update_attrs %{address: "some updated address", city: "some updated city", email: "some updated email", even_weeks: false, fname: "some updated fname", is_member: false, lname: "some updated lname", location: :ocean, order_type: :everyother, pcode: "some updated pcode", phone: "some updated phone", split_invoice: false} address: "some address",
@invalid_attrs %{address: nil, city: nil, email: nil, even_weeks: false, fname: nil, is_member: false, lname: nil, location: nil, order_type: nil, pcode: nil, phone: nil, split_invoice: false} city: "some city",
email: "some email",
even_weeks: true,
fname: "some fname",
is_member: true,
lname: "some lname",
location: :koroinen,
order_type: :full,
pcode: "some pcode",
phone: "some phone",
split_invoice: true,
early_bird: true
}
@update_attrs %{
address: "some updated address",
city: "some updated city",
email: "some updated email",
even_weeks: false,
fname: "some updated fname",
is_member: false,
lname: "some updated lname",
location: :ocean,
order_type: :everyother,
pcode: "some updated pcode",
phone: "some updated phone",
split_invoice: false,
early_bird: false
}
@invalid_attrs %{
address: nil,
city: nil,
email: nil,
even_weeks: false,
fname: nil,
is_member: false,
lname: nil,
location: nil,
order_type: nil,
pcode: nil,
phone: nil,
split_invoice: false,
early_bird: false
}
defp create_order(_) do defp create_order(_) do
order = order_fixture() order = order_fixture()

View File

@@ -22,7 +22,8 @@ defmodule Osuuspuutarha.OrdersFixtures do
order_type: :full, order_type: :full,
pcode: "some pcode", pcode: "some pcode",
phone: "some phone", phone: "some phone",
split_invoice: true split_invoice: true,
early_bird: true
}) })
|> Osuuspuutarha.Orders.create_order() |> Osuuspuutarha.Orders.create_order()