public void DeductStudentCredits(string studentId, string classId, decimal hours) { UnitOfWork uow = new UnitOfWork(); StudentCredit studentCredit = uow.StudentCredits.Get(a => a.StudentID == studentId).FirstOrDefault(); if (studentCredit != null && studentCredit.TotalCredits >= hours) { string userId = Session["UserId"].ToString(); string className = uow.Classes.Get(x => x.ClassID == classId).FirstOrDefault().Title; studentCredit.TotalCredits = studentCredit.TotalCredits - hours; studentCredit.UsedCredits = studentCredit.UsedCredits + hours; uow.StudentCredits.Update(studentCredit); StudentCreditLog studentCreditLog = new StudentCreditLog { ClassID = classId, CreationDate = DateTime.Now, CreditsUsed = hours, UserID = studentId, LogType = "Deducted" }; uow.StudentCreditLogs.Insert(studentCreditLog); uow.Save(); uow.Dispose(); //Common.AddNotification(Session["UserName"].ToString() + " accepted your offer", "", // userId, studentId, "/student/classes", (int)NotificationType.Class); //payment deduction notification Common.AddNotification("Your wallet has been deducted with " + hours + " hours for class " + className, "", userId, studentId, "/student/wallet", (int)NotificationType.Wallet); } }
public void AddStudentCredits(string studentId, Data.Models.Plan plan) { try { UnitOfWork uow = new UnitOfWork(); StudentCredit studentCredit = uow.StudentCredits.Get(a => a.StudentID == studentId).FirstOrDefault(); if (studentCredit != null) { studentCredit.TotalCredits = studentCredit.TotalCredits + plan.Hours; studentCredit.LastUpdates = DateTime.Now; uow.StudentCredits.Update(studentCredit); } else { StudentCredit credit = new StudentCredit { StudentID = studentId, LastUpdates = DateTime.Now, TotalCredits = plan.Hours, UsedCredits = 0 }; uow.StudentCredits.Insert(credit); } uow.Save(); } catch (Exception ex) { throw; } }
public bool UpdateClassStatus(StudentClassUpdateParam model) { try { UnitOfWork uow = new UnitOfWork(); StudentClass studentClasses = uow.StudentClasses.GetByID(Convert.ToInt32(model.StudentClassId)); if (studentClasses != null) { string requestStatus = "rejected"; studentClasses.Status = (int)ClassJoinStatus.Rejected; studentClasses.JoiningDate = DateTime.Now; Class classDetail = uow.Classes.Get(x => x.ClassID == model.ClassId).FirstOrDefault(); if (model.Status == "accept") { //add student Credit Log and Deduct From StudentCredits StudentCredit studentCredit = uow.StudentCredits.Get(a => a.StudentID == model.StudentId).FirstOrDefault(); if (studentCredit != null && studentCredit.TotalCredits >= classDetail.Duration) { studentCredit.TotalCredits = studentCredit.TotalCredits - classDetail.Duration; studentCredit.UsedCredits = studentCredit.UsedCredits + classDetail.Duration; uow.StudentCredits.Update(studentCredit); StudentCreditLog studentCreditLog = new StudentCreditLog { ClassID = model.ClassId, CreationDate = DateTime.Now, CreditsUsed = classDetail.Duration, UserID = model.StudentId, LogType = "Deducted" }; uow.StudentCreditLogs.Insert(studentCreditLog); } else { return(false); } //End----- studentClasses.Status = (int)ClassJoinStatus.Approved; requestStatus = "accepted"; } uow.StudentClasses.Update(studentClasses); uow.Save(); //request status notification Common.AddNotification("Your request to join class " + classDetail.Title + " has been " + requestStatus, "", Session["UserId"].ToString(), model.StudentId, "/student/classes", (int)NotificationType.Class); //payment deduction notification Common.AddNotification("Your wallet has been deducted with " + classDetail.Duration + " hours for class " + classDetail.Title, "", Session["UserId"].ToString(), model.StudentId, "/student/wallet", (int)NotificationType.Wallet); return(true); } return(false); } catch (Exception) { return(false); } }
public ActionResult ProcessClass(string id) { UnitOfWork uow = new UnitOfWork(); Class classDetail = uow.Classes.Get(x => x.ClassID == id).FirstOrDefault(); if (classDetail != null && classDetail.Status != (int)ClassStatus.Completed) { using (var client = new HttpClient()) { var response = client.PostAsync("https://api.braincert.com/v2/getclassreport?apikey=EBqafLB3sAk1HeCDxr4Z&format=json&classId=" + classDetail.BrainCertId + "", null).Result; response.EnsureSuccessStatusCode(); string responseBody = response.Content.ReadAsStringAsync().Result; List <AttendanceReport> report = JsonConvert.DeserializeObject <List <AttendanceReport> >(responseBody); AttendanceReport studentReport = report.Where(a => a.isTeacher == 0).ToList().FirstOrDefault(); User student = uow.Users.Get(x => x.AutoID == studentReport.userId).FirstOrDefault(); string studentId = student.UserID; AttendenceReportModel attenReport = uow.TeacherRepository.GetUserInfo(studentReport.userId, id); if (attenReport != null) { decimal classTime = Convert.ToDecimal(TimeSpan.Parse(studentReport.duration).TotalHours); attenReport.CreditsConsumed = String.Format("{0:0.00}", classTime); attenReport.CreditsRefund = String.Format("{0:0.00}", attenReport.CreditsUsed - classTime); attenReport.CreditsConsumedInt = classTime; attenReport.CreditsRefundInt = attenReport.CreditsUsed - classTime; attenReport.StudentClassId = studentReport.userId; //mark class as completed classDetail.Status = (int)ClassStatus.Completed; StudentCreditLog creditLog = new StudentCreditLog { ClassID = classDetail.ClassID, UserID = id, CreationDate = DateTime.Now, CreditsUsed = Math.Round(attenReport.CreditsRefundInt, 2), LogType = "Refund" }; uow.StudentCreditLogs.Insert(creditLog); StudentCredit credit = uow.StudentCredits.Get(a => a.StudentID == studentId).FirstOrDefault(); if (credit != null) { credit.LastUpdates = DateTime.Now; credit.TotalCredits = credit.TotalCredits + attenReport.CreditsRefundInt; credit.UsedCredits = credit.UsedCredits - attenReport.CreditsRefundInt; } UpdateTutorWallet(classDetail.TeacherID, classDetail.ClassID, classTime); //payment refund notification Common.AddNotification("Your wallet has beend refunded with " + creditLog.CreditsUsed, "", Session["UserId"].ToString(), studentId, "/student/wallet", (int)NotificationType.Refund); } uow.Save(); } } return(RedirectToAction("classes", "tutor")); }
public static bool UserHasCredits(string userId, decimal creditCheck) { UnitOfWork uow = new UnitOfWork(); StudentCredit userCredit = uow.StudentCredits.Get(x => x.StudentID == userId).FirstOrDefault(); uow.Dispose(); if (userCredit != null) { return(userCredit.TotalCredits > creditCheck); } else { return(false); } }
public string Join(ClassActionParam model) { try { string userId = Session["UserId"].ToString(); UnitOfWork uow = new UnitOfWork(); Class classs = uow.Classes.Get(a => a.ClassID == model.ClassId).FirstOrDefault(); StudentCredit studentCredit = uow.StudentCredits.Get(a => a.StudentID == userId).FirstOrDefault(); if (classs != null && studentCredit != null) { if (studentCredit.TotalCredits > classs.Duration) { StudentClass studentClass = new StudentClass { ClassID = model.ClassId, JoiningDate = DateTime.Now, StudentID = Session["UserId"].ToString(), Status = (int)ClassJoinStatus.Pending }; uow.StudentClasses.Insert(studentClass); uow.Save(); Common.AddNotification(Session["UserName"] + " requested to join your class " + classs.Title, "", studentClass.StudentID, classs.TeacherID, "/tutor/requests?c=" + classs.ClassID, (int)NotificationType.Class); return("success"); } else { return("no-balance"); } } return("no-balance"); } catch (Exception ex) { return("error"); } }
public ActionResult ProcessAttendence(string id) { UnitOfWork uow = new UnitOfWork(); Class classModel = uow.Classes.Get(x => x.ClassID == id).FirstOrDefault(); if (classModel != null && classModel.Status != (int)ClassStatus.Completed) { using (var client = new HttpClient()) { var response = client.PostAsync("https://api.braincert.com/v2/getclassreport?apikey=EBqafLB3sAk1HeCDxr4Z&format=json&classId=" + classModel.BrainCertId + "", null).Result; response.EnsureSuccessStatusCode(); string responseBody = response.Content.ReadAsStringAsync().Result; List <AttendanceReport> myProduct = JsonConvert.DeserializeObject <List <AttendanceReport> >(responseBody); decimal teacherClassTime = Convert.ToDecimal(TimeSpan.Parse(myProduct.Where(a => a.isTeacher == 1).FirstOrDefault().duration).TotalHours); List <AttendanceReport> students = myProduct.Where(a => a.isTeacher == 0).ToList(); List <AttendenceReportModel> listRep = new List <AttendenceReportModel>(); bool IsProcessed = false; for (int i = 0; i < students.Count; i++) { AttendenceReportModel attenReport = uow.TeacherRepository.GetUserInfo(students[i].userId, id); if (attenReport != null) { IsProcessed = true; decimal dec = Convert.ToDecimal(TimeSpan.Parse(students[i].duration).TotalHours); attenReport.CreditsConsumed = String.Format("{0:0.00}", dec); attenReport.CreditsRefund = String.Format("{0:0.00}", attenReport.CreditsUsed - dec); attenReport.CreditsConsumedInt = dec; attenReport.CreditsRefundInt = attenReport.CreditsUsed - dec; attenReport.StudentClassId = students[i].userId; listRep.Add(attenReport); } } if (IsProcessed == true) { for (int i = 0; i < listRep.Count; i++) { int studentAutoID = listRep[i].StudentClassId; User student = uow.Users.Get(x => x.AutoID == studentAutoID).FirstOrDefault(); StudentClass studentClass = uow.StudentClasses.Get(a => a.StudentID == student.UserID && a.ClassID == id).FirstOrDefault(); if (studentClass != null) { studentClass.Status = (int)ClassJoinStatus.Processed; uow.StudentClasses.Update(studentClass); StudentCreditLog creditLog = new StudentCreditLog { ClassID = id, UserID = studentClass.StudentID, CreationDate = DateTime.Now, CreditsUsed = Math.Round(listRep[i].CreditsRefundInt, 2), LogType = "Refund" }; uow.StudentCreditLogs.Insert(creditLog); StudentCredit credit = uow.StudentCredits.Get(a => a.StudentID == studentClass.StudentID).FirstOrDefault(); if (credit != null) { credit.LastUpdates = DateTime.Now; credit.TotalCredits = credit.TotalCredits + listRep[i].CreditsRefundInt; credit.UsedCredits = credit.UsedCredits - listRep[i].CreditsRefundInt; uow.StudentCredits.Update(credit); } UpdateTutorWallet(classModel.TeacherID, classModel.ClassID, teacherClassTime); //payment refund notification Common.AddNotification("Your wallet has beend refunded with " + creditLog.CreditsUsed, "", Session["UserId"].ToString(), studentClass.StudentID, "/student/wallet", (int)NotificationType.Refund); } } } uow.Save(); } } return(RedirectToAction("classes", "tutor")); }