Advertisement
Guest User

Untitled

a guest
Feb 27th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 23.03 KB | None | 0 0
  1. package handlers
  2.  
  3. import (
  4. "gamification-backend/api/models"
  5. "gamification-backend/constants"
  6. "net/http"
  7. "strconv"
  8.  
  9. "github.com/labstack/echo/v4"
  10. )
  11.  
  12. type (
  13. //EvaluationCompletedDTO Response to endpoint /reports/add --actually unused as response
  14. EvaluationCompletedDTO struct {
  15. ID int `json:"id"`
  16. Name string `json:"user_name"`
  17. CellID int `json:"user_cell_id"`
  18. LeadCellID int `json:"user_lead_cell"`
  19. SpiritPromLeadCell float64 `json:"spirit_prom_lead_cell"`
  20. Total float64 `json:"total"`
  21. SpiritTotal float64 `json:"spirit_total"`
  22. Period string `json:"period"`
  23. SpiritPromAuto SpiritLetterModel `json:"spirit_prom_auto"`
  24. SpiritPromLeader SpiritLetterModel `json:"spirit_prom_leader"`
  25. SpiritPromExternals SpiritLetterModel `json:"spirit_prom_externals"`
  26. SpiritPromPair SpiritLetterModel `json:"spirit_prom_pair"`
  27. SpiritPromColab SpiritLetterModel `json:"spirit_prom_colaborators"`
  28. SpiritCollection []SpiritModel `json:"spirit_collection"`
  29. GoalsTotal float64 `json:"goals_total"`
  30. GoalPromAuto float64 `json:"goal_prom_auto"`
  31. GoalPromLeader float64 `json:"goal_prom_leader"`
  32. GoalsCollection []GoalModel `json:"goals_collection"`
  33. }
  34.  
  35. //SpiritModel struct
  36. SpiritModel struct {
  37. EvaluationID int `json:"evaluation_id"`
  38. EvaluatorID int `json:"evaluator_id"`
  39. EvaluatorName string `json:"evaluator_name"`
  40. Spoints int `json:"s_points"`
  41. Ppoints int `json:"p_points"`
  42. Ipoints int `json:"i_points"`
  43. Rpoints int `json:"r_points"`
  44. I2points int `json:"i__points"`
  45. Tpoints int `json:"t_points"`
  46. Type string `json:"evaluator_type"`
  47. }
  48.  
  49. //SpiritLetterModel struct
  50. SpiritLetterModel struct {
  51. S int `json:"s_points"`
  52. P int `json:"p_points"`
  53. I int `json:"i_points"`
  54. R int `json:"r_points"`
  55. I2 int `json:"i__points"`
  56. T int `json:"t_points"`
  57. EvaluationsCount int `json:"evaluations_count"`
  58. SpiritProm float64 `json:"spirit_prom"`
  59. }
  60.  
  61. //GoalModel struct
  62. GoalModel struct {
  63. EvaluationID int `json:"evaluation_id"`
  64. EvaluatorID int `json:"evaluator_id"`
  65. EvaluatorName string `json:"evaluator_name"`
  66. Points int `json:"points"`
  67. Type string `json:"evaluator_type"`
  68. }
  69.  
  70. //ReportResponseDTO Response to endpoint /report/get
  71. ReportResponseDTO struct {
  72. ID int `json:"idUser"`
  73. Name string `json:"name"`
  74. Cell string `json:"cell"`
  75. LeaderName string `json:"leader"`
  76. Period string `json:"period"`
  77. Role string `json:"role"`
  78. Total float64 `json:"totalResult"`
  79. CompromiseTotal float64 `json:"totalCompromise"`
  80. SpiritTotal float64 `json:"totalSpirit"`
  81. EvaluationCompromise EvaluationCompromise `json:"evaluacionCompromisos"`
  82. EvaluationSpirit EvaluationSpirit `json:"evaluacionSpirit"`
  83. EvaluationLeader []EvaluationLeader `json:"evaluacionLider"`
  84. }
  85.  
  86. EvaluationCompromise struct {
  87. LeaderCompromise LeaderCompromise `json:"leader"`
  88. AutoCompromise AutoCompromise `json:"auto"`
  89. }
  90.  
  91. LeaderCompromise struct {
  92. Calification float64 `json:"nota"`
  93. Comment string `json:"comentario"`
  94. }
  95.  
  96. AutoCompromise struct {
  97. Calification float64 `json:"nota"`
  98. Comment string `json:"comentario"`
  99. Innovation string `json:"inovacion"`
  100. }
  101.  
  102. EvaluationSpirit struct {
  103. Leader EvaluationSpiritLetter `json:"lider"`
  104. Auto EvaluationSpiritLetter `json:"auto"`
  105. Pairs EvaluationSpiritLetter `json:"pares"`
  106. Externs EvaluationSpiritLetter `json:"externos"`
  107. }
  108.  
  109. EvaluationSpiritLetter struct {
  110. S int `json:"0"`
  111. P int `json:"1"`
  112. I int `json:"2"`
  113. R int `json:"3"`
  114. I2 int `json:"4"`
  115. T int `json:"5"`
  116. Prom float64 `json:"promedio"`
  117. Comments []string `json:"comentarios"`
  118. }
  119.  
  120. EvaluationLeader struct {
  121. ID int `json:"ID"`
  122. Question string `json:"pregunta"`
  123. Answers []string `json:"respuestas"`
  124. }
  125. )
  126.  
  127. //GetReport get report for given params
  128. func GetReport(c echo.Context) error {
  129. // name := getActiveName(c)
  130. // if !checkRole(name, constants.ROLE_ADMIN) && !checkRole(name, constants.ROLE_HCADMIN) {
  131. // return c.JSON(http.StatusUnauthorized, responseType{constants.VoidResponse, constants.VoidResponse})
  132. // }
  133.  
  134. userID := c.QueryParam("user_id")
  135. period := c.QueryParam("period")
  136.  
  137. if userID == "" {
  138. userID = strconv.Itoa(getActiveUser(c))
  139. }
  140.  
  141. if period == "" {
  142. period = "2019"
  143. }
  144.  
  145. evaluation, err := models.GetEvaluationCompleted(userID, period)
  146. if err != nil {
  147. return c.JSON(http.StatusInternalServerError, responseType{constants.VoidResponse, err.Error()})
  148. }
  149.  
  150. uID, _ := strconv.Atoi(userID)
  151. user, err := models.GetUserByID(uID)
  152. if err != nil {
  153. return c.JSON(http.StatusInternalServerError, responseType{constants.VoidResponse, err.Error()})
  154. }
  155.  
  156. cID, err := models.GetCellID(uID)
  157. if err != nil {
  158. return c.JSON(http.StatusInternalServerError, responseType{constants.VoidResponse, err.Error()})
  159. }
  160.  
  161. cell, err := models.GetCell(cID)
  162. if err != nil {
  163. return c.JSON(http.StatusInternalServerError, responseType{constants.VoidResponse, err.Error()})
  164. }
  165.  
  166. uLeader, err := models.GetUserByID(cell.LeaderID)
  167. if err != nil {
  168. return c.JSON(http.StatusInternalServerError, responseType{constants.VoidResponse, err.Error()})
  169. }
  170.  
  171. leader, err := models.IsLeader(uID)
  172. if err != nil {
  173. return c.JSON(http.StatusInternalServerError, responseType{constants.VoidResponse, err.Error()})
  174. }
  175.  
  176. response := new(ReportResponseDTO)
  177. response.ID = uID
  178. response.Name = user.Name + " " + user.Surname
  179. response.Cell = cell.Title
  180.  
  181. if leader {
  182. response.Role = "leader"
  183. } else {
  184. response.Role = "colaborator"
  185. }
  186.  
  187. response.LeaderName = uLeader.Name + " " + uLeader.Surname
  188. response.Period = period
  189. response.Total = evaluation.FinalResult
  190. response.CompromiseTotal = evaluation.GoalsResult
  191. response.SpiritTotal = evaluation.SpiritResult
  192. iPeriod, err := strconv.Atoi(period)
  193.  
  194. gEvaluation, err := models.GetEvaluationGoals(uID, uLeader.ID, iPeriod)
  195. if err != nil {
  196. return c.JSON(http.StatusInternalServerError, responseType{constants.VoidResponse, err.Error()})
  197. }
  198.  
  199. response.EvaluationCompromise.LeaderCompromise.Calification = evaluation.GoalsResult
  200. response.EvaluationCompromise.LeaderCompromise.Comment = gEvaluation.GoalEvaluation.Comment
  201.  
  202. aEvaluation, err := models.GetEvaluationGoals(uID, uID, iPeriod)
  203. if err != nil {
  204. return c.JSON(http.StatusInternalServerError, responseType{constants.VoidResponse, err.Error()})
  205. }
  206.  
  207. response.EvaluationCompromise.AutoCompromise.Calification = evaluation.ResultsGoalsAuto
  208. response.EvaluationCompromise.AutoCompromise.Comment = aEvaluation.GoalEvaluation.Comment
  209.  
  210. innovation, err := models.GetInnovateValueByUserID(uID)
  211. if err != nil {
  212. return c.JSON(http.StatusInternalServerError, responseType{constants.VoidResponse, err.Error()})
  213. }
  214.  
  215. response.EvaluationCompromise.AutoCompromise.Innovation = innovation
  216.  
  217. response.EvaluationSpirit.Auto.Prom = evaluation.ResultSpiritAuto
  218. response.EvaluationSpirit.Leader.Prom = evaluation.ResultSpiritLeader
  219. response.EvaluationSpirit.Pairs.Prom = evaluation.ResultSpiritPairs
  220. response.EvaluationSpirit.Externs.Prom = evaluation.ResultSpiritExternals
  221.  
  222. return c.JSON(http.StatusOK, response)
  223. }
  224.  
  225. //GenerateReport Generates report of evaluations for given params
  226. func GenerateReport(c echo.Context) error {
  227. // name := getActiveName(c)
  228. // if !checkRole(name, constants.ROLE_ADMIN) && !checkRole(name, constants.ROLE_HCADMIN) {
  229. // return c.JSON(http.StatusUnauthorized, responseType{constants.VoidResponse, constants.VoidResponse})
  230. // }
  231.  
  232. userID := c.QueryParam("user_id")
  233. reports, err := models.GetReport(userID)
  234. if err != nil {
  235. return c.JSON(http.StatusInternalServerError, responseType{constants.VoidResponse, err.Error()})
  236. } else if len(*reports) <= 0 {
  237. return c.JSON(http.StatusOK, responseType{constants.VoidResponse, constants.VoidResponse})
  238. }
  239.  
  240. endResponse := parseData(reports)
  241. if len(*endResponse) <= 0 {
  242. return c.JSON(http.StatusOK, responseType{constants.VoidResponse, constants.VoidResponse})
  243. }
  244.  
  245. endResponse = calcData(endResponse)
  246. if len(*endResponse) > 1 {
  247. evaluations := toEvaluationCompletedCollection(endResponse)
  248.  
  249. for _, evaluation := range *evaluations {
  250. err = models.SaveReport(evaluation)
  251. if err != nil {
  252. continue
  253. }
  254. }
  255.  
  256. // return c.JSON(http.StatusOK, responseType{constants.Completed, constants.VoidResponse})
  257. return c.JSON(http.StatusOK, endResponse)
  258. }
  259.  
  260. response := (*endResponse)[0]
  261. evaluation := toEvaluationCompleted(response)
  262.  
  263. err = models.SaveReport(*evaluation)
  264. if err != nil {
  265. return c.JSON(http.StatusInternalServerError, responseType{constants.VoidResponse, err.Error()})
  266. }
  267.  
  268. // return c.JSON(http.StatusOK, responseType{constants.Completed, constants.VoidResponse})
  269. return c.JSON(http.StatusOK, response)
  270. }
  271.  
  272. func parseData(reports *[]models.Report) *[]EvaluationCompletedDTO {
  273. retResponse := new([]EvaluationCompletedDTO)
  274.  
  275. for _, report := range *reports {
  276. if len(*retResponse) > 0 {
  277. for index, response := range *retResponse {
  278. if report.UserID == response.ID {
  279. respp := new(EvaluationCompletedDTO)
  280. respp = &response
  281.  
  282. if report.CategoryName == constants.EvaluationPrinciples {
  283. spirit := toSpiritModel(report)
  284. respp.SpiritCollection = append(respp.SpiritCollection, *spirit)
  285. } else if report.CategoryName == constants.GoalsCategory {
  286. goal := toGoalModel(report)
  287. response.GoalsCollection = append(response.GoalsCollection, *goal)
  288. }
  289.  
  290. (*retResponse)[index] = *respp
  291. break
  292. } else {
  293. exists := false
  294. for _, resp0nse := range *retResponse {
  295. if report.UserID == resp0nse.ID {
  296. exists = true
  297. break
  298. }
  299. }
  300.  
  301. if !exists {
  302. resp := toEvaluationCompletedDTO(report)
  303. *retResponse = append(*retResponse, *resp)
  304. break
  305. }
  306. }
  307. }
  308. } else {
  309. resp := toEvaluationCompletedDTO(report)
  310. *retResponse = append(*retResponse, *resp)
  311. }
  312. }
  313.  
  314. return retResponse
  315. }
  316.  
  317. func calcData(responseCollection *[]EvaluationCompletedDTO) *[]EvaluationCompletedDTO {
  318. for index, response := range *responseCollection {
  319. letter := new([5][6]int)
  320. counter := new([5]int)
  321.  
  322. for _, spirit := range response.SpiritCollection {
  323. switch spirit.Type {
  324. case constants.REL_AUTO:
  325. letter[0][0] += spirit.Spoints
  326. letter[0][1] += spirit.Ppoints
  327. letter[0][2] += spirit.Ipoints
  328. letter[0][3] += spirit.Rpoints
  329. letter[0][4] += spirit.I2points
  330. letter[0][5] += spirit.Tpoints
  331. counter[0]++
  332. case constants.REL_LEADER:
  333. letter[1][0] += spirit.Spoints
  334. letter[1][1] += spirit.Ppoints
  335. letter[1][2] += spirit.Ipoints
  336. letter[1][3] += spirit.Rpoints
  337. letter[1][4] += spirit.I2points
  338. letter[1][5] += spirit.Tpoints
  339. counter[1]++
  340. case constants.REL_EXTERNAL:
  341. letter[2][0] += spirit.Spoints
  342. letter[2][1] += spirit.Ppoints
  343. letter[2][2] += spirit.Ipoints
  344. letter[2][3] += spirit.Rpoints
  345. letter[2][4] += spirit.I2points
  346. letter[2][5] += spirit.Tpoints
  347. counter[2]++
  348. case constants.REL_PAIR:
  349. letter[3][0] += spirit.Spoints
  350. letter[3][1] += spirit.Ppoints
  351. letter[3][2] += spirit.Ipoints
  352. letter[3][3] += spirit.Rpoints
  353. letter[3][4] += spirit.I2points
  354. letter[3][5] += spirit.Tpoints
  355. counter[3]++
  356. case constants.REL_COLAB:
  357. letter[4][0] += spirit.Spoints
  358. letter[4][1] += spirit.Ppoints
  359. letter[4][2] += spirit.Ipoints
  360. letter[4][3] += spirit.Rpoints
  361. letter[4][4] += spirit.I2points
  362. letter[4][5] += spirit.Tpoints
  363. counter[4]++
  364. }
  365. }
  366.  
  367. respp := new(EvaluationCompletedDTO)
  368. respp = &response
  369.  
  370. // Auto evaluations
  371. respp.SpiritPromAuto.S = letter[0][0]
  372. respp.SpiritPromAuto.P = letter[0][1]
  373. respp.SpiritPromAuto.I = letter[0][2]
  374. respp.SpiritPromAuto.R = letter[0][3]
  375. respp.SpiritPromAuto.I2 = letter[0][4]
  376. respp.SpiritPromAuto.T = letter[0][5]
  377. respp.SpiritPromAuto.EvaluationsCount = counter[0]
  378.  
  379. if counter[0] > 0 {
  380. if respp.SpiritPromAuto.S > 0 {
  381. respp.SpiritPromAuto.S /= counter[0]
  382. }
  383.  
  384. if respp.SpiritPromAuto.P > 0 {
  385. respp.SpiritPromAuto.P /= counter[0]
  386. }
  387.  
  388. if respp.SpiritPromAuto.I > 0 {
  389. respp.SpiritPromAuto.I /= counter[0]
  390. }
  391.  
  392. if respp.SpiritPromAuto.R > 0 {
  393. respp.SpiritPromAuto.R /= counter[0]
  394. }
  395.  
  396. if respp.SpiritPromAuto.I2 > 0 {
  397. respp.SpiritPromAuto.I2 /= counter[0]
  398. }
  399.  
  400. if respp.SpiritPromAuto.T > 0 {
  401. respp.SpiritPromAuto.T /= counter[0]
  402. }
  403. }
  404.  
  405. respp.SpiritPromAuto.SpiritProm =
  406. float64(respp.SpiritPromAuto.S +
  407. respp.SpiritPromAuto.P +
  408. respp.SpiritPromAuto.I +
  409. respp.SpiritPromAuto.R +
  410. respp.SpiritPromAuto.I2 +
  411. respp.SpiritPromAuto.T)
  412.  
  413. if respp.SpiritPromAuto.SpiritProm > 0 {
  414. respp.SpiritPromAuto.SpiritProm /= 6
  415. }
  416.  
  417. // Leader evaluations
  418. respp.SpiritPromLeader.S = letter[1][0]
  419. respp.SpiritPromLeader.P = letter[1][1]
  420. respp.SpiritPromLeader.I = letter[1][2]
  421. respp.SpiritPromLeader.R = letter[1][3]
  422. respp.SpiritPromLeader.I2 = letter[1][4]
  423. respp.SpiritPromLeader.T = letter[1][5]
  424. respp.SpiritPromLeader.EvaluationsCount = counter[1]
  425.  
  426. if counter[1] > 0 {
  427. if respp.SpiritPromLeader.S > 0 {
  428. respp.SpiritPromLeader.S /= counter[1]
  429. }
  430.  
  431. if respp.SpiritPromLeader.P > 0 {
  432. respp.SpiritPromLeader.P /= counter[1]
  433. }
  434.  
  435. if respp.SpiritPromLeader.I > 0 {
  436. respp.SpiritPromLeader.I /= counter[1]
  437. }
  438.  
  439. if respp.SpiritPromLeader.R > 0 {
  440. respp.SpiritPromLeader.R /= counter[1]
  441. }
  442.  
  443. if respp.SpiritPromLeader.I2 > 0 {
  444. respp.SpiritPromLeader.I2 /= counter[1]
  445. }
  446.  
  447. if respp.SpiritPromLeader.T > 0 {
  448. respp.SpiritPromLeader.T /= counter[1]
  449. }
  450. }
  451.  
  452. respp.SpiritPromLeader.SpiritProm =
  453. float64(respp.SpiritPromLeader.S +
  454. respp.SpiritPromLeader.P +
  455. respp.SpiritPromLeader.I +
  456. respp.SpiritPromLeader.R +
  457. respp.SpiritPromLeader.I2 +
  458. respp.SpiritPromLeader.T)
  459.  
  460. if respp.SpiritPromLeader.SpiritProm > 0 {
  461. respp.SpiritPromLeader.SpiritProm /= 6
  462. }
  463.  
  464. // Externals evaluations
  465. respp.SpiritPromExternals.S = letter[2][0]
  466. respp.SpiritPromExternals.P = letter[2][1]
  467. respp.SpiritPromExternals.I = letter[2][2]
  468. respp.SpiritPromExternals.R = letter[2][3]
  469. respp.SpiritPromExternals.I2 = letter[2][4]
  470. respp.SpiritPromExternals.T = letter[2][5]
  471. respp.SpiritPromExternals.EvaluationsCount = counter[2]
  472.  
  473. if counter[2] > 0 {
  474. if respp.SpiritPromExternals.S > 0 {
  475. respp.SpiritPromExternals.S /= counter[2]
  476. }
  477.  
  478. if respp.SpiritPromExternals.P > 0 {
  479. respp.SpiritPromExternals.P /= counter[2]
  480. }
  481.  
  482. if respp.SpiritPromExternals.I > 0 {
  483. respp.SpiritPromExternals.I /= counter[2]
  484. }
  485.  
  486. if respp.SpiritPromExternals.R > 0 {
  487. respp.SpiritPromExternals.R /= counter[2]
  488. }
  489.  
  490. if respp.SpiritPromExternals.I2 > 0 {
  491. respp.SpiritPromExternals.I2 /= counter[2]
  492. }
  493.  
  494. if respp.SpiritPromExternals.T > 0 {
  495. respp.SpiritPromExternals.T /= counter[2]
  496. }
  497. }
  498.  
  499. respp.SpiritPromExternals.SpiritProm =
  500. float64(respp.SpiritPromExternals.S +
  501. respp.SpiritPromExternals.P +
  502. respp.SpiritPromExternals.I +
  503. respp.SpiritPromExternals.R +
  504. respp.SpiritPromExternals.I2 +
  505. respp.SpiritPromExternals.T)
  506.  
  507. if respp.SpiritPromExternals.SpiritProm > 0 {
  508. respp.SpiritPromExternals.SpiritProm /= 6
  509. }
  510.  
  511. // Pair evaluations
  512. respp.SpiritPromPair.S = letter[3][0]
  513. respp.SpiritPromPair.P = letter[3][1]
  514. respp.SpiritPromPair.I = letter[3][2]
  515. respp.SpiritPromPair.R = letter[3][3]
  516. respp.SpiritPromPair.I2 = letter[3][4]
  517. respp.SpiritPromPair.T = letter[3][5]
  518. respp.SpiritPromPair.EvaluationsCount = counter[3]
  519.  
  520. if counter[3] > 0 {
  521. if respp.SpiritPromPair.S > 0 {
  522. respp.SpiritPromPair.S /= counter[3]
  523. }
  524.  
  525. if respp.SpiritPromPair.P > 0 {
  526. respp.SpiritPromPair.P /= counter[3]
  527. }
  528.  
  529. if respp.SpiritPromPair.I > 0 {
  530. respp.SpiritPromPair.I /= counter[3]
  531. }
  532.  
  533. if respp.SpiritPromPair.R > 0 {
  534. respp.SpiritPromPair.R /= counter[3]
  535. }
  536.  
  537. if respp.SpiritPromPair.I2 > 0 {
  538. respp.SpiritPromPair.I2 /= counter[3]
  539. }
  540.  
  541. if respp.SpiritPromPair.T > 0 {
  542. respp.SpiritPromPair.T /= counter[3]
  543. }
  544. }
  545.  
  546. respp.SpiritPromPair.SpiritProm =
  547. float64(respp.SpiritPromPair.S +
  548. respp.SpiritPromPair.P +
  549. respp.SpiritPromPair.I +
  550. respp.SpiritPromPair.R +
  551. respp.SpiritPromPair.I2 +
  552. respp.SpiritPromPair.T)
  553.  
  554. if respp.SpiritPromPair.SpiritProm > 0 {
  555. respp.SpiritPromPair.SpiritProm /= 6
  556. }
  557.  
  558. // Colaborators evaluations
  559. respp.SpiritPromColab.S = letter[4][0]
  560. respp.SpiritPromColab.P = letter[4][1]
  561. respp.SpiritPromColab.I = letter[4][2]
  562. respp.SpiritPromColab.R = letter[4][3]
  563. respp.SpiritPromColab.I2 = letter[4][4]
  564. respp.SpiritPromColab.T = letter[4][5]
  565. respp.SpiritPromColab.EvaluationsCount = counter[4]
  566.  
  567. if counter[4] > 0 {
  568. if respp.SpiritPromColab.S > 0 {
  569. respp.SpiritPromColab.S /= counter[4]
  570. }
  571.  
  572. if respp.SpiritPromColab.P > 0 {
  573. respp.SpiritPromColab.P /= counter[4]
  574. }
  575.  
  576. if respp.SpiritPromColab.I > 0 {
  577. respp.SpiritPromColab.I /= counter[4]
  578. }
  579.  
  580. if respp.SpiritPromColab.R > 0 {
  581. respp.SpiritPromColab.R /= counter[4]
  582. }
  583.  
  584. if respp.SpiritPromColab.I2 > 0 {
  585. respp.SpiritPromColab.I2 /= counter[4]
  586. }
  587.  
  588. if respp.SpiritPromColab.T > 0 {
  589. respp.SpiritPromColab.T /= counter[4]
  590. }
  591. }
  592.  
  593. respp.SpiritPromColab.SpiritProm =
  594. float64(respp.SpiritPromColab.S +
  595. respp.SpiritPromColab.P +
  596. respp.SpiritPromColab.I +
  597. respp.SpiritPromColab.R +
  598. respp.SpiritPromColab.I2 +
  599. respp.SpiritPromColab.T)
  600.  
  601. if respp.SpiritPromColab.SpiritProm > 0 {
  602. respp.SpiritPromColab.SpiritProm /= 6
  603. }
  604. // END SPIRIT
  605.  
  606. leaderPercent := respp.SpiritPromLeader.SpiritProm * 0.9
  607. ExternsPairPercent := (respp.SpiritPromExternals.SpiritProm + respp.SpiritPromPair.SpiritProm) * 0.1
  608. respp.SpiritTotal = leaderPercent + ExternsPairPercent
  609.  
  610. pointsGoals := new([4]int)
  611. counter[0] = 0
  612. counter[1] = 0
  613.  
  614. for _, goal := range response.GoalsCollection {
  615. switch goal.Type {
  616. case constants.REL_AUTO:
  617. pointsGoals[0] += goal.Points
  618. counter[0]++
  619. case constants.REL_LEADER:
  620. pointsGoals[1] += goal.Points
  621. counter[1]++
  622. }
  623. }
  624.  
  625. if pointsGoals[0] > 0 && counter[0] > 0 {
  626. respp.GoalPromAuto = float64(pointsGoals[0] / counter[0])
  627. }
  628.  
  629. if pointsGoals[1] > 0 && counter[1] > 0 {
  630. respp.GoalPromLeader = float64(pointsGoals[1] / counter[1])
  631. }
  632.  
  633. respp.GoalsTotal = float64(pointsGoals[1])
  634. goalPercent := respp.GoalsTotal * 0.6
  635. spiritPercent := respp.SpiritTotal * 0.4
  636. respp.Total = (goalPercent + spiritPercent) / 2
  637. respp.SpiritPromLeadCell = respp.SpiritPromColab.SpiritProm
  638.  
  639. (*responseCollection)[index] = *respp
  640. }
  641.  
  642. return responseCollection
  643. }
  644.  
  645. // func checkRole(name string, rol string) bool {
  646. // roles, err := getUserRole(name)
  647. // if err != nil {
  648. // return false
  649. // }
  650.  
  651. // result := false
  652.  
  653. // for _, role := range roles {
  654. // if role == rol {
  655. // result = true
  656. // break
  657. // }
  658. // }
  659.  
  660. // return result
  661. // }
  662.  
  663. func toEvaluationCompletedDTO(report models.Report) *EvaluationCompletedDTO {
  664. response := new(EvaluationCompletedDTO)
  665. response.ID = report.UserID
  666. response.Name = report.UserName + " " + report.UserSurname
  667. response.CellID = report.UserCellID
  668. response.SpiritCollection = []SpiritModel{}
  669. response.GoalsCollection = []GoalModel{}
  670. response.LeadCellID = report.UserLeadCellID
  671. response.Period = "2019"
  672.  
  673. if report.CategoryName == constants.EvaluationPrinciples {
  674. spirit := toSpiritModel(report)
  675. response.SpiritCollection = append(response.SpiritCollection, *spirit)
  676. } else if report.CategoryName == constants.GoalsCategory {
  677. goal := toGoalModel(report)
  678. response.GoalsCollection = append(response.GoalsCollection, *goal)
  679. }
  680.  
  681. return response
  682. }
  683.  
  684. func toSpiritModel(report models.Report) *SpiritModel {
  685. spirit := new(SpiritModel)
  686. spirit.Spoints = report.Spoints
  687. spirit.Ppoints = report.Ppoints
  688. spirit.Ipoints = report.Ipoints
  689. spirit.Rpoints = report.Rpoints
  690. spirit.I2points = report.I2points
  691. spirit.Tpoints = report.Tpoints
  692. spirit.EvaluatorID = report.EvaluatorID
  693. spirit.EvaluatorName = report.EvaluatorName + " " + report.EvaluatorSurname
  694. spirit.EvaluationID = report.EvaluationID
  695. spirit.Type = getUsersRelation(report.UserID, report.EvaluatorID, report.UserCellID, report.EvaluatorCellID, report.UserLeaderID, report.UserLeadCellID)
  696. return spirit
  697. }
  698.  
  699. func toGoalModel(report models.Report) *GoalModel {
  700. goal := new(GoalModel)
  701. goal.Points = report.GoalPoints
  702. goal.EvaluatorID = report.EvaluatorID
  703. goal.EvaluatorName = report.EvaluatorName + " " + report.EvaluatorSurname
  704. goal.EvaluationID = report.EvaluationID
  705. goal.Type = getUsersRelation(report.UserID, report.EvaluatorID, report.UserCellID, report.EvaluatorCellID, report.UserLeaderID, report.UserLeadCellID)
  706. return goal
  707. }
  708.  
  709. func getUsersRelation(userAID int, userBID int, userACellID int, userBCellID int, userLeaderID int, userLeadCell int) string {
  710. if userAID == userBID {
  711. return constants.REL_AUTO
  712. } else if userACellID == userBCellID {
  713. return constants.REL_PAIR
  714. } else if userLeadCell > 0 && userBCellID == userLeadCell {
  715. return constants.REL_COLAB
  716. } else if userBID != userLeaderID {
  717. return constants.REL_EXTERNAL
  718. } else {
  719. return constants.REL_LEADER
  720. }
  721. }
  722.  
  723. func toEvaluationCompletedCollection(collection *[]EvaluationCompletedDTO) *[]models.EvaluationCompleted {
  724. response := new([]models.EvaluationCompleted)
  725.  
  726. for _, element := range *collection {
  727. *response = append(*response, *toEvaluationCompleted(element))
  728. }
  729.  
  730. return response
  731. }
  732.  
  733. func toEvaluationCompleted(data EvaluationCompletedDTO) *models.EvaluationCompleted {
  734. response := new(models.EvaluationCompleted)
  735.  
  736. response.UserID = data.ID
  737. response.UserCellID = data.CellID
  738. response.Period = data.Period
  739. response.FinalResult = data.Total
  740. response.GoalsResult = data.GoalsTotal
  741. response.SpiritResult = data.SpiritTotal
  742. response.ResultSpiritAuto = data.SpiritPromAuto.SpiritProm
  743. response.ResultSpiritLeader = data.SpiritPromLeader.SpiritProm
  744. response.ResultSpiritExternals = data.SpiritPromExternals.SpiritProm
  745. response.ResultSpiritPairs = data.SpiritPromAuto.SpiritProm
  746. response.ResultSpiritLead = data.SpiritPromLeadCell
  747. response.ResultsGoalsAuto = data.GoalPromAuto
  748. response.ShowReport = false
  749.  
  750. return response
  751. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement