Order information exporting in Excel-format
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -32,3 +32,6 @@ osuuspuutarha-*.tar
|
|||||||
npm-debug.log
|
npm-debug.log
|
||||||
/assets/node_modules/
|
/assets/node_modules/
|
||||||
|
|
||||||
|
# VS Code
|
||||||
|
settings.json
|
||||||
|
|
||||||
|
|||||||
74
lib/osuuspuutarha/orders/parser.ex
Normal file
74
lib/osuuspuutarha/orders/parser.ex
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
defmodule Osuuspuutarha.Orders.Parser do
|
||||||
|
def parse_boolean(flag) do
|
||||||
|
if flag == true do
|
||||||
|
"Kyllä"
|
||||||
|
else
|
||||||
|
"Ei"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
@spec parse_order_type(:community | :elo | :everyother | :full) :: <<_::64, _::_*8>>
|
||||||
|
def parse_order_type(:full) do
|
||||||
|
"Joka viikko"
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_order_type(:everyother) do
|
||||||
|
"Joka toinen viikko"
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_order_type(:elo) do
|
||||||
|
"Elotilaus"
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_order_type(:community) do
|
||||||
|
"Osuuskuntatoiminta"
|
||||||
|
end
|
||||||
|
|
||||||
|
@spec parse_location(
|
||||||
|
:askainen
|
||||||
|
| :kirjakahvila
|
||||||
|
| :koroinen
|
||||||
|
| :livonsaari
|
||||||
|
| :naantali
|
||||||
|
| :ocean
|
||||||
|
| :raisio
|
||||||
|
| :viherlassila
|
||||||
|
) :: <<_::48, _::_*16>>
|
||||||
|
def parse_location(:koroinen) do
|
||||||
|
"Koroinen"
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_location(:ocean) do
|
||||||
|
"Ocean Spirit"
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_location(:raisio) do
|
||||||
|
"Raisio"
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_location(:naantali) do
|
||||||
|
"Naantali"
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_location(:viherlassila) do
|
||||||
|
"Viherlassila"
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_location(:kirjakahvila) do
|
||||||
|
"Kirjakahvila"
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_location(:askainen) do
|
||||||
|
"Askainen"
|
||||||
|
end
|
||||||
|
|
||||||
|
def parse_location(:livonsaari) do
|
||||||
|
"Livonsaari"
|
||||||
|
end
|
||||||
|
|
||||||
|
@spec parse_date(atom | %{:day => any, :month => any, :year => any, optional(any) => any}) ::
|
||||||
|
<<_::16, _::_*8>>
|
||||||
|
def parse_date(date) do
|
||||||
|
"#{date.day}.#{date.month}.#{date.year}"
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
defmodule OsuuspuutarhaWeb.Exports.OrderController do
|
||||||
|
use OsuuspuutarhaWeb, :controller
|
||||||
|
|
||||||
|
alias Osuuspuutarha.Orders
|
||||||
|
|
||||||
|
def index(conn, _params) do
|
||||||
|
orders = Orders.list_orders()
|
||||||
|
|
||||||
|
conn
|
||||||
|
|> put_resp_content_type("text/xlsx")
|
||||||
|
|> put_resp_header("content-disposition", "attachment; filename=\"tilaukset.xlxs\"")
|
||||||
|
|> render("tilaukset.xlsx", %{orders: orders})
|
||||||
|
end
|
||||||
|
end
|
||||||
@@ -15,6 +15,8 @@
|
|||||||
</.modal>
|
</.modal>
|
||||||
<% end %>
|
<% end %>
|
||||||
|
|
||||||
|
<%= link "Lataa Excel-taulukkona", to: Routes.exports_order_path(@socket, :index), class: "btn btn-default" %>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<thead>
|
<thead>
|
||||||
<tr>
|
<tr>
|
||||||
|
|||||||
@@ -45,6 +45,11 @@ defmodule OsuuspuutarhaWeb.Router do
|
|||||||
live "/tilaukset/:id/nayta/muokkaa", OrderLive.Show, :edit
|
live "/tilaukset/:id/nayta/muokkaa", OrderLive.Show, :edit
|
||||||
end
|
end
|
||||||
|
|
||||||
|
scope "/lataukset", as: :exports, alias: OsuuspuutarhaWeb.Exports do
|
||||||
|
pipe_through :admin_browser
|
||||||
|
resources "/tilaukset", OrderController, only: [:index]
|
||||||
|
end
|
||||||
|
|
||||||
# Other scopes may use custom stacks.
|
# Other scopes may use custom stacks.
|
||||||
# scope "/api", OsuuspuutarhaWeb do
|
# scope "/api", OsuuspuutarhaWeb do
|
||||||
# pipe_through :api
|
# pipe_through :api
|
||||||
|
|||||||
54
lib/osuuspuutarha_web/views/exports/order_view.ex
Normal file
54
lib/osuuspuutarha_web/views/exports/order_view.ex
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
defmodule OsuuspuutarhaWeb.Exports.OrderView do
|
||||||
|
use OsuuspuutarhaWeb, :view
|
||||||
|
|
||||||
|
alias Elixlsx.{Workbook, Sheet}
|
||||||
|
alias Osuuspuutarha.Orders.Parser
|
||||||
|
|
||||||
|
@header [
|
||||||
|
"Etunimi",
|
||||||
|
"Sukunimi",
|
||||||
|
"Katuosoite",
|
||||||
|
"Paikkakunta",
|
||||||
|
"Postinumero",
|
||||||
|
"Sähköposti",
|
||||||
|
"Puhelin",
|
||||||
|
"Jäsen",
|
||||||
|
"Tilaustyyppi",
|
||||||
|
"Jakopaikka",
|
||||||
|
"Parilliset viikot",
|
||||||
|
"Jaettu lasku",
|
||||||
|
"Lisätty",
|
||||||
|
"Päivitetty"
|
||||||
|
]
|
||||||
|
|
||||||
|
def render("tilaukset.xlsx", %{orders: orders}) do
|
||||||
|
report_generator(orders)
|
||||||
|
|> Elixlsx.write_to_memory("tilaukset.xlsx")
|
||||||
|
|> elem(1)
|
||||||
|
|> elem(1)
|
||||||
|
end
|
||||||
|
|
||||||
|
def report_generator(orders) do
|
||||||
|
rows = orders |> Enum.map(&row(&1))
|
||||||
|
%Workbook{sheets: [%Sheet{name: "Orders", rows: [@header] ++ rows}]}
|
||||||
|
end
|
||||||
|
|
||||||
|
def row(order) do
|
||||||
|
[
|
||||||
|
order.fname,
|
||||||
|
order.lname,
|
||||||
|
order.address,
|
||||||
|
order.city,
|
||||||
|
order.pcode,
|
||||||
|
order.email,
|
||||||
|
order.phone,
|
||||||
|
Parser.parse_boolean(order.is_member),
|
||||||
|
Parser.parse_order_type(order.order_type),
|
||||||
|
Parser.parse_location(order.location),
|
||||||
|
Parser.parse_boolean(order.even_weeks),
|
||||||
|
Parser.parse_boolean(order.split_invoice),
|
||||||
|
Parser.parse_date(order.inserted_at),
|
||||||
|
Parser.parse_date(order.updated_at)
|
||||||
|
]
|
||||||
|
end
|
||||||
|
end
|
||||||
3
mix.exs
3
mix.exs
@@ -47,7 +47,8 @@ defmodule Osuuspuutarha.MixProject do
|
|||||||
{:telemetry_poller, "~> 1.0"},
|
{:telemetry_poller, "~> 1.0"},
|
||||||
{:gettext, "~> 0.18"},
|
{:gettext, "~> 0.18"},
|
||||||
{:jason, "~> 1.2"},
|
{:jason, "~> 1.2"},
|
||||||
{:plug_cowboy, "~> 2.5"}
|
{:plug_cowboy, "~> 2.5"},
|
||||||
|
{:elixlsx, "~> 0.5.1"}
|
||||||
]
|
]
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|||||||
1
mix.lock
1
mix.lock
@@ -8,6 +8,7 @@
|
|||||||
"decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"},
|
"decimal": {:hex, :decimal, "2.0.0", "a78296e617b0f5dd4c6caf57c714431347912ffb1d0842e998e9792b5642d697", [:mix], [], "hexpm", "34666e9c55dea81013e77d9d87370fe6cb6291d1ef32f46a1600230b1d44f577"},
|
||||||
"ecto": {:hex, :ecto, "3.9.4", "3ee68e25dbe0c36f980f1ba5dd41ee0d3eb0873bccae8aeaf1a2647242bffa35", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "de5f988c142a3aa4ec18b85a4ec34a2390b65b24f02385c1144252ff6ff8ee75"},
|
"ecto": {:hex, :ecto, "3.9.4", "3ee68e25dbe0c36f980f1ba5dd41ee0d3eb0873bccae8aeaf1a2647242bffa35", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "de5f988c142a3aa4ec18b85a4ec34a2390b65b24f02385c1144252ff6ff8ee75"},
|
||||||
"ecto_sql": {:hex, :ecto_sql, "3.9.2", "34227501abe92dba10d9c3495ab6770e75e79b836d114c41108a4bf2ce200ad5", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.9.2", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "1eb5eeb4358fdbcd42eac11c1fbd87e3affd7904e639d77903c1358b2abd3f70"},
|
"ecto_sql": {:hex, :ecto_sql, "3.9.2", "34227501abe92dba10d9c3495ab6770e75e79b836d114c41108a4bf2ce200ad5", [:mix], [{:db_connection, "~> 2.4.1 or ~> 2.5", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.9.2", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.6.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.16.0 or ~> 1.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.1 or ~> 2.2", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "1eb5eeb4358fdbcd42eac11c1fbd87e3affd7904e639d77903c1358b2abd3f70"},
|
||||||
|
"elixlsx": {:hex, :elixlsx, "0.5.1", "3b4129c7059c7bd2ed4e2ff5f6c485410ab125058bee2e9de6e0eb8417176803", [:mix], [], "hexpm", "25d778d43ea1ae86df8dd20170842d324086c0cab40503eb484a3779a6e2254c"},
|
||||||
"esbuild": {:hex, :esbuild, "0.6.1", "a774bfa7b4512a1211bf15880b462be12a4c48ed753a170c68c63b2c95888150", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "569f7409fb5a932211573fc20e2a930a0d5cf3377c5b4f6506c651b1783a1678"},
|
"esbuild": {:hex, :esbuild, "0.6.1", "a774bfa7b4512a1211bf15880b462be12a4c48ed753a170c68c63b2c95888150", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "569f7409fb5a932211573fc20e2a930a0d5cf3377c5b4f6506c651b1783a1678"},
|
||||||
"expo": {:hex, :expo, "0.4.0", "bbe4bf455e2eb2ebd2f1e7d83530ce50fb9990eb88fc47855c515bfdf1c6626f", [:mix], [], "hexpm", "a8ed1683ec8b7c7fa53fd7a41b2c6935f539168a6bb0616d7fd6b58a36f3abf2"},
|
"expo": {:hex, :expo, "0.4.0", "bbe4bf455e2eb2ebd2f1e7d83530ce50fb9990eb88fc47855c515bfdf1c6626f", [:mix], [], "hexpm", "a8ed1683ec8b7c7fa53fd7a41b2c6935f539168a6bb0616d7fd6b58a36f3abf2"},
|
||||||
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
|
"file_system": {:hex, :file_system, "0.2.10", "fb082005a9cd1711c05b5248710f8826b02d7d1784e7c3451f9c1231d4fc162d", [:mix], [], "hexpm", "41195edbfb562a593726eda3b3e8b103a309b733ad25f3d642ba49696bf715dc"},
|
||||||
|
|||||||
Reference in New Issue
Block a user