-
Notifications
You must be signed in to change notification settings - Fork 0
/
Request.elm
82 lines (73 loc) · 2.84 KB
/
Request.elm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
module Request exposing (..)
import Msg exposing (..)
import Model exposing (..)
import Json.Decode as JD
import Http
import Task
decodePAC : JD.Decoder (Result String RetornoPac)
decodePAC =
let
error =
JD.at ["Servicos", "cServico", "MsgErro", "__cdata"] JD.string
|> JD.map Err
-- Correios fez um negocio bugado e quando vem mensagem de observação
-- ele vem na tag MsgErro mesmo
success =
JD.map3 RetornoPac
(JD.at ["Servicos", "cServico", "Valor"] JD.string)
(JD.at ["Servicos", "cServico", "PrazoEntrega"] JD.string)
(JD.oneOf
[ JD.at ["Servicos", "cServico", "MsgErro", "__cdata"] JD.string
|> JD.map Just
, JD.succeed Nothing
])
|> JD.map (\retornoPac ->
if retornoPac.valor == "0,00" then
Err <| Maybe.withDefault "?" retornoPac.obs
else
Ok retornoPac)
in
JD.oneOf [ success, error ]
build_url : TipoEnvio -> Model -> String
build_url tipo model =
let
codigo_servico =
case tipo of
Pac ->
if model.possuiContrato then
model.codigoServicoPac
else
"41106"
Sedex ->
if model.possuiContrato then
model.codigoServicoSedex
else
"40010"
ESedex ->
if model.possuiContrato then
model.codigoServicoESedex
else
"81019"
in
"http://ws.correios.com.br/calculador/CalcPrecoPrazo.aspx" ++
"?nCdEmpresa=" ++ model.codigoEmpresa ++
"&sDsSenha=" ++ model.senha ++
"&nCdServico=" ++ codigo_servico ++
"&sCepOrigem=" ++ model.cepOrigem ++
"&sCepDestino=" ++ model.cepDestino ++
"&nVlPeso=" ++ model.peso ++
"&nCdFormato=1" ++
"&nVlComprimento=" ++ model.comprimento ++
"&nVlLargura=" ++ model.largura ++
"&nVlAltura=" ++ model.altura ++
"&nVlDiametro=0" ++
"&sCdMaoPropria=" ++ (if model.entregaMaoPropria then "S" else "N") ++
"&nVlValorDeclarado=" ++ model.valorDeclarado ++
"&sCdAvisoRecebimento=" ++ (if model.avisoRecebimento then "S" else "N") ++
"&StrRetorno=XML"
sendRequest : TipoEnvio -> Model -> Cmd Msg
sendRequest tipo model =
Http.getString (build_url tipo model)
|> Http.toTask
|> Task.mapError toString
|> Task.attempt ((,) tipo >> ReceivedRequest)