func MyManager(w http.ResponseWriter, r *http.Request) { var err error vars := mux.Vars(r) mgr := "" // ажилтныг хайж олох empCol := db.C("Employee") q := empCol.FindId(vars["empId"]) var emp bson.M err = q.One(&emp) if err == nil { // нэгжийг хайж олох deptCol := db.C("Dept") q1 := deptCol.FindId(emp["Dept"].(string)) var dept bson.M err = q1.One(&dept) if err == nil { mgr = dept["Manager"].(string) } } rpc.WriteJson(r, w, mgr, err) }
func _approveOrReject(approve bool, w http.ResponseWriter, r *http.Request) { var err error vars := mux.Vars(r) // wf хүсэлтийг олох c := db.C(colWfAction) q := c.FindId(vars["id"]) var reqObj bson.M if err = q.One(&reqObj); err != nil { rpc.WriteJson(r, w, nil, errors.New("Буруу хүсэлт !")) return } if reqObj["Active"].(bool) == false { rpc.WriteJson(r, w, nil, errors.New("Өмнө нь ашиглагдсан холбоос байна !")) return } state := "зөвшөөрсөн" msg := "Чөлөө зөвшөөрөгдлөө" if !approve { state = "татгалзсан" msg = "Чөлөөг татгалзлаа" } c1 := db.C("Leave") if err = c1.UpdateId(reqObj["LeaveId"], bson.M{"$set": bson.M{"State": state}}); err == nil { err = c.UpdateId(vars["id"], bson.M{"$set": bson.M{"Active": false}}) } rpc.WriteJson(r, w, msg, err) }
// ирц бүртгэх функц func RegAtt(w http.ResponseWriter, r *http.Request) { var err error obj := bson.M{} if err = rpc.ReadJson(r, &obj); err != nil { rpc.WriteJson(r, w, nil, err) return } obj["_id"] = bson.NewObjectId().Hex() obj["RemoteAddr"] = r.RemoteAddr // TODO: орсон, гарсан эсэхийг ялгаж таних // Map EnrollNumber into Employee ID, Name empC := db.C("Employee") q := empC.Find(bson.M{"CardNo": obj["EnrollNumber"]}) var emp bson.M if err = q.One(&emp); err == nil { obj["Employee"] = bson.M{"_id": emp["_id"], "Name": emp["Name"]} } // Баазад оруулах c := db.C("Attendance") err = c.Insert(obj) rpc.WriteJson(r, w, obj["_id"], err) }
func SaveFeedback(w http.ResponseWriter, r *http.Request) { var err error vars := mux.Vars(r) var obj SurveyFeedback if err = rpc.ReadJson(r, &obj); err != nil { rpc.WriteJson(r, w, nil, err) return } c := db.C("SurveyFeedback") // асуултын тоогоор мөр үүсгэж бичих for _, ans := range obj.Answers { a := bson.M{} a["_id"] = bson.NewObjectId().Hex() a["User"] = r.Header.Get("User") a["Survey"] = vars["surveyId"] a["Question"] = ans["Question"] a["Answer"] = ans["Answer"] c.Insert(a) } // OK - амжилттай // DUP - давхардсан // LIMIT - хариулах хязгаарт хүрсэн rpc.WriteJson(r, w, "OK", err) }
func UnSubscribe(w http.ResponseWriter, r *http.Request) { var err error vars := mux.Vars(r) c := db.C("Event") q := c.FindId(vars["eventId"]) var ev Event err = q.One(&ev) if err == nil { if len(ev.Participants) > 0 { for i := 0; i < len(ev.Participants); i++ { if ev.Participants[i].Id == r.Header.Get("User") { // remove all occurences ev.Participants = append(ev.Participants[:i], ev.Participants[i+1:]...) } } err = c.UpdateId(ev.Id, ev) } } rpc.WriteJson(r, w, "OK", nil) }
func UnfollowGroup(w http.ResponseWriter, r *http.Request) { var err error vars := mux.Vars(r) c := db.C("PlusGroup") q := c.FindId(vars["groupId"]) var pg PlusGroup err = q.One(&pg) if err == nil { if len(pg.Followers) > 0 { for i := 0; i < len(pg.Followers); i++ { if pg.Followers[i] == r.Header.Get("User") { // remove all occurences pg.Followers = append(pg.Followers[:i], pg.Followers[i+1:]...) } } err = c.UpdateId(pg.Id, pg) } } rpc.WriteJson(r, w, "OK", nil) }
/// add comment func DoComment(w http.ResponseWriter, r *http.Request) { var err error vars := mux.Vars(r) args := bson.M{} if err = rpc.ReadJson(r, &args); err != nil { rpc.WriteJson(r, w, nil, errors.New("Invalid JSON!")) } c := db.C("Post") q := c.FindId(vars["postId"]) var post Post err = q.One(&post) if err == nil { aCmt := Comment{User: r.Header.Get("User"), Date: time.Now().String()[:19], Text: args["Text"].(string)} if len(post.Comments) == 0 { post.Comments = []Comment{aCmt} } else { post.Comments = append(post.Comments, aCmt) } err = c.UpdateId(post.Id, post) } rpc.WriteJson(r, w, "OK", err) }
// Map attendance func MapEnrollId(w http.ResponseWriter, r *http.Request) { var err error vars := mux.Vars(r) // ажилтныг олох empC := db.C("Employee") q := empC.FindId(vars["empId"]) var emp bson.M if err = q.One(&emp); err == nil { empRef := bson.M{"_id": emp["_id"], "Name": emp["Name"]} // ирцийн өгөгдлийг засах c := db.C("Attendance") c.UpdateAll(bson.M{"EnrollId": vars["enId"]}, bson.M{"$set": bson.M{"Employee": empRef}}) } rpc.WriteJson(r, w, "OK", err) }
func Login(w http.ResponseWriter, r *http.Request) { var err error args := Args{} if err = ParseRequest(r, &args); err != nil { WriteResponse(r, w, nil, errors.New("Username, password missing!")) return } c := db.C("User") q := c.FindId(args.Username) var ss Session var u User err = q.One(&u) // TODO: SHA1 encoding if err == nil && u.Password == args.Password { // create session ss.Id, err = GenUUID() ss.User = args.Username ss.UserName = u.Name ss.UserRole = []string{u.Role} ss.RemoteAddr = r.RemoteAddr ss.Company = u.Company ss.Date = time.Now() // ss.Perms TODO: эрхүүдийг олох c = db.C("UserSession") if err = c.Insert(ss); err == nil { _sessions[ss.Id] = &ss } } else { err = errors.New("Access denied!") } WriteResponse(r, w, ss, err) }
// мэдээ тоолох // TODO: replace with db.MapReduce func PostCount(w http.ResponseWriter, r *http.Request) { var err error args := bson.M{} if err = rpc.ReadJson(r, &args); err != nil { rpc.WriteJson(r, w, nil, errors.New("Invalid JSON!")) } c := db.C("Post") mr := &mgo.MapReduce{ Map: "function() { if (!this.Type) { emit('news', 1) } else { emit(this.Type, 1) } }", Reduce: "function(key, values) { return Array.sum(values); }", } var result []bson.M _, err = c.Find(nil).MapReduce(mr, &result) rpc.WriteJson(r, w, result, err) }
/// Нууц үг солих func ChangePwd(w http.ResponseWriter, r *http.Request) { var err error args := Args{} if err = ParseRequest(r, &args); err != nil { WriteResponse(r, w, nil, errors.New("Username, password missing!")) return } c := db.C("User") q := c.FindId(r.Header.Get("User")) var u User if err = q.One(&u); err == nil { u.Password = args.Password err = c.UpdateId(r.Header.Get("User"), u) } WriteResponse(r, w, "OK", err) }
// Applicant бүртгэх func RegApp(w http.ResponseWriter, r *http.Request) { var err error //vars := mux.Vars(r) obj := bson.M{} if err = rpc.ReadJson(r, &obj); err != nil { rpc.WriteJson(r, w, nil, err) return } c := db.C("Applicant") if obj["_id"] == nil { obj["_id"] = bson.NewObjectId().Hex() } obj["RemoteAddr"] = r.RemoteAddr err = c.Insert(obj) rpc.WriteJson(r, w, "OK", err) }
/// +1 on the post func Plus1(w http.ResponseWriter, r *http.Request) { var err error vars := mux.Vars(r) c := db.C("Post") q := c.FindId(vars["postId"]) var post Post err = q.One(&post) aLike := Like{User: r.Header.Get("User"), Date: time.Now().String()[:19]} if err == nil { if len(post.Likes) == 0 { post.Likes = []Like{aLike} } else { // байхгүй бол нэмэх (like), байгаа бол хасах (dislike) var i int = 0 var exists bool for ; i < len(post.Likes); i++ { if post.Likes[i].User == r.Header.Get("User") { exists = true break } } if exists { post.Likes = append(post.Likes[:i], post.Likes[i+1:]...) aLike.User = "" // notify a dislike } else { post.Likes = append(post.Likes, aLike) } } err = c.UpdateId(post.Id, post) } rpc.WriteJson(r, w, aLike, err) }
func Subscribe(w http.ResponseWriter, r *http.Request) { var err error vars := mux.Vars(r) c := db.C("Event") q := c.FindId(vars["eventId"]) resp := "OK" var ev Event err = q.One(&ev) if err == nil { p := IdName{Id: r.Header.Get("User"), Name: r.Header.Get("Name")} if len(ev.Participants) == 0 { ev.Participants = []IdName{p} err = c.UpdateId(ev.Id, ev) } else { // өмнө бүртгүүлсэн эсэхийг шалгах i := 0 for i < len(ev.Participants) { if ev.Participants[i].Id == r.Header.Get("User") { break } i++ } if i >= len(ev.Participants) { ev.Participants = append(ev.Participants, p) err = c.UpdateId(ev.Id, ev) } else { // давхардсан resp = "Dup" } } } rpc.WriteJson(r, w, resp, nil) }
func FollowGroup(w http.ResponseWriter, r *http.Request) { var err error vars := mux.Vars(r) c := db.C("PlusGroup") q := c.FindId(vars["groupId"]) var pg PlusGroup err = q.One(&pg) if err == nil { if len(pg.Followers) == 0 { pg.Followers = []string{r.Header.Get("User")} } else { pg.Followers = append(pg.Followers, r.Header.Get("User")) } err = c.UpdateId(pg.Id, pg) } rpc.WriteJson(r, w, "OK", nil) }
// wf/leave/start/{id} func LeaveStart(w http.ResponseWriter, r *http.Request) { var err error vars := mux.Vars(r) c := db.C("Leave") q := c.FindId(vars["id"]) var leaveObj bson.M if err = q.One(&leaveObj); err != nil { rpc.WriteJson(r, w, nil, errors.New("Чөлөөний мэдээлэл олдсонгүй!")) return } // хүсэлтэд санамсаргүй дугаар үүсгэх actionRequestId := bson.NewObjectId().Hex() approveUrl := "http://localhost:8000/wf/approve/" + actionRequestId rejectUrl := "http://localhost:8000/wf/reject/" + actionRequestId c1 := db.C(colWfAction) c1.Insert(bson.M{ "_id": actionRequestId, "LeaveId": vars["id"], "Date": time.Now().String()[:19], "Active": true}) // Э-мэйл загвар msg := fmt.Sprintf(`<p>Танд чөлөөний хүсэлт ирлээ.</p> <br/> -------------------------- <br/> <strong>Чөлөөний төрөл:</strong> %v <br/> <strong>Явах огноо:</strong> %v %v <br/> <strong>Хугацаа:</strong> %v цаг <br/> <strong>Шалтгаан:</strong> %v <br/> <br/> <p><a href=%s>Зөвшөөрөх</a> <a href=%s>Татгалзах</a></p> `, leaveObj["Name"], leaveObj["DateFrom"], leaveObj["TimeFrom"], leaveObj["Duration"], leaveObj["Notes"], approveUrl, rejectUrl) // менежерийн э-мэйл хаягийг олох var mgr bson.M if mgr, err = MyManager(r.Header.Get("User")); err != nil { rpc.WriteJson(r, w, nil, errors.New("Таны дээд удирдлага тодорхойгүй байна!")) return } if mgr["WorkEmail"] == nil || mgr["WorkEmail"] == "" { rpc.WriteJson(r, w, nil, errors.New("Таны дээд удирдлагын э-мэйл хаяг тодорхойгүй байна!")) return } // э-мэйлийг илгээх m := NewMessage("Чөлөөний хүсэлт", msg, mgr["WorkEmail"].(string)) m.BodyContentType = "text/html" m.From = r.Header.Get("Name") if err = _sendEmail(m); err == nil { // төлөв өөрчлөх c.UpdateId(vars["id"], bson.M{"$set": bson.M{"State": "хүсэлт"}}) } rpc.WriteJson(r, w, "OK", err) }