package main import ( "biukop.com/sfm/loan" "encoding/json" log "github.com/sirupsen/logrus" "net/http" "time" ) func decodeJsonPayOutEdit(r *http.Request) (ret loan.PayOut, e error) { decoder := json.NewDecoder(r.Body) //decoder.DisallowUnknownFields() e = decoder.Decode(&ret) if e != nil { log.Error("failed decoding PayIn for updating", e.Error()) return } return } func apiV1PayOutPost(w http.ResponseWriter, r *http.Request, ss *loan.Session) { input, e := decodeJsonPayOutEdit(r) log.Println(input) if e != nil { apiV1Client404Error(w, r, ss) return } else { lowerBound, _ := time.Parse("2006-01-02", "1900-01-01") if input.Ts.Before(lowerBound) { input.Ts = time.Now() } e = input.WriteWithRewardIds() if e != nil { log.Error("cannot save payout meta", e.Error()) apiV1Client404Error(w, r, ss) } else { poEx := loan.PayOutEx{} e = poEx.Read(input.Id) if e != nil { log.Error("weird failed to read PayInEx after successfully write PayIn", input, poEx, e.Error()) apiV1Client404Error(w, r, ss) } else { apiV1SendJson(poEx, w, r, ss) } } } } func apiV1PayOutPrepared(w http.ResponseWriter, r *http.Request, ss *loan.Session) { input, e := decodeJsonPayOutEdit(r) log.Println(input) if e != nil { apiV1Client404Error(w, r, ss) return } po := loan.PayOut{} e = po.Read(input.Id) if e != nil { apiV1Client404Error(w, r, ss) return } po.Prepared = input.Prepared po.Approved = "" po.Paid = "" po.PayDate, _ = time.Parse("2006-01-02", "1900-01-01") po.PayAmount = 0 e = po.Write() if e != nil { apiV1Server500Error(w, r) return } ret := loan.PayOutEx{} e = ret.Read(input.Id) if e != nil { apiV1Server500Error(w, r) return } apiV1SendJson(ret, w, r, ss) } func apiV1PayOutUnprepared(w http.ResponseWriter, r *http.Request, ss *loan.Session) { input, e := decodeJsonPayOutEdit(r) log.Println(input) if e != nil { apiV1Client404Error(w, r, ss) return } po := loan.PayOut{} e = po.Read(input.Id) if e != nil { apiV1Client404Error(w, r, ss) return } po.Prepared = "" po.Approved = "" po.Paid = "" po.PayDate, _ = time.Parse("2006-01-02", "1900-01-01") po.PayAmount = 0 e = po.Write() if e != nil { apiV1Server500Error(w, r) return } ret := loan.PayOutEx{} e = ret.Read(input.Id) if e != nil { apiV1Server500Error(w, r) return } apiV1SendJson(ret, w, r, ss) } func apiV1PayOutApproved(w http.ResponseWriter, r *http.Request, ss *loan.Session) { input, e := decodeJsonPayOutEdit(r) log.Println(input) if e != nil { apiV1Client404Error(w, r, ss) return } po := loan.PayOut{} e = po.Read(input.Id) if e != nil { apiV1Client404Error(w, r, ss) return } if po.Prepared == "" { log.Error("try to approve unprepared payout") apiV1Client403Error(w, r, ss) return } po.Approved = input.Approved po.Paid = "" po.PayDate, _ = time.Parse("2006-01-02", "1900-01-01") po.PayAmount = 0 e = po.Write() if e != nil { apiV1Server500Error(w, r) return } ret := loan.PayOutEx{} e = ret.Read(input.Id) if e != nil { log.Error("can not approve payout ", e) apiV1Server500Error(w, r) return } apiV1SendJson(ret, w, r, ss) } func apiV1PayOutUnapproved(w http.ResponseWriter, r *http.Request, ss *loan.Session) { input, e := decodeJsonPayOutEdit(r) log.Println(input) if e != nil { apiV1Client404Error(w, r, ss) return } po := loan.PayOut{} e = po.Read(input.Id) if e != nil { apiV1Client404Error(w, r, ss) return } if po.Approved == "" { log.Error("try to unapprove draft payout") apiV1Client403Error(w, r, ss) return } po.Approved = "" po.Paid = "" po.PayDate, _ = time.Parse("2006-01-02", "1900-01-01") po.PayAmount = 0 e = po.Write() if e != nil { apiV1Server500Error(w, r) return } ret := loan.PayOutEx{} e = ret.Read(input.Id) if e != nil { log.Error("can not approve payout ", e) apiV1Server500Error(w, r) return } apiV1SendJson(ret, w, r, ss) } func apiV1PayOutPaid(w http.ResponseWriter, r *http.Request, ss *loan.Session) { input, e := decodeJsonPayOutEdit(r) log.Println(input) if e != nil { apiV1Client404Error(w, r, ss) return } po := loan.PayOut{} e = po.Read(input.Id) if e != nil { apiV1Client404Error(w, r, ss) return } if po.Approved == "" || po.Prepared == "" { log.Error("try to pay draft payout", po) apiV1Client403Error(w, r, ss) return } po.Paid = input.Paid po.PayDate = input.PayDate po.PayAmount = input.PayAmount e = po.Write() if e != nil { apiV1Server500Error(w, r) return } ret := loan.PayOutEx{} e = ret.Read(input.Id) if e != nil { log.Error("can not approve payout ", e) apiV1Server500Error(w, r) return } apiV1SendJson(ret, w, r, ss) } func apiV1PayOutUnpaid(w http.ResponseWriter, r *http.Request, ss *loan.Session) { input, e := decodeJsonPayOutEdit(r) log.Println(input) if e != nil { apiV1Client404Error(w, r, ss) return } po := loan.PayOut{} e = po.Read(input.Id) if e != nil { apiV1Client404Error(w, r, ss) return } if po.Approved == "" || po.Prepared == "" || po.Paid == "" { log.Error("try to un-pay draft payout", po) apiV1Client403Error(w, r, ss) return } po.Paid = "" po.PayDate, _ = time.Parse("2006-01-02", "1900-01-01") po.PayAmount = 0 e = po.Write() if e != nil { apiV1Server500Error(w, r) return } ret := loan.PayOutEx{} e = ret.Read(input.Id) if e != nil { log.Error("can not approve payout ", e) apiV1Server500Error(w, r) return } apiV1SendJson(ret, w, r, ss) }