diff --git a/src/clj/auto_ap/square/core3.clj b/src/clj/auto_ap/square/core3.clj index 671e5add..3be26b2d 100644 --- a/src/clj/auto_ap/square/core3.clj +++ b/src/clj/auto_ap/square/core3.clj @@ -43,7 +43,7 @@ (client/request (assoc request :socket-timeout 5000 :connection-timeout 5000 - :connection-request-timeout 5000 + #_#_:connection-request-timeout 5000 :as :json)) (catch Throwable e (log/warn ::raw-request-failed @@ -107,7 +107,7 @@ (def item-cache (atom {})) -(defn fetch-catalog [client i] +(defn fetch-catalog [client i v] (capture-context->lc (de/chain [client i] @@ -116,7 +116,8 @@ (manifold-api-call {:url (str "https://connect.squareup.com/v2/catalog/object/" i) :method :get :headers (client-base-headers client) - :query-params {"include_related_items" "true"} + :query-params {"include_related_items" "true" + "catalog_version" v} :as :json}))) :body :object @@ -124,26 +125,26 @@ %)))) -(defn fetch-catalog-cache [client i] +(defn fetch-catalog-cache [client i version] (if (get @item-cache i) (de/success-deferred (get @item-cache i)) - (fetch-catalog client i))) + (fetch-catalog client i version))) -(defn item->category-name-impl [client item ] +(defn item->category-name-impl [client item version] (capture-context->lc (cond (:item_id (:item_variation_data item)) - (de/catch (de/chain (fetch-catalog-cache client (:item_id (:item_variation_data item))) + (de/catch (de/chain (fetch-catalog-cache client (:item_id (:item_variation_data item)) version) (fn [item] (mu/with-context lc - (item->category-name-impl client item)))) + (item->category-name-impl client item version)))) (fn [e] (log/warn ::couldnt-fetch-variation :exception e) "Uncategorized")) (:category_id (:item_data item)) - (de/catch (de/chain (fetch-catalog-cache client (:category_id (:item_data item))) + (de/catch (de/chain (fetch-catalog-cache client (:category_id (:item_data item)) version) :category_data :name) (fn [e] @@ -161,16 +162,21 @@ "Uncategorized")))) -(defn item-id->category-name [client i] +(defn item-id->category-name [client i version] (capture-context->lc (-> [client i] (de/chain (fn [[client i]] (if (str/blank? i) "Uncategorized" - (de/chain (fetch-catalog-cache client i) - #(mu/with-context lc - (item->category-name-impl client %))))))))) + (de/catch (de/chain (fetch-catalog-cache client i version) + #(mu/with-context lc + (item->category-name-impl client % version))) + (fn [error] + (log/warn ::couldnt-fetch-item + :exception error) + "Uncategorized" + (throw error))))))))) (defn pc [start end] {"query" {"filter" {"date_time_filter" @@ -326,17 +332,22 @@ (s/transform (map-indexed (fn [i li] (mu/with-context lc - (de/let-flow [category (item-id->category-name client (:catalog_object_id li))] - (remove-nils - #:order-line-item - {:external-id (str "square/order/" (:client/code client) "-" (:square-location/client-location location) "-" (:id order) "-" i) - :item-name (:name li) - :category (if (= "GIFT_CARD" (:item_type li)) - "Gift Card" - category) - :total (amount->money (:total_money li)) - :tax (amount->money (:total_tax_money li)) - :discount (amount->money (:total_discount_money li))}))))) + (-> + (de/let-flow [category (item-id->category-name client (:catalog_object_id li) (:catalog_version li))] + (remove-nils + #:order-line-item + {:external-id (str "square/order/" (:client/code client) "-" (:square-location/client-location location) "-" (:id order) "-" i) + :item-name (:name li) + :category (if (= "GIFT_CARD" (:item_type li)) + "Gift Card" + category) + :total (amount->money (:total_money li)) + :tax (amount->money (:total_tax_money li)) + :discount (amount->money (:total_discount_money li))})) + (de/catch (fn [e] + (log/error ::cant-transform + :exception e + :line-item li))))))) ) (s/buffer 5) (s/realize-each) @@ -374,24 +385,28 @@ (daily-results client location (time/plus (time/now) (time/days -7)) (time/now))) ([client location start end] (capture-context->lc - (de/chain (search client location start end) - (fn [search-results] - (->> search-results - (s/->source) - (s/filter (fn [order] - ;; sometimes orders stay open in square. At least one payment - ;; is needed to import, in order to avoid importing orders in-progress. - (and - (or (> (count (:tenders order)) 0) - (seq (:returns order))) - (or (= #{} (set (map #(:status (:card_details %)) (:tenders order)))) - (not= #{} (set/difference - (set (map #(:status (:card_details %)) (:tenders order))) - #{"FAILED" "VOIDED"})))))) - (s/map #(mu/with-context lc (order->sales-order client location %))) - (s/buffer 10) - (s/realize-each) - (s/reduce into []))))))) + (-> + (de/chain (search client location start end) + (fn [search-results] + (->> search-results + (s/->source) + (s/filter (fn [order] + ;; sometimes orders stay open in square. At least one payment + ;; is needed to import, in order to avoid importing orders in-progress. + (and + (or (> (count (:tenders order)) 0) + (seq (:returns order))) + (or (= #{} (set (map #(:status (:card_details %)) (:tenders order)))) + (not= #{} (set/difference + (set (map #(:status (:card_details %)) (:tenders order))) + #{"FAILED" "VOIDED"})))))) + (s/map #(mu/with-context lc (order->sales-order client location %))) + (s/buffer 10) + (s/realize-each) + (s/reduce into [])))) + (de/catch (fn [e] + (log/error ::cant-create-results + :exception e))))))) (defn get-payment [client p]