Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

302 lignes
5.4KB

  1. package main
  2. import (
  3. "biukop.com/sfm/loan"
  4. "encoding/json"
  5. log "github.com/sirupsen/logrus"
  6. "net/http"
  7. "time"
  8. )
  9. func decodeJsonPayOutEdit(r *http.Request) (ret loan.PayOut, e error) {
  10. decoder := json.NewDecoder(r.Body)
  11. //decoder.DisallowUnknownFields()
  12. e = decoder.Decode(&ret)
  13. if e != nil {
  14. log.Error("failed decoding PayIn for updating", e.Error())
  15. return
  16. }
  17. return
  18. }
  19. func apiV1PayOutPost(w http.ResponseWriter, r *http.Request, ss *loan.Session) {
  20. input, e := decodeJsonPayOutEdit(r)
  21. log.Println(input)
  22. if e != nil {
  23. apiV1Client404Error(w, r, ss)
  24. return
  25. } else {
  26. lowerBound, _ := time.Parse("2006-01-02", "1900-01-01")
  27. if input.Ts.Before(lowerBound) {
  28. input.Ts = time.Now()
  29. }
  30. e = input.WriteWithRewardIds()
  31. if e != nil {
  32. log.Error("cannot save payout meta", e.Error())
  33. apiV1Client404Error(w, r, ss)
  34. } else {
  35. poEx := loan.PayOutEx{}
  36. e = poEx.Read(input.Id)
  37. if e != nil {
  38. log.Error("weird failed to read PayInEx after successfully write PayIn", input, poEx, e.Error())
  39. apiV1Client404Error(w, r, ss)
  40. } else {
  41. apiV1SendJson(poEx, w, r, ss)
  42. }
  43. }
  44. }
  45. }
  46. func apiV1PayOutPrepared(w http.ResponseWriter, r *http.Request, ss *loan.Session) {
  47. input, e := decodeJsonPayOutEdit(r)
  48. log.Println(input)
  49. if e != nil {
  50. apiV1Client404Error(w, r, ss)
  51. return
  52. }
  53. po := loan.PayOut{}
  54. e = po.Read(input.Id)
  55. if e != nil {
  56. apiV1Client404Error(w, r, ss)
  57. return
  58. }
  59. po.Prepared = input.Prepared
  60. po.Approved = ""
  61. po.Paid = ""
  62. po.PayDate, _ = time.Parse("2006-01-02", "1900-01-01")
  63. po.PayAmount = 0
  64. e = po.Write()
  65. if e != nil {
  66. apiV1Server500Error(w, r)
  67. return
  68. }
  69. ret := loan.PayOutEx{}
  70. e = ret.Read(input.Id)
  71. if e != nil {
  72. apiV1Server500Error(w, r)
  73. return
  74. }
  75. apiV1SendJson(ret, w, r, ss)
  76. }
  77. func apiV1PayOutUnprepared(w http.ResponseWriter, r *http.Request, ss *loan.Session) {
  78. input, e := decodeJsonPayOutEdit(r)
  79. log.Println(input)
  80. if e != nil {
  81. apiV1Client404Error(w, r, ss)
  82. return
  83. }
  84. po := loan.PayOut{}
  85. e = po.Read(input.Id)
  86. if e != nil {
  87. apiV1Client404Error(w, r, ss)
  88. return
  89. }
  90. po.Prepared = ""
  91. po.Approved = ""
  92. po.Paid = ""
  93. po.PayDate, _ = time.Parse("2006-01-02", "1900-01-01")
  94. po.PayAmount = 0
  95. e = po.Write()
  96. if e != nil {
  97. apiV1Server500Error(w, r)
  98. return
  99. }
  100. ret := loan.PayOutEx{}
  101. e = ret.Read(input.Id)
  102. if e != nil {
  103. apiV1Server500Error(w, r)
  104. return
  105. }
  106. apiV1SendJson(ret, w, r, ss)
  107. }
  108. func apiV1PayOutApproved(w http.ResponseWriter, r *http.Request, ss *loan.Session) {
  109. input, e := decodeJsonPayOutEdit(r)
  110. log.Println(input)
  111. if e != nil {
  112. apiV1Client404Error(w, r, ss)
  113. return
  114. }
  115. po := loan.PayOut{}
  116. e = po.Read(input.Id)
  117. if e != nil {
  118. apiV1Client404Error(w, r, ss)
  119. return
  120. }
  121. if po.Prepared == "" {
  122. log.Error("try to approve unprepared payout")
  123. apiV1Client403Error(w, r, ss)
  124. return
  125. }
  126. po.Approved = input.Approved
  127. po.Paid = ""
  128. po.PayDate, _ = time.Parse("2006-01-02", "1900-01-01")
  129. po.PayAmount = 0
  130. e = po.Write()
  131. if e != nil {
  132. apiV1Server500Error(w, r)
  133. return
  134. }
  135. ret := loan.PayOutEx{}
  136. e = ret.Read(input.Id)
  137. if e != nil {
  138. log.Error("can not approve payout ", e)
  139. apiV1Server500Error(w, r)
  140. return
  141. }
  142. apiV1SendJson(ret, w, r, ss)
  143. }
  144. func apiV1PayOutUnapproved(w http.ResponseWriter, r *http.Request, ss *loan.Session) {
  145. input, e := decodeJsonPayOutEdit(r)
  146. log.Println(input)
  147. if e != nil {
  148. apiV1Client404Error(w, r, ss)
  149. return
  150. }
  151. po := loan.PayOut{}
  152. e = po.Read(input.Id)
  153. if e != nil {
  154. apiV1Client404Error(w, r, ss)
  155. return
  156. }
  157. if po.Approved == "" {
  158. log.Error("try to unapprove draft payout")
  159. apiV1Client403Error(w, r, ss)
  160. return
  161. }
  162. po.Approved = ""
  163. po.Paid = ""
  164. po.PayDate, _ = time.Parse("2006-01-02", "1900-01-01")
  165. po.PayAmount = 0
  166. e = po.Write()
  167. if e != nil {
  168. apiV1Server500Error(w, r)
  169. return
  170. }
  171. ret := loan.PayOutEx{}
  172. e = ret.Read(input.Id)
  173. if e != nil {
  174. log.Error("can not approve payout ", e)
  175. apiV1Server500Error(w, r)
  176. return
  177. }
  178. apiV1SendJson(ret, w, r, ss)
  179. }
  180. func apiV1PayOutPaid(w http.ResponseWriter, r *http.Request, ss *loan.Session) {
  181. input, e := decodeJsonPayOutEdit(r)
  182. log.Println(input)
  183. if e != nil {
  184. apiV1Client404Error(w, r, ss)
  185. return
  186. }
  187. po := loan.PayOut{}
  188. e = po.Read(input.Id)
  189. if e != nil {
  190. apiV1Client404Error(w, r, ss)
  191. return
  192. }
  193. if po.Approved == "" || po.Prepared == "" {
  194. log.Error("try to pay draft payout", po)
  195. apiV1Client403Error(w, r, ss)
  196. return
  197. }
  198. po.Paid = input.Paid
  199. po.PayDate = input.PayDate
  200. po.PayAmount = input.PayAmount
  201. e = po.Write()
  202. if e != nil {
  203. apiV1Server500Error(w, r)
  204. return
  205. }
  206. ret := loan.PayOutEx{}
  207. e = ret.Read(input.Id)
  208. if e != nil {
  209. log.Error("can not approve payout ", e)
  210. apiV1Server500Error(w, r)
  211. return
  212. }
  213. apiV1SendJson(ret, w, r, ss)
  214. }
  215. func apiV1PayOutUnpaid(w http.ResponseWriter, r *http.Request, ss *loan.Session) {
  216. input, e := decodeJsonPayOutEdit(r)
  217. log.Println(input)
  218. if e != nil {
  219. apiV1Client404Error(w, r, ss)
  220. return
  221. }
  222. po := loan.PayOut{}
  223. e = po.Read(input.Id)
  224. if e != nil {
  225. apiV1Client404Error(w, r, ss)
  226. return
  227. }
  228. if po.Approved == "" || po.Prepared == "" || po.Paid == "" {
  229. log.Error("try to un-pay draft payout", po)
  230. apiV1Client403Error(w, r, ss)
  231. return
  232. }
  233. po.Paid = ""
  234. po.PayDate, _ = time.Parse("2006-01-02", "1900-01-01")
  235. po.PayAmount = 0
  236. e = po.Write()
  237. if e != nil {
  238. apiV1Server500Error(w, r)
  239. return
  240. }
  241. ret := loan.PayOutEx{}
  242. e = ret.Read(input.Id)
  243. if e != nil {
  244. log.Error("can not approve payout ", e)
  245. apiV1Server500Error(w, r)
  246. return
  247. }
  248. apiV1SendJson(ret, w, r, ss)
  249. }