project now can sync companies
This commit is contained in:
@@ -78,7 +78,7 @@
|
|||||||
:plugins [[lein-figwheel "0.5.13"]
|
:plugins [[lein-figwheel "0.5.13"]
|
||||||
[lein-pdo "0.1.1"]
|
[lein-pdo "0.1.1"]
|
||||||
[cider/cider-nrepl "0.16.0"]]
|
[cider/cider-nrepl "0.16.0"]]
|
||||||
:jvm-opts ["-Dconfig=config/dev.edn" "--add-modules" "java.xml.bind"]}
|
:jvm-opts ["-Dconfig=config/dev.edn" #_#_"--add-modules" "java.xml.bind"]}
|
||||||
:uberjar {:prep-tasks [["cljsbuild" "once" "min"] "compile"]}
|
:uberjar {:prep-tasks [["cljsbuild" "once" "min"] "compile"]}
|
||||||
:provided {:dependencies [[org.clojure/clojurescript "1.10.238"]
|
:provided {:dependencies [[org.clojure/clojurescript "1.10.238"]
|
||||||
[reagent "0.7.0"]
|
[reagent "0.7.0"]
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
(ns autoap.datomic
|
(ns autoap.datomic
|
||||||
(:require [datomic.api :as d]
|
(:require [datomic.api :as d]
|
||||||
[auto-ap.db.vendors :as v]
|
[auto-ap.db.vendors :as v]
|
||||||
|
[auto-ap.db.companies :as c]
|
||||||
[clojure.string :as str]))
|
[clojure.string :as str]))
|
||||||
|
|
||||||
(def uri "datomic:sql://invoices?jdbc:postgresql://database:5432/datomic?user=datomic&password=datomic")
|
(def uri "datomic:sql://invoices?jdbc:postgresql://database:5432/datomic?user=datomic&password=datomic")
|
||||||
@@ -8,74 +9,155 @@
|
|||||||
(defn create-database []
|
(defn create-database []
|
||||||
(d/create-database uri))
|
(d/create-database uri))
|
||||||
|
|
||||||
|
(defn drop-database []
|
||||||
|
(d/delete-database uri))
|
||||||
|
|
||||||
|
(defn remove-nils [m]
|
||||||
|
|
||||||
|
(let [result (reduce-kv
|
||||||
|
(fn [m k v]
|
||||||
|
(if v
|
||||||
|
(assoc m k v)
|
||||||
|
m
|
||||||
|
))
|
||||||
|
{}
|
||||||
|
m)]
|
||||||
|
(if (seq result)
|
||||||
|
result
|
||||||
|
nil)))
|
||||||
|
|
||||||
|
(def vendor-schema
|
||||||
|
[{:db/ident :vendor/original-id
|
||||||
|
:db/valueType :db.type/long
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/unique :db.unique/identity
|
||||||
|
:db/doc "Original id from the old system"}
|
||||||
|
{:db/ident :vendor/name
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "A vendor's human-friendly name"}
|
||||||
|
{:db/ident :vendor/code
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/unique :db.unique/identity
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "A vendor's computer-friendly name"}
|
||||||
|
{:db/ident :vendor/print-as
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "Set if you want to override how this vendor's name is printed on checks"}
|
||||||
|
{:db/ident :vendor/email
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "A vendor's email address"}
|
||||||
|
|
||||||
|
{:db/ident :vendor/phone
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "A vendor's phone number"}
|
||||||
|
{:db/ident :vendor/invoice-reminder-schedule
|
||||||
|
:db/valueType :db.type/keyword
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "How often to email this vendor about invoices"}
|
||||||
|
{:db/ident :vendor/default-expense-account
|
||||||
|
:db/valueType :db.type/long
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "The vendor's default expense account"}
|
||||||
|
{:db/ident :vendor/primary-contact
|
||||||
|
:db/valueType :db.type/ref
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/isComponent true
|
||||||
|
:db/doc "The vendor's primary contact"}
|
||||||
|
{:db/ident :vendor/secondary-contact
|
||||||
|
:db/valueType :db.type/ref
|
||||||
|
:db/isComponent true
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "The vendor's secondary contact"}
|
||||||
|
{:db/id #db/id[:db.part/db]
|
||||||
|
:db/ident :vendor/address
|
||||||
|
:db/valueType :db.type/ref
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/isComponent true
|
||||||
|
:db.install/_attribute :db.part/db
|
||||||
|
:db/doc "The vendor's address"}
|
||||||
|
])
|
||||||
|
|
||||||
|
(def client-schema
|
||||||
|
[{:db/ident :client/original-id
|
||||||
|
:db/valueType :db.type/long
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/unique :db.unique/identity
|
||||||
|
:db/doc "Original id from the old system"}
|
||||||
|
{:db/ident :client/name
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "A client's human-friendly name"}
|
||||||
|
{:db/ident :client/code
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/unique :db.unique/identity
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "A client's computer-friendly name"}
|
||||||
|
{:db/ident :client/signature-file
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/unique :db.unique/identity
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "A check signature image"}
|
||||||
|
|
||||||
|
{:db/ident :client/locations
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/many
|
||||||
|
:db/doc "A client's locations"}
|
||||||
|
{:db/ident :client/address
|
||||||
|
:db/valueType :db.type/ref
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/isComponent true
|
||||||
|
:db/doc "Address of the client"}
|
||||||
|
{:db/ident :client/bank-accounts
|
||||||
|
:db/valueType :db.type/ref
|
||||||
|
:db/cardinality :db.cardinality/many
|
||||||
|
:db/doc "Bank accounts for the client"}])
|
||||||
|
|
||||||
|
(def address-schema
|
||||||
|
[
|
||||||
|
{:db/ident :address/street1
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "123 main st"}
|
||||||
|
{:db/ident :address/street2
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "Apt A"}
|
||||||
|
{:db/ident :address/city
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "Campbell"}
|
||||||
|
{:db/ident :address/state
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "CA"}
|
||||||
|
{:db/ident :address/zip
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "95014"}])
|
||||||
|
|
||||||
|
(def contact-schema
|
||||||
|
[
|
||||||
|
{:db/ident :contact/name
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "John Smith"}
|
||||||
|
{:db/ident :contact/phone
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "4255773578"}
|
||||||
|
{:db/ident :contact/email
|
||||||
|
:db/valueType :db.type/string
|
||||||
|
:db/cardinality :db.cardinality/one
|
||||||
|
:db/doc "hello@example.com"}])
|
||||||
|
|
||||||
(defn create-schema []
|
(defn create-schema []
|
||||||
(->>
|
(->>
|
||||||
[
|
(concat address-schema contact-schema vendor-schema client-schema)
|
||||||
;; vendors
|
|
||||||
{:db/ident :vendor/name
|
|
||||||
:db/valueType :db.type/string
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "A vendor's human-friendly name"}
|
|
||||||
{:db/ident :vendor/print-as
|
|
||||||
:db/valueType :db.type/string
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "Set if you want to override how this vendor's name is printed on checks"}
|
|
||||||
{:db/ident :vendor/email
|
|
||||||
:db/valueType :db.type/string
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "A vendor's email address"}
|
|
||||||
{:db/ident :vendor/phone
|
|
||||||
:db/valueType :db.type/string
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "A vendor's phone number"}
|
|
||||||
{:db/ident :vendor/invoice-reminder-schedule
|
|
||||||
:db/valueType :db.type/keyword
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "How often to email this vendor about invoices"}
|
|
||||||
{:db/ident :vendor/primary-contact
|
|
||||||
:db/valueType :db.type/ref
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "The vendor's primary contact"}
|
|
||||||
{:db/ident :vendor/secondary-contact
|
|
||||||
:db/valueType :db.type/ref
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "The vendor's secondary contact"}
|
|
||||||
{:db/id #db/id[:db.part/db]
|
|
||||||
:db/ident :vendor/address
|
|
||||||
:db/valueType :db.type/ref
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/isComponent true
|
|
||||||
:db.install/_attribute :db.part/db
|
|
||||||
:db/doc "The vendor's address"}
|
|
||||||
|
|
||||||
{:db/ident :address/street1
|
|
||||||
:db/valueType :db.type/ref
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "123 main st"}
|
|
||||||
{:db/ident :address/street2
|
|
||||||
:db/valueType :db.type/ref
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "Apt A"}
|
|
||||||
{:db/ident :address/city
|
|
||||||
:db/valueType :db.type/ref
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "Campbell"}
|
|
||||||
{:db/ident :address/state
|
|
||||||
:db/valueType :db.type/ref
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "CA"}
|
|
||||||
{:db/ident :address/zip
|
|
||||||
:db/valueType :db.type/ref
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "95014"}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
{:db/ident :testing/number
|
|
||||||
:db/valueType :db.type/string
|
|
||||||
:db/cardinality :db.cardinality/one
|
|
||||||
:db/doc "A useless entity"}]
|
|
||||||
(d/transact (d/connect uri))))
|
(d/transact (d/connect uri))))
|
||||||
|
|
||||||
(defn load-entities []
|
(defn load-entities []
|
||||||
@@ -87,44 +169,74 @@
|
|||||||
))
|
))
|
||||||
(defn query-entities []
|
(defn query-entities []
|
||||||
(d/q '[:find (pull ?e [:vendor/name])
|
(d/q '[:find (pull ?e [:vendor/name])
|
||||||
:where [?e :vendor/name]]
|
:where [?e :vendor/name]]
|
||||||
(d/db (d/connect uri))))
|
(d/db (d/connect uri))))
|
||||||
|
|
||||||
(defn load-vendors []
|
(defn load-vendors [vendors]
|
||||||
(d/transact
|
(d/transact
|
||||||
(d/connect uri)
|
(d/connect uri)
|
||||||
(let [all-vendors (v/get-all)]
|
(->> vendors
|
||||||
(doto (take 5 (map
|
(map
|
||||||
(fn [{:keys [primary-phone address email primary-contact secondary-email secondary-contact primary-email name default-expense-account id code secondary-phone invoice-reminder-schedule print-as]}]
|
(fn [{:keys [primary-phone address email primary-contact secondary-email secondary-contact primary-email name default-expense-account id code secondary-phone invoice-reminder-schedule print-as]}]
|
||||||
|
(let [vendor-id (d/tempid :db.part/user)
|
||||||
(cond-> #:vendor {:db/ident (keyword (str "vendor-" id))
|
address-id (d/tempid :db.part/user)]
|
||||||
:name name}
|
(remove-nils #:vendor {:original-id id
|
||||||
email (assoc :vendor/email email)
|
:name name
|
||||||
invoice-reminder-schedule (assoc :vendor/invoice-reminder-schedule invoice-reminder-schedule)
|
:code (if (seq code) code nil)
|
||||||
(and address
|
:email email
|
||||||
(:street1 address)
|
:default-expense-account default-expense-account
|
||||||
(:street2 address)
|
:invoice-reminder-schedule invoice-reminder-schedule
|
||||||
(:city address)
|
:address (remove-nils #:address {:street1 (:street1 address)
|
||||||
(:state address)
|
:street2 (:street2 address)
|
||||||
(:zip address))
|
:city (:city address)
|
||||||
(assoc :vendor/address #:address {
|
:state (:state address)
|
||||||
:street1 (:street1 address)
|
:zip (:zip address)})
|
||||||
:street2 (:street2 address)
|
:primary-contact (remove-nils #:contact {:name primary-contact
|
||||||
:city (:city address)
|
:phone primary-phone
|
||||||
:state (:state address)
|
:email primary-email})
|
||||||
:zip (:zip address)})))
|
:secondary-contact (remove-nils #:contact {:name secondary-contact
|
||||||
|
:phone secondary-phone
|
||||||
|
:email secondary-email})})))))))
|
||||||
all-vendors))
|
|
||||||
clojure.pprint/pprint)
|
(defn load-clients [clients]
|
||||||
)))
|
(->> clients
|
||||||
|
(map
|
||||||
|
(fn [{:keys [name address id code locations email bank-accounts signature-file]}]
|
||||||
|
(doto (remove-nils #:client {:original-id id
|
||||||
|
:name (str name "-test")
|
||||||
|
:code nil
|
||||||
|
:email email
|
||||||
|
:signature-file signature-file
|
||||||
|
:locations locations
|
||||||
|
:address (remove-nils #:address {:street1 (:street1 address)
|
||||||
|
:street2 (:street2 address)
|
||||||
|
:city (:city address)
|
||||||
|
:state (:state address)
|
||||||
|
:zip (:zip address)})
|
||||||
|
})
|
||||||
|
println)))
|
||||||
|
(d/transact (d/connect uri))))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(defn query-vendors []
|
||||||
|
(d/q '[:find (pull ?e [:db/id :vendor/invoice-reminder-schedule ])
|
||||||
|
:where [?e :vendor/address]]
|
||||||
|
(d/db (d/connect uri))))
|
||||||
|
(defn query-clients []
|
||||||
|
(d/q '[:find (pull ?e [*]) (min ?tx-time) (max ?tx-time2)
|
||||||
|
:where [?e :client/original-id]
|
||||||
|
[?e _ _ ?tx]
|
||||||
|
[?tx :db/txInstant ?tx-time]
|
||||||
|
[?tx :db/txInstant ?tx-time2]]
|
||||||
|
(d/db (d/connect uri))))
|
||||||
|
|
||||||
|
|
||||||
(defn do []
|
(defn do []
|
||||||
(create-database uri)
|
(create-database )
|
||||||
@(create-schema )
|
@(create-schema )
|
||||||
@(load-entities)
|
(let [all-vendors (v/get-all)]
|
||||||
@(load-vendors))
|
@(load-vendors all-vendors))
|
||||||
|
(let [all-clients (c/get-all)]
|
||||||
|
@(load-clients all-clients))
|
||||||
|
(count (query-clients)))
|
||||||
|
|||||||
Reference in New Issue
Block a user