Skip to content

Instantly share code, notes, and snippets.

@shankardevy
Last active August 18, 2017 17:37
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save shankardevy/c526ba8b9372681031226423b7376ccf to your computer and use it in GitHub Desktop.
Save shankardevy/c526ba8b9372681031226423b7376ccf to your computer and use it in GitHub Desktop.
defmodule Mango.Sales do
import Ecto.Query
alias Mango.Repo
alias Mango.Sales.Order
def get_cart(id) do
Order
|> Repo.get_by(id: id, status: "In Cart")
end
def create_cart do
%Order{status: "In Cart"} |> Repo.insert!()
end
def add_to_cart(%Order{line_items: []} = cart, cart_params) do
attrs = %{line_items: [cart_params]}
update_cart(cart, attrs)
end
def add_to_cart(%Order{line_items: existing_line_items} = cart, cart_params) do
new_item = %{
product_id: String.to_integer(cart_params["product_id"]),
quantity: String.to_integer(cart_params["quantity"])
}
existing_line_items = existing_line_items |> Enum.map(&Map.from_struct/1)
attrs = %{line_items: [new_item | existing_line_items]}
update_cart(cart, attrs)
end
def update_cart(cart, attrs) do
cart
|> Order.changeset(attrs)
|> Repo.update
end
def change_cart(%Order{} = order) do
Order.changeset(order, %{})
end
def confirm_order(%Order{} = order, attrs) do
attrs = Map.put(attrs, "status", "Confirmed")
order
|> Order.checkout_changeset(attrs)
|> Repo.update()
end
def pos_sale_complete(%Order{} = order) do
order
|> Order.changeset(%{"status" => "POS Sale"})
|> Repo.update()
end
def list_orders do
Order
|> where([o], o.status != "In Cart")
|> Repo.all
end
def get_order!(id), do: Repo.get!(Order, id)
def get_order(id), do: Repo.get(Order, id)
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment