Add check of existing order
This commit is contained in:
parent
4bd49c76d4
commit
6e0cb54032
1 changed files with 150 additions and 127 deletions
|
@ -668,146 +668,169 @@ routes pipe config = do
|
|||
, "shop" .= (Nothing :: Maybe String)
|
||||
])
|
||||
Just o' -> do
|
||||
res <-
|
||||
existingOrder <-
|
||||
liftAndCatchIO $
|
||||
requestXeroToken pipe (c_dbName config) c "none" $ oaddress o'
|
||||
if res
|
||||
then do
|
||||
resInv <-
|
||||
run $
|
||||
findXeroOrder
|
||||
(oaddress o')
|
||||
(xr_invNo invReq)
|
||||
(xr_shortCode invReq)
|
||||
case cast' . Doc =<< existingOrder of
|
||||
Nothing -> do
|
||||
res <-
|
||||
liftAndCatchIO $
|
||||
getXeroInvoice pipe (c_dbName config) (xr_invNo invReq) $
|
||||
oaddress o'
|
||||
case resInv of
|
||||
Nothing -> do
|
||||
status ok200
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .= (2 :: Integer)
|
||||
, "order" .= (Nothing :: Maybe ZGoOrder)
|
||||
, "shop" .= (Nothing :: Maybe String)
|
||||
])
|
||||
Just xI -> do
|
||||
if xi_type xI == "ACCREC"
|
||||
then if xi_status xI == "AUTHORISED"
|
||||
then if xi_currency xI == T.toUpper (ocurrency o')
|
||||
then if xi_total xI == xr_amount invReq
|
||||
then do
|
||||
now <- liftIO getCurrentTime
|
||||
tk <- liftIO generateToken
|
||||
pr <-
|
||||
liftAndCatchIO $
|
||||
run
|
||||
(findPrice $
|
||||
T.unpack . ocurrency $ o')
|
||||
case parseZGoPrice =<< pr of
|
||||
Nothing -> do
|
||||
requestXeroToken pipe (c_dbName config) c "none" $ oaddress o'
|
||||
if res
|
||||
then do
|
||||
resInv <-
|
||||
liftAndCatchIO $
|
||||
getXeroInvoice pipe (c_dbName config) (xr_invNo invReq) $
|
||||
oaddress o'
|
||||
case resInv of
|
||||
Nothing -> do
|
||||
status ok200
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .= (2 :: Integer)
|
||||
, "order" .= (Nothing :: Maybe ZGoOrder)
|
||||
, "shop" .= (Nothing :: Maybe String)
|
||||
])
|
||||
Just xI -> do
|
||||
if xi_type xI == "ACCREC"
|
||||
then if xi_status xI == "AUTHORISED"
|
||||
then if xi_currency xI ==
|
||||
T.toUpper (ocurrency o')
|
||||
then if xi_total xI == xr_amount invReq
|
||||
then do
|
||||
now <- liftIO getCurrentTime
|
||||
tk <- liftIO generateToken
|
||||
pr <-
|
||||
liftAndCatchIO $
|
||||
run
|
||||
(findPrice $
|
||||
T.unpack . ocurrency $ o')
|
||||
case parseZGoPrice =<< pr of
|
||||
Nothing -> do
|
||||
status ok200
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .=
|
||||
(7 :: Integer)
|
||||
, "order" .=
|
||||
(Nothing :: Maybe ZGoOrder)
|
||||
, "shop" .=
|
||||
(Nothing :: Maybe String)
|
||||
])
|
||||
Just cp -> do
|
||||
let newOrder =
|
||||
ZGoOrder
|
||||
Nothing
|
||||
(oaddress o')
|
||||
("Xero-" <>
|
||||
T.pack
|
||||
(show $ o_id o'))
|
||||
now
|
||||
True
|
||||
(ocurrency o')
|
||||
(price cp)
|
||||
(xi_total xI)
|
||||
(xi_total xI /
|
||||
price cp)
|
||||
[ LineItem
|
||||
1
|
||||
("Invoice from " <>
|
||||
oname o' <>
|
||||
" [" <>
|
||||
xi_number xI <>
|
||||
"]")
|
||||
(xi_total xI)
|
||||
]
|
||||
False
|
||||
(xi_number xI)
|
||||
(xi_shortcode xI)
|
||||
(T.pack tk)
|
||||
_ <-
|
||||
liftAndCatchIO $
|
||||
run $
|
||||
upsertOrder newOrder
|
||||
finalOrder <-
|
||||
liftAndCatchIO $
|
||||
run $
|
||||
findXeroOrder
|
||||
(oaddress o')
|
||||
(xi_number xI)
|
||||
(xi_shortcode xI)
|
||||
case cast' . Doc =<<
|
||||
finalOrder of
|
||||
Nothing -> do
|
||||
status
|
||||
internalServerError500
|
||||
text
|
||||
"Unable to save order to DB"
|
||||
Just fO -> do
|
||||
status created201
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .=
|
||||
(0 :: Integer)
|
||||
, "order" .=
|
||||
toJSON
|
||||
(fO :: ZGoOrder)
|
||||
, "shop" .=
|
||||
oname o'
|
||||
])
|
||||
else do
|
||||
status ok200
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .=
|
||||
(7 :: Integer)
|
||||
(8 :: Integer)
|
||||
, "order" .=
|
||||
(Nothing :: Maybe ZGoOrder)
|
||||
, "shop" .=
|
||||
(Nothing :: Maybe String)
|
||||
])
|
||||
Just cp -> do
|
||||
let newOrder =
|
||||
ZGoOrder
|
||||
Nothing
|
||||
(oaddress o')
|
||||
("Xero-" <>
|
||||
T.pack
|
||||
(show $ o_id o'))
|
||||
now
|
||||
True
|
||||
(ocurrency o')
|
||||
(price cp)
|
||||
(xi_total xI)
|
||||
(xi_total xI / price cp)
|
||||
[ LineItem
|
||||
1
|
||||
("Invoice from " <>
|
||||
oname o' <>
|
||||
" [" <>
|
||||
xi_number xI <>
|
||||
"]")
|
||||
(xi_total xI)
|
||||
]
|
||||
False
|
||||
(xi_number xI)
|
||||
(xi_shortcode xI)
|
||||
(T.pack tk)
|
||||
_ <-
|
||||
liftAndCatchIO $
|
||||
run $ upsertOrder newOrder
|
||||
finalOrder <-
|
||||
liftAndCatchIO $
|
||||
run $
|
||||
findXeroOrder
|
||||
(oaddress o')
|
||||
(xi_number xI)
|
||||
(xi_shortcode xI)
|
||||
case cast' . Doc =<< finalOrder of
|
||||
Nothing -> do
|
||||
status
|
||||
internalServerError500
|
||||
text
|
||||
"Unable to save order to DB"
|
||||
Just fO -> do
|
||||
status created201
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .=
|
||||
(0 :: Integer)
|
||||
, "order" .=
|
||||
toJSON
|
||||
(fO :: ZGoOrder)
|
||||
, "shop" .= oname o'
|
||||
])
|
||||
else do
|
||||
status ok200
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .=
|
||||
(8 :: Integer)
|
||||
, "order" .=
|
||||
(Nothing :: Maybe ZGoOrder)
|
||||
, "shop" .=
|
||||
(Nothing :: Maybe String)
|
||||
])
|
||||
else do
|
||||
status ok200
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .= (7 :: Integer)
|
||||
, "order" .=
|
||||
(Nothing :: Maybe ZGoOrder)
|
||||
, "shop" .= (Nothing :: Maybe String)
|
||||
])
|
||||
else do
|
||||
status ok200
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .= (6 :: Integer)
|
||||
, "order" .= (Nothing :: Maybe ZGoOrder)
|
||||
, "shop" .= (Nothing :: Maybe String)
|
||||
])
|
||||
else do
|
||||
status ok200
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .= (5 :: Integer)
|
||||
, "order" .= (Nothing :: Maybe ZGoOrder)
|
||||
, "shop" .= (Nothing :: Maybe String)
|
||||
])
|
||||
else do
|
||||
status ok200
|
||||
else do
|
||||
status ok200
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .= (7 :: Integer)
|
||||
, "order" .=
|
||||
(Nothing :: Maybe ZGoOrder)
|
||||
, "shop" .=
|
||||
(Nothing :: Maybe String)
|
||||
])
|
||||
else do
|
||||
status ok200
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .= (6 :: Integer)
|
||||
, "order" .= (Nothing :: Maybe ZGoOrder)
|
||||
, "shop" .= (Nothing :: Maybe String)
|
||||
])
|
||||
else do
|
||||
status ok200
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .= (5 :: Integer)
|
||||
, "order" .= (Nothing :: Maybe ZGoOrder)
|
||||
, "shop" .= (Nothing :: Maybe String)
|
||||
])
|
||||
else do
|
||||
status ok200
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .= (1 :: Integer)
|
||||
, "order" .= (Nothing :: Maybe ZGoOrder)
|
||||
, "shop" .= (Nothing :: Maybe String)
|
||||
])
|
||||
Just eO -> do
|
||||
status created201
|
||||
Web.Scotty.json
|
||||
(object
|
||||
[ "reportType" .= (1 :: Integer)
|
||||
, "order" .= (Nothing :: Maybe ZGoOrder)
|
||||
, "shop" .= (Nothing :: Maybe String)
|
||||
[ "reportType" .= (0 :: Integer)
|
||||
, "order" .= toJSON (eO :: ZGoOrder)
|
||||
, "shop" .= oname o'
|
||||
])
|
||||
-- Get the xeroaccount code
|
||||
get "/api/xeroaccount" $ do
|
||||
|
|
Loading…
Reference in a new issue