Files
integreat/src/clj/auto_ap/graphql/invoices.clj

45 lines
2.3 KiB
Clojure

(ns auto-ap.graphql.invoices
(:require [auto-ap.graphql.utils :refer [->graphql]]
[auto-ap.db.invoices :as invoices]
[auto-ap.db.vendors :as vendors]
[auto-ap.db.invoices-expense-accounts :as invoices-expense-accounts]
[auto-ap.time :refer [parse iso-date]]))
(defn -create-or-get-vendor [vendor-id vendor-name]
(if vendor-id
(vendors/get-by-id vendor-id)
(vendors/insert {:name vendor-name :default-expense-account 0})))
(defn add-invoice [context {{:keys [total invoice_number company_id vendor_id vendor_name date] :as in} :invoice} value]
(let [vendor (-create-or-get-vendor vendor_id vendor_name)
[invoice] (invoices/insert-multi! [{:invoice-number invoice_number
:company-id company_id
:vendor-id (:id vendor)
:total total
:outstanding-balance total
:status "unpaid"
:imported true
:date (parse date iso-date)}]
)]
(invoices-expense-accounts/replace-for-invoice
(:id invoice) [{:expense-account-id (:default-expense-account vendor)
:amount total}] )
(-> invoice
(->graphql))))
(defn get-invoices-expense-accounts [context args value]
(->graphql
(invoices-expense-accounts/get-for-invoice (:id value))))
(defn edit-expense-accounts [context args value]
(invoices-expense-accounts/replace-for-invoice (:invoice_id args) (map (fn [{:keys [id expense_account_id amount location]}]
{
:expense-account-id expense_account_id
:location location
:amount (Double/parseDouble amount)} )
(:expense_accounts args)))
(->graphql
(invoices/get-by-id (:invoice_id args))))