45 lines
2.3 KiB
Clojure
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))))
|