|
- 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)
- }
|