github.com/xzl8028/xenia-server@v0.0.0-20190809101854-18450a97da63/api4/task.go (about) 1 // Copyright (c) 2017-present Xenia, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package api4 5 6 import ( 7 "bytes" 8 "encoding/json" 9 "fmt" 10 "io/ioutil" 11 "net/http" 12 "strconv" 13 "time" 14 // "github.com/xzl8028/xenia-server/mlog" 15 "github.com/xzl8028/xenia-server/model" 16 ) 17 18 19 20 type payload2 struct{ 21 22 Id string`json:"id"` 23 Is_pinned bool`json:"is_pinned"` 24 Message string `json:"message"` 25 File_ids []string`json:"file_ids"` 26 Has_reactions bool `json:"has_reactions"` 27 Props props `json:"props"` 28 29 30 } 31 32 33 type payload struct{ 34 Channel_id string `json:"channel_id"` 35 Message string `json:"message"` 36 Root_id string `json:"root_id"` 37 //File_ids []string`json:"file_ids"` 38 Props props `json:"props"` 39 } 40 41 type props struct { 42 From_webhook string `json:"from_webhook"` 43 Override_icon_url string `json:"override_icon_url"` 44 Override_username string `json:"override_username"` 45 Webhook_display_name string `json:"webhook_display_name"` 46 Attachments []attachment `json:"attachments"` 47 } 48 49 50 type attachment struct { 51 Color string `json:"color"` 52 Fields []field `json:"fields"` 53 Actions []action `json:"actions"` 54 } 55 56 57 type field struct{ 58 Short bool `json:"short"` 59 Title string `json:"title"` 60 Value string `json:"value"` 61 } 62 63 type action struct{ 64 Name string `json:"name"` 65 Integration integration_url `json:"integration"` 66 } 67 68 69 type integration_url struct{ 70 Url string `json:"url"` 71 } 72 73 type Host struct { 74 IP string 75 Name string 76 } 77 78 79 func (api *API) InitTask() { 80 // api.BaseRoutes.Tasks.Handle("", api.ApiSessionRequired(createTask)).Methods("POST") 81 // api.BaseRoutes.Task.Handle("", api.ApiSessionRequired(patchTask)).Methods("PUT") 82 api.BaseRoutes.Task.Handle("", api.ApiSessionRequired(getTask)).Methods("GET") 83 api.BaseRoutes.Tasks.Handle("", api.ApiSessionRequired(getTasks)).Methods("GET") 84 api.BaseRoutes.Tasks.Handle("/withteam", api.ApiSessionRequired(getTasksWithTeam)).Methods("GET") 85 api.BaseRoutes.Task.Handle("/insert", api.ApiSessionRequired(insertTask)).Methods("POST") 86 api.BaseRoutes.Task.Handle("/", api.ApiSessionRequired(insertTask)).Methods("POST") 87 api.BaseRoutes.Task.Handle("/insertpost", api.ApiSessionRequired(insertTaskWithPost)).Methods("POST") 88 api.BaseRoutes.Task.Handle("/update", api.ApiSessionRequired(updateTask)).Methods("POST") 89 api.BaseRoutes.Task.Handle("/updatepost", api.ApiSessionRequired(updateTaskStatusQuickWithPost)).Methods("POST") 90 api.BaseRoutes.Task.Handle("/update_status_quick", api.ApiSessionRequired(updateTaskStatusQuick)).Methods("POST") 91 92 // api.BaseRoutes.Task.Handle("/disable", api.ApiSessionRequired(disableTask)).Methods("POST") 93 // api.BaseRoutes.Task.Handle("/enable", api.ApiSessionRequired(enableTask)).Methods("POST") 94 // api.BaseRoutes.Task.Handle("/assign/{user_id:[A-Za-z0-9]+}", api.ApiSessionRequired(assignTask)).Methods("POST") 95 } 96 97 // func createTask(c *Context, w http.ResponseWriter, r *http.Request) { 98 // taskPatch := model.TaskPatchFromJson(r.Body) 99 // if taskPatch == nil { 100 // c.SetInvalidParam("task") 101 // return 102 // } 103 104 // task := &model.Task{ 105 // OwnerId: c.App.Session.UserId, 106 // } 107 // task.Patch(taskPatch) 108 109 // if !c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_CREATE_TASK) { 110 // c.SetPermissionError(model.PERMISSION_CREATE_TASK) 111 // return 112 // } 113 114 // if user, err := c.App.GetUser(c.App.Session.UserId); err == nil { 115 // if user.IsTask { 116 // c.SetPermissionError(model.PERMISSION_CREATE_TASK) 117 // return 118 // } 119 // } 120 121 // if !*c.App.Config().ServiceSettings.EnableTaskAccountCreation { 122 // c.Err = model.NewAppError("createTask", "api.task.create_disabled", nil, "", http.StatusForbidden) 123 // return 124 // } 125 126 // createdTask, err := c.App.CreateTask(tas k) 127 // if err != nil { 128 // c.Err = err 129 // return 130 // } 131 132 // w.WriteHeader(http.StatusCreated) 133 // w.Write(createdTask.ToJson()) 134 // } 135 136 // func patchTask(c *Context, w http.ResponseWriter, r *http.Request) { 137 // c.RequireTaskId() 138 // if c.Err != nil { 139 // return 140 // } 141 // TaskId := c.Params.TaskId 142 143 // taskPatch := model.TaskPatchFromJson(r.Body) 144 // if taskPatch == nil { 145 // c.SetInvalidParam("task") 146 // return 147 // } 148 149 // if err := c.App.SessionHasPermissionToManageTask(c.App.Session, TaskId); err != nil { 150 // c.Err = err 151 // return 152 // } 153 154 // updatedTask, err := c.App.PatchTask(TaskId, taskPatch) 155 // if err != nil { 156 // c.Err = err 157 // return 158 // } 159 160 // w.Write(updatedTask.ToJson()) 161 // } 162 163 func getTask(c *Context, w http.ResponseWriter, r *http.Request) { 164 c.RequireTaskId() 165 if c.Err != nil { 166 return 167 } 168 taskId := c.Params.TaskId 169 170 // includeDeleted := r.URL.Query().Get("include_deleted") == "true" 171 172 task, err := c.App.GetTask(taskId) 173 if err != nil { 174 c.Err = err 175 return 176 } 177 178 // if c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_READ_OTHERS_TASKS) { 179 // // Allow access to any task. 180 // } else if task.OwnerId == c.App.Session.UserId { 181 // if !c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_READ_TASKS) { 182 // // Pretend like the task doesn't exist at all to avoid revealing that the 183 // // user is a task. It's kind of silly in this case, sine we created the task, 184 // // but we don't have read task permissions. 185 // c.Err = model.MakeTaskNotFoundError(TaskId) 186 // return 187 // } 188 // } else { 189 // // Pretend like the task doesn't exist at all, to avoid revealing that the 190 // // user is a task. 191 // c.Err = model.MakeTaskNotFoundError(TaskId) 192 // return 193 // } 194 195 // if c.HandleEtag(task.Etag(), "Get Task", w, r) { 196 // return 197 // } 198 199 w.Write(task.ToJson()) 200 } 201 202 func getTasks(c *Context, w http.ResponseWriter, r *http.Request) { 203 // includeDeleted := r.URL.Query().Get("include_deleted") == "true" 204 // onlyOrphaned := r.URL.Query().Get("only_orphaned") == "true" 205 206 // var OwnerId string 207 // if c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_READ_OTHERS_TASKS) { 208 // // Get tasks created by any user. 209 // OwnerId = "" 210 // } else if c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_READ_TASKS) { 211 // // Only get tasks created by this user. 212 // OwnerId = c.App.Session.UserId 213 // } else { 214 // c.SetPermissionError(model.PERMISSION_READ_TASKS) 215 // return 216 // } 217 218 tasks, err := c.App.GetTasks() 219 if err != nil { 220 c.Err = err 221 return 222 } 223 224 // if c.HandleEtag(tasks.Etag(), "Get Tasks", w, r) { 225 // return 226 // } 227 228 w.Write(tasks.ToJson()) 229 } 230 231 232 func getTasksWithTeam(c *Context, w http.ResponseWriter, r *http.Request) { 233 // includeDeleted := r.URL.Query().Get("include_deleted") == "true" 234 // onlyOrphaned := r.URL.Query().Get("only_orphaned") == "true" 235 236 // var OwnerId string 237 // if c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_READ_OTHERS_TASKS) { 238 // // Get tasks created by any user. 239 // OwnerId = "" 240 // } else if c.App.SessionHasPermissionTo(c.App.Session, model.PERMISSION_READ_TASKS) { 241 // // Only get tasks created by this user. 242 // OwnerId = c.App.Session.UserId 243 // } else { 244 // c.SetPermissionError(model.PERMISSION_READ_TASKS) 245 // return 246 // } 247 248 teams,errteam := c.App.GetTeamMembersForUser(c.App.Session.UserId) 249 if(errteam!=nil){ 250 return; 251 } 252 253 254 tasks, err := c.App.GetAllWithTeamId(teams[0].TeamId) 255 if err != nil { 256 c.Err = err 257 return 258 } 259 260 261 // if c.HandleEtag(tasks.Etag(), "Get Tasks", w, r) { 262 // return 263 // } 264 265 w.Write(tasks.ToJson()) 266 } 267 268 269 270 // func disableTask(c *Context, w http.ResponseWriter, r *http.Request) { 271 // updateTaskActive(c, w, r, false) 272 // } 273 274 // func enableTask(c *Context, w http.ResponseWriter, r *http.Request) { 275 // updateTaskActive(c, w, r, true) 276 // } 277 278 func updateTask(c *Context, w http.ResponseWriter, r *http.Request) { 279 c.RequireTaskId() 280 if c.Err != nil { 281 return 282 } 283 taskId := c.Params.TaskId 284 285 old_task, err := c.App.GetTask(taskId) 286 if err != nil { 287 c.Err = err 288 return 289 } 290 291 new_task := old_task 292 293 // if r.URL.Query().Get("task_id") != "" { 294 // i, err1 := strconv.Atoi(r.URL.Query().Get("task_id")) 295 // err1 = err1 296 // new_task.TaskId = i 297 // } 298 299 if r.URL.Query().Get("create_at") != "" { 300 i, err1 := strconv.ParseInt(r.URL.Query().Get("create_at"), 10, 64) 301 err1 = err1 302 new_task.CreateAt = i 303 } 304 305 if r.URL.Query().Get("due_at") != "" { 306 i, err1 := strconv.ParseInt(r.URL.Query().Get("due_at"), 10, 64) 307 err1 = err1 308 new_task.DueAt = i 309 } 310 311 if r.URL.Query().Get("confirm_at") != "" { 312 i, err1 := strconv.ParseInt(r.URL.Query().Get("confirm_at"), 10, 64) 313 err1 = err1 314 new_task.ConfirmAt = i 315 } 316 317 if r.URL.Query().Get("finish_at") != "" { 318 i, err1 := strconv.ParseInt(r.URL.Query().Get("finish_at"), 10, 64) 319 err1 = err1 320 new_task.FinishAt = i 321 } 322 323 if r.URL.Query().Get("send_dept") != "" { 324 new_task.SendDept = r.URL.Query().Get("send_dept") 325 } 326 327 if r.URL.Query().Get("receive_dept") != "" { 328 new_task.ReceiveDept = r.URL.Query().Get("receive_dept") 329 } 330 331 if r.URL.Query().Get("room_id") != "" { 332 i, err1 := strconv.Atoi(r.URL.Query().Get("room_id")) 333 err1 = err1 334 new_task.RoomId = i 335 } 336 337 if r.URL.Query().Get("task_type") != "" { 338 new_task.TaskType = r.URL.Query().Get("task_type") 339 } 340 341 if r.URL.Query().Get("note") != "" { 342 new_task.Note = r.URL.Query().Get("note") 343 } 344 345 if r.URL.Query().Get("status") != "" { 346 i, err1 := strconv.Atoi(r.URL.Query().Get("status")) 347 err1 = err1 348 new_task.Status = i 349 } 350 351 352 // if err := c.App.SessionHasPermissionToManageTask(c.App.Session, TaskId); err != nil { 353 // c.Err = err 354 // return 355 // } 356 357 // task, err := c.App.UpdateTaskActive(TaskId, active) 358 // if err != nil { 359 // c.Err = err 360 // return 361 // } 362 363 task, err := c.App.UpdateTask(new_task) 364 if err != nil { 365 c.Err = err 366 return 367 } 368 369 370 371 w.Write(task.ToJson()) 372 } 373 374 375 func updateTaskStatusQuickWithPost(c *Context, w http.ResponseWriter, r *http.Request) { 376 var res string 377 c.RequireTaskId() 378 if c.Err != nil { 379 return 380 } 381 taskId := c.Params.TaskId 382 383 old_task, err := c.App.GetTask(taskId) 384 if err != nil { 385 c.Err = err 386 return 387 } 388 389 390 new_task := old_task 391 392 receiveDeptToId := make(map[string]string) 393 receiveDeptToId["housekeeping"] = "r86qtsc49pbw7cdzigptsgm47a" 394 fmt.Println("!!!POSTTIPM!!!new task.roomid", new_task.DueAt) 395 var due_at_int64 time.Time = time.Unix(0, int64(new_task.DueAt) * int64(time.Millisecond)) 396 due_at_string := due_at_int64.Format("01月02日 15:04") 397 398 //field struct 399 400 field2 := field{Title: "客房号", Value: strconv.Itoa(new_task.RoomId), Short: true} 401 field3 := field{Title: "要求完成时间", Value: due_at_string, Short: true} 402 field4 := field{Title: "任务内容", Value: new_task.TaskType, Short: true} 403 field5 := field{Title: "发单部门", Value: new_task.SendDept, Short: true} 404 field6 := field{Title: "备注", Value: new_task.Note, Short: true} 405 406 407 if r.URL.Query().Get("status") == "1" && old_task.Status == 0 { 408 new_task.ConfirmAt = model.GetMillis() 409 new_task.Status = 1 410 integration_url_self := integration_url{Url: "http://localhost:8065/api/v4/tasks/"+ strconv.Itoa(new_task.TaskId) +"/updatepost?status=2"} 411 action_obj := action{ Name: "确认完成", Integration: integration_url_self } 412 action_self := []action{action_obj} 413 field1 := field{Title: "任务状态", Value: "**执行中**", Short: true} 414 field_self := []field{field1, field2, field3, field4, field5, field6} 415 //attachment struct 416 attachment_obj := attachment{Color:"#2CACE1", Fields:field_self, Actions:action_self} 417 attachment_self := []attachment{attachment_obj} 418 419 //props struct 420 //props_self := props{Attachments: attachment_self } 421 props_self := props{From_webhook:"true", Override_icon_url: "http://s575.com/Uploads/2018-10-31/20170pwu61540976213.png", Override_username: "灵奇任务助手", Webhook_display_name: "task_center", Attachments: attachment_self } 422 423 424 //payload struct 425 payload_self := payload2{Id: old_task.PostId, Is_pinned:false,Message: "任务"+strconv.Itoa(new_task.TaskId),File_ids:[]string{},Has_reactions:false, Props: props_self } 426 427 428 //strinify playload 429 jsonData,err2 := json.Marshal(payload_self) 430 fmt.Println(string(jsonData)+"!!!!! JSON FILE OF PLAYLOAD AFTER MARSHAL !!!! ") 431 if(err2!=nil){ 432 fmt.Println("!!!!!!! POSITION1 !!!!!!!", err2) 433 return 434 } 435 436 437 438 var r2 http.Request 439 r2.Body = ioutil.NopCloser(bytes.NewReader(jsonData)) 440 c.Params.PostId = old_task.PostId 441 res = updatePostWithReturn(c,w,&r2) 442 443 444 } else if r.URL.Query().Get("status") == "2" && (old_task.Status == 1 || old_task.Status == 4){ 445 new_task.FinishAt = model.GetMillis() 446 new_task.Status = 2 447 field1 := field{Title: "任务状态", Value: "**已完成**", Short: true} 448 field_self := []field{field1, field2, field3, field4, field5, field6} 449 //attachment struct 450 attachment_obj := attachment{Color:"#258A28", Fields:field_self} 451 attachment_self := []attachment{attachment_obj} 452 453 //props struct 454 props_self := props{From_webhook:"true", Override_icon_url: "http://s575.com/Uploads/2018-10-31/20170pwu61540976213.png", Override_username: "灵奇任务助手", Webhook_display_name: "task_center", Attachments: attachment_self } 455 456 //payload struct 457 payload_self := payload2{Id: old_task.PostId, Is_pinned:false,Message: "任务"+strconv.Itoa(new_task.TaskId),File_ids:[]string{},Has_reactions:false, Props: props_self } 458 459 460 //strinify playload 461 jsonData,err2 := json.Marshal(payload_self) 462 fmt.Println(string(jsonData)+"!!!!! JSON FILE OF PLAYLOAD AFTER MARSHAL !!!! ") 463 if(err2!=nil){ 464 fmt.Println("!!!!!!! POSITION1 !!!!!!!", err2) 465 return 466 } 467 468 469 470 var r2 http.Request 471 r2.Body = ioutil.NopCloser(bytes.NewReader(jsonData)) 472 c.Params.PostId = old_task.PostId 473 res = updatePostWithReturn(c,w,&r2) 474 475 } else if r.URL.Query().Get("status") == "3" && old_task.Status != 3 && old_task.Status != 2 { 476 new_task.Status = 3 477 field1 := field{Title: "任务状态", Value: "**已取消**", Short: true} 478 field_self := []field{field1, field2, field3, field4, field5, field6} 479 //attachment struct 480 attachment_obj := attachment{Color:"#3D3C40", Fields:field_self} 481 attachment_self := []attachment{attachment_obj} 482 483 //props struct 484 props_self := props{From_webhook:"true", Override_icon_url: "http://s575.com/Uploads/2018-10-31/20170pwu61540976213.png", Override_username: "灵奇任务助手", Webhook_display_name: "task_center", Attachments: attachment_self } 485 486 487 //payload struct 488 payload_self := payload2{Id: old_task.PostId, Is_pinned:false,Message: "任务"+strconv.Itoa(new_task.TaskId),File_ids:[]string{},Has_reactions:false, Props: props_self } 489 490 491 //strinify playload 492 jsonData,err2 := json.Marshal(payload_self) 493 fmt.Println(string(jsonData)+"!!!!! JSON FILE OF PLAYLOAD AFTER MARSHAL !!!! ") 494 if(err2!=nil){ 495 fmt.Println("!!!!!!! POSITION1 !!!!!!!", err2) 496 return 497 } 498 499 var r2 http.Request 500 r2.Body = ioutil.NopCloser(bytes.NewReader(jsonData)) 501 c.Params.PostId = old_task.PostId 502 res = updatePostWithReturn(c,w,&r2) 503 504 505 } else if r.URL.Query().Get("status") == "4" && old_task.Status != 3 && old_task.Status != 2 && old_task.Status != 4 { 506 //超时是4 507 new_task.Status = 4 508 integration_url_self := integration_url{Url: "http://localhost:8065/api/v4/tasks/"+ strconv.Itoa(new_task.TaskId) +"/updatepost?status=2"} 509 action_obj := action{ Name: "确认完成", Integration: integration_url_self } 510 action_self := []action{action_obj} 511 field1 := field{Title: "任务状态", Value: "**已超时**", Short: true} 512 field_self := []field{field1, field2, field3, field4, field5, field6} 513 //attachment struct 514 attachment_obj := attachment{Color:"#FC3D41", Fields:field_self, Actions:action_self} 515 attachment_self := []attachment{attachment_obj} 516 517 //props struct 518 props_self := props{From_webhook:"true", Override_icon_url: "http://s575.com/Uploads/2018-10-31/20170pwu61540976213.png", Override_username: "灵奇任务助手", Webhook_display_name: "task_center", Attachments: attachment_self } 519 520 //payload struct 521 payload_self := payload2{Id: old_task.PostId, Is_pinned:false,Message: "任务"+strconv.Itoa(new_task.TaskId),File_ids:[]string{},Has_reactions:false, Props: props_self } 522 523 524 //strinify playload 525 jsonData,err2 := json.Marshal(payload_self) 526 fmt.Println(string(jsonData)+"!!!!! JSON FILE OF PLAYLOAD AFTER MARSHAL !!!! ") 527 if(err2!=nil){ 528 fmt.Println("!!!!!!! POSITION1 !!!!!!!", err2) 529 return 530 } 531 532 var r2 http.Request 533 r2.Body = ioutil.NopCloser(bytes.NewReader(jsonData)) 534 c.Params.PostId = old_task.PostId 535 res = updatePostWithReturn(c,w,&r2) 536 537 538 } 539 new_task.PostId = res 540 task, err := c.App.UpdateTask(new_task) 541 if err != nil { 542 c.Err = err 543 return 544 } 545 546 w.Write(task.ToJson()) 547 } 548 549 550 551 552 553 554 555 556 func insertTaskWithPost(c *Context, w http.ResponseWriter, r *http.Request) { 557 fmt.Println("!!!!!HERE!!!!") 558 // new_task := model.TaskFromJson(r.Body) 559 var new_task model.Task 560 561 fmt.Println(c.App.Session.TeamMembers[0],"0 here!!!") 562 fmt.Println(len(c.App.Session.TeamMembers),"length!!!") 563 //fmt.Println(c.App.Session.TeamMembers[1],"1 here!!!") 564 565 new_task = insertHelper(new_task,r) 566 567 task, err := c.App.InsertTask(&new_task) 568 if err != nil { 569 c.Err = err 570 return 571 } 572 573 574 // !!!! 做调用create post这个API的数据准备了 !!!! // 575 576 //create a map { receive_dept: channel_id } 577 //此处需要根据不同的酒店数据库情况修改 578 //未来加入更多匹配值 579 //receiveDeptToId := make(map[string]string) 580 //receiveDeptToId["housekeeping"] = "r86qtsc49pbw7cdzigptsgm47a" 581 582 teams,_ := c.App.GetTeamMembersForUser(c.App.Session.UserId) 583 584 channel,errdisplay := c.App.GetByDisplayName(teams[0].TeamId,task.ReceiveDept) 585 if errdisplay!=nil{ 586 c.Err = errdisplay 587 return 588 } 589 590 // integration_url struct 591 integration_url_self := integration_url{Url: "http://localhost:8065/api/v4/tasks/"+ strconv.Itoa(task.TaskId) +"/updatepost?status=1"} 592 593 // action struct 594 action_obj := action{ Name: "确认接收", Integration: integration_url_self } 595 action_self := []action{action_obj} 596 597 //convert due_at into normal Date format for field struct 598 fmt.Println("!!!POSTTIPM!!!new task.roomid", new_task.DueAt) 599 var due_at_int64 time.Time = time.Unix(0, int64(new_task.DueAt) * int64(time.Millisecond)) 600 due_at_string := due_at_int64.Format("01月02日 15:04") 601 602 //field struct 603 field1 := field{Title: "任务状态", Value: "**等待接收**", Short: true} 604 field2 := field{Title: "客房号", Value: strconv.Itoa(new_task.RoomId), Short: true} 605 field3 := field{Title: "要求完成时间", Value: due_at_string, Short: true} 606 field4 := field{Title: "任务内容", Value: new_task.TaskType, Short: true} 607 field5 := field{Title: "发单部门", Value: new_task.SendDept, Short: true} 608 field6 := field{Title: "备注", Value: new_task.Note, Short: true} 609 field_self := []field{field1, field2, field3, field4, field5, field6} 610 611 //attachment struct 612 attachment_obj := attachment{Color:"#9C58E3" ,Fields:field_self, Actions:action_self} 613 attachment_self := []attachment{attachment_obj} 614 615 //props struct 616 props_self := props{From_webhook:"true", Override_icon_url: "http://s575.com/Uploads/2018-10-31/20170pwu61540976213.png", Override_username: "灵奇任务助手", Webhook_display_name: "task_center", Attachments: attachment_self } 617 618 619 620 //payload struct 621 payload_self := payload{Channel_id: channel.Id, Message: "任务"+strconv.Itoa(task.TaskId), Root_id: "", Props: props_self } 622 623 624 //strinify playload 625 jsonData,err2 := json.Marshal(payload_self) 626 fmt.Println(string(jsonData)+"!!!!! JSON FILE OF PLAYLOAD AFTER MARSHAL !!!! ") 627 if(err2!=nil){ 628 fmt.Println("!!!!!!! POSITION1 !!!!!!!", err2) 629 return 630 } 631 632 post := model.PostFromJson(bytes.NewBuffer(jsonData)) 633 if post == nil { 634 c.SetInvalidParam("post") 635 return 636 } 637 fmt.Println("!!!!insert task with post") 638 var r2 http.Request 639 r2.Body = ioutil.NopCloser(bytes.NewReader(jsonData)) 640 641 res := createPostWithReturn(c,w,&r2) 642 task.PostId = res 643 task.TeamId = teams[0].TeamId 644 tasklateset, err := c.App.UpdateTask(task) 645 646 647 648 w.Write(tasklateset.ToJson()) 649 } 650 func insertTask(c *Context, w http.ResponseWriter, r *http.Request) { 651 var new_task model.Task 652 653 654 new_task = insertHelper(new_task,r) 655 // mlog.Debug("passed") 656 657 // if err := c.App.SessionHasPermissionToManageTask(c.App.Session, taskUserId); err != nil { 658 // c.Err = err 659 // return 660 // } 661 662 // task, err := c.App.UpdateTaskActive(taskUserId, active) 663 // if err != nil { 664 // c.Err = err 665 // return 666 // } 667 668 task, err := c.App.InsertTask(&new_task) 669 if err != nil { 670 c.Err = err 671 return 672 } 673 674 w.Write(task.ToJson()) 675 } 676 677 678 func insertHelper(new_task model.Task,r *http.Request)(res model.Task){ 679 new_task.CreateAt = model.GetMillis() 680 681 if r.URL.Query().Get("due_at") != "" { 682 i, err1 := strconv.ParseInt(r.URL.Query().Get("due_at"), 10, 64) 683 err1 = err1 684 new_task.DueAt = i 685 } else { 686 return 687 } 688 689 new_task.ConfirmAt = -1 690 691 new_task.FinishAt = -1 692 693 if r.URL.Query().Get("send_dept") != "" { 694 new_task.SendDept = r.URL.Query().Get("send_dept") 695 } else { 696 return 697 } 698 699 if r.URL.Query().Get("receive_dept") != "" { 700 new_task.ReceiveDept = r.URL.Query().Get("receive_dept") 701 } else { 702 return 703 } 704 705 if r.URL.Query().Get("room_id") != "" { 706 i, err1 := strconv.Atoi(r.URL.Query().Get("room_id")) 707 err1 = err1 708 new_task.RoomId = i 709 } else { 710 return 711 } 712 713 if r.URL.Query().Get("task_type") != "" { 714 new_task.TaskType = r.URL.Query().Get("task_type") 715 } else { 716 return 717 } 718 719 if r.URL.Query().Get("note") != "" { 720 new_task.Note = r.URL.Query().Get("note") 721 } else { 722 return 723 } 724 725 if r.URL.Query().Get("status") != "" { 726 i, err1 := strconv.Atoi(r.URL.Query().Get("status")) 727 err1 = err1 728 new_task.Status = i 729 } else { 730 return 731 } 732 return new_task 733 } 734 735 736 func updateTaskStatusQuick(c *Context, w http.ResponseWriter, r *http.Request) { 737 c.RequireTaskId() 738 if c.Err != nil { 739 return 740 } 741 taskId := c.Params.TaskId 742 743 old_task, err := c.App.GetTask(taskId) 744 if err != nil { 745 c.Err = err 746 return 747 } 748 749 new_task := old_task 750 751 if r.URL.Query().Get("status") == "1" && old_task.Status == 0 { 752 new_task.ConfirmAt = model.GetMillis() 753 new_task.Status = 1 754 } else if r.URL.Query().Get("status") == "2" && old_task.Status == 1 { 755 new_task.FinishAt = model.GetMillis() 756 new_task.Status = 2 757 } else if r.URL.Query().Get("status") == "3" && old_task.Status != 3 && old_task.Status != 2 { 758 new_task.Status = 3 759 } 760 761 task, err := c.App.UpdateTask(new_task) 762 if err != nil { 763 c.Err = err 764 return 765 } 766 767 w.Write(task.ToJson()) 768 } 769 770 // func assignTask(c *Context, w http.ResponseWriter, r *http.Request) { 771 // c.RequireUserId() 772 // c.RequireTaskId() 773 // if c.Err != nil { 774 // return 775 // } 776 // TaskId := c.Params.TaskId 777 // userId := c.Params.UserId 778 779 // if err := c.App.SessionHasPermissionToManageTask(c.App.Session, TaskId); err != nil { 780 // c.Err = err 781 // return 782 // } 783 784 // if user, err := c.App.GetUser(userId); err == nil { 785 // if user.IsTask { 786 // c.SetPermissionError(model.PERMISSION_ASSIGN_TASK) 787 // return 788 // } 789 // } 790 791 // task, err := c.App.UpdateTaskOwner(TaskId, userId) 792 // if err != nil { 793 // c.Err = err 794 // return 795 // } 796 797 // w.Write(task.ToJson()) 798 // }