Skip to content

Commit

Permalink
Release 0.0.5
Browse files Browse the repository at this point in the history
  • Loading branch information
BrunoMartins11 committed Jan 29, 2021
2 parents 1c7ddc2 + 4017b46 commit 4ff042a
Show file tree
Hide file tree
Showing 5 changed files with 87 additions and 28 deletions.
32 changes: 26 additions & 6 deletions lib/infin/invoices.ex
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,37 @@ defmodule Infin.Invoices do
|> Repo.paginate(params)
end

def list_company_invoices_query(company_id, params, query) do

query = from( i in Invoice,
where: i.company_id == ^company_id,
join: c in assoc(i, :company_seller),
where: c.nif == ^query,
preload: [:company_seller, :category, :company, company: :categories],
order_by: [desc: :doc_emission_date]
)
Repo.paginate(query, params)
end

def list_company_invoices(company_id, params) do
query =
from(i in Invoice,
where: i.company_id == ^company_id,
preload: [:company_seller, :category, :company, company: :categories],
order_by: [desc: :doc_emission_date]
)

query = from( i in Invoice,
where: i.company_id == ^company_id,
preload: [:company_seller, :category, :company, company: :categories],
order_by: [desc: :doc_emission_date]
)
Repo.paginate(query, params)
end

def invoices_by_doc_id_of_company_exist(doc_id, company_id, seller_nif) do
query = from( i in Invoice,
where: i.company_id == ^company_id and i.id_document == ^doc_id,
join: c in assoc(i, :company_seller),
where: c.nif == ^seller_nif
)
Repo.all(query)
end

def list_company_invoices_unassociated(company_id, page_number) do
Invoice
|> where(company_id: ^company_id)
Expand Down
55 changes: 38 additions & 17 deletions lib/infin_web/controllers/invoice_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,14 @@ defmodule InfinWeb.InvoiceController do
alias Infin.Storage

def index(conn, params, company_id) do
page = Invoices.list_company_invoices(company_id, params)
company = Companies.get_company(company_id)
render(conn, "index.html", invoices: page.entries, company: company, page: page)
if is_nil(params["query"]) or params["query"] == "" do
page = Invoices.list_company_invoices(company_id, params)
render(conn, "index.html", invoices: page.entries, company: company, page: page)
else
page = Invoices.list_company_invoices_query(company_id, params, params["query"])
render(conn, "index.html", invoices: page.entries, company: company, page: page)
end
end

def new(conn, _params, company_id) do
Expand All @@ -28,25 +33,37 @@ defmodule InfinWeb.InvoiceController do
invoice_params = Map.replace!(invoice_params, "total_value", total_value)

if invoice_params["category_id"] != nil do
Map.replace!(
invoice_params,
"category_id",
String.to_integer(invoice_params["category_id"])
)
Map.replace!(
invoice_params,
"category_id",
String.to_integer(invoice_params["category_id"])
)
end

invoice_params = check_for_pdf(conn, invoice_params)

case Invoices.create_invoice(invoice_params, company_id) do
{:ok, invoice} ->
if Invoices.invoices_by_doc_id_of_company_exist(
invoice_params["id_document"],
company_id,
invoice_params["company_seller"]["nif"]
) != [] do
conn
|> put_flash(:error, "Invoice already exists")
|> redirect(to: Routes.invoice_path(conn, :index))
else
case Invoices.create_invoice(invoice_params, company_id) do
{:ok, _invoice} ->
conn
|> put_flash(:info, "Invoice created successfully.")
|> redirect(to: Routes.invoice_path(conn, :index))

conn
|> put_flash(:info, "Invoice created successfully.")
|> redirect(to: Routes.invoice_path(conn, :show, invoice))
{:error, %Ecto.Changeset{} = changeset} ->
categories =
Companies.list_company_categories(company_id)
|> Enum.map(&{&1.name, &1.id})

{:error, %Ecto.Changeset{} = changeset} ->
categories = Companies.list_company_categories(company_id) |> Enum.map(&{&1.name, &1.id})
render(conn, "new.html", changeset: changeset, categories: categories)
render(conn, "new.html", changeset: changeset, categories: categories)
end
end
end

Expand All @@ -59,10 +76,12 @@ defmodule InfinWeb.InvoiceController do
cond do
company_id == invoice.company_id ->
categories =
Companies.list_company_categories(company_id) |> Enum.map(&{&1.name, &1.id})
Companies.list_company_categories(company_id)
|> Enum.map(&{&1.name, &1.id})

invoice = Map.replace!(invoice, :tags, convert_tags_to_string(invoice.tags))
changeset = Invoices.change_invoice(invoice)

render(conn, "show.html",
invoice: invoice,
changeset: changeset,
Expand All @@ -89,7 +108,8 @@ defmodule InfinWeb.InvoiceController do
|> Decimal.round(0, :ceiling)
|> Decimal.to_integer()

invoice_params = Map.replace!(invoice_params, "total_value", total_value)
invoice_params =
Map.replace!(invoice_params, "total_value", total_value)

if invoice_params["category_id"] != nil do
Map.replace!(
Expand Down Expand Up @@ -131,6 +151,7 @@ defmodule InfinWeb.InvoiceController do
if invoice.pdf do
{:ok, _pdf} = Storage.delete_pdf(invoice.pdf)
end

{:ok, _invoice} = Invoices.delete_invoice(invoice)

true ->
Expand Down
6 changes: 6 additions & 0 deletions lib/infin_web/templates/invoice/form.html.eex
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,9 @@

<%= inputs_for f, :company_seller, fn f_company -> %>
<div class="field">
<%= if contains_invoice? assigns do%>
<fieldset disabled>
<% end %>
<%= label f_company, :nif, "Emitter Tax Id", class: "label is-floating-label" %>
<div class="control has-icons-left">
<span class="icon is-small is-left">
Expand All @@ -64,6 +67,9 @@
</div>

<div class="field">
<%= if contains_invoice? assigns do%>
<fieldset disabled>
<% end %>
<%= label f_company, :name, "Emitter Name", class: "label is-floating-label" %>
<div class="control has-icons-left">
<span class="icon is-small is-left">
Expand Down
12 changes: 12 additions & 0 deletions lib/infin_web/templates/invoice/index.html.eex
Original file line number Diff line number Diff line change
@@ -1,5 +1,17 @@
<div class="container py-5">
<p class="is-size-4 mb-5">Invoices</p>

<%= form_for @conn, Routes.invoice_path(@conn, :index), [method: :get, class: "pull-right"], fn f -> %>
<div class="field has-addons mb-4 is-pulled-right">
<p class="control">
<%= search_input f, :query, class: "input has-icons-right", placeholder: "Search by Emitter Tax ID" %>
</p>
<p class="control">
<%= submit "Search", class: "button is-primary is-outlined" %>
</p>
</div>
<% end %>

<%= if length(@invoices) > 0 do %>
<div class="b-table has-pagination">
<div class="table-wrapper has-mobile-cards">
Expand Down
10 changes: 5 additions & 5 deletions test/infin_web/controllers/invoice_controller_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@ defmodule InfinWeb.InvoiceControllerTest do
}
@update_attrs %{id_document: "some updated id_document"}
@invalid_attrs %{
id_document: nil,
id_document: "2",
doc_emission_date: nil,
total_value: "0.00",
company_seller: %{
nif: "123",
Expand Down Expand Up @@ -72,11 +73,10 @@ defmodule InfinWeb.InvoiceControllerTest do
test "redirects to show when data is valid", %{conn: conn} do
conn = post(conn, Routes.invoice_path(conn, :create), invoice: @create_attrs)

assert %{id: id} = redirected_params(conn)
assert redirected_to(conn) == Routes.invoice_path(conn, :show, id)
assert redirected_to(conn) == Routes.invoice_path(conn, :index)

conn = get(conn, Routes.invoice_path(conn, :show, id))
assert html_response(conn, 200) =~ "Invoice"
conn = get(conn, Routes.invoice_path(conn, :index))
assert html_response(conn, 200) =~ "Invoices"
end

test "renders errors when data is invalid", %{conn: conn} do
Expand Down

0 comments on commit 4ff042a

Please sign in to comment.