public ActionResult Generate(int group_id, string qr_code_value) { QrCodeEncodingOptions options = new QrCodeEncodingOptions(); DateTime today = Convert.ToDateTime(DateTime.Now.ToShortDateString()); TimeSpan time = TimeSpan.Parse(DateTime.Now.ToString("HH:mm:ss")); int limit_minute = Convert.ToInt32(db.System_Settings.FirstOrDefault().system_settings_qr_code_available_minute); time = time.Add(new TimeSpan(0, limit_minute, 0)); options = new QrCodeEncodingOptions { DisableECI = true, CharacterSet = "UTF-8", Width = 500, Height = 500 }; var writer = new BarcodeWriter(); writer.Format = BarcodeFormat.QR_CODE; writer.Options = options; options.Hints.Add(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); var qr = new BarcodeWriter(); qr.Options = options; qr.Format = BarcodeFormat.QR_CODE; var result = new Bitmap(qr.Write(qr_code_value)); string logo_img = Path.Combine(Server.MapPath("~/assets/img/"), "logo.png"); Image logo = Image.FromFile(logo_img); int left = (result.Width / 2) - (logo.Width / 2); int top = (result.Height / 2) - (logo.Height / 2); Graphics g = Graphics.FromImage(result); g.DrawImage(logo, new Point(left, top)); MemoryStream stream = new MemoryStream(); result.Save(stream, ImageFormat.Jpeg); byte[] byteArray = stream.GetBuffer(); Qr_Codes current_qr_code = db.Qr_Codes.Where(q => q.qr_codes_date == today && q.qr_codes_group_id == group_id).FirstOrDefault(); if (current_qr_code != null) { current_qr_code.qr_codes_value = qr_code_value; } else { var Qr_Code = new Qr_Codes() { qr_codes_date = today, qr_codes_status = true, qr_codes_value = qr_code_value, qr_codes_group_id = group_id, qr_code_deadline_time = time }; db.Qr_Codes.Add(Qr_Code); List <int> students = db.Students.Where(s => s.student_group_id == group_id && s.student_status == true).Select(s => s.student_id).ToList(); foreach (var item in students) { Students_Attendance student_attendance = db.Students_Attendance.Where(a => a.students_attendance_student_id == item && a.students_attendance_date == today).FirstOrDefault(); if (student_attendance == null) { var new_attendance = new Students_Attendance() { students_attendance_date = today, students_attendance_sender_ip = null, students_attendance_status = false, students_attendance_student_id = item }; db.Students_Attendance.Add(new_attendance); } } } db.SaveChanges(); return(File(byteArray, "image/jpeg")); }
public HttpResponseMessage ApproveAttendance(int student_id, string student_device_id, string qr_code, string token) { // Aşağıda ReturnJsonObject methoduna parametr kimi ötürmək üçün HttpResponseMessage tipində bir cavab yaradılır... HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK); TimeSpan time = TimeSpan.Parse(DateTime.Now.ToString("HH:mm:ss")); //Tokeni yoxlayır (AntiForgeryToken Class'da ətraflı yazılıb) if (!AntiForgeryToken.Verify(student_id, token)) { return(JsonObjectOperations.JsonGenerator(response, false, null, "\"Giriş icazəsi verilmədi!\"", false)); } //Tələbə Code Academy'dən kənarda QR kodu təsdiqləmək istəyirsə... if (!StudentIPAddress.Check()) { return(JsonObjectOperations.JsonGenerator(response, false, null, "\"Siz Code Academy'nin Wifi'na qoşulmamısınız!\"", false)); } //URL'dən gələn student_id, cihazın ID və ya token parametrləri boşdursa (və ya null)... if (student_id < 0 || student_device_id == null || student_device_id == "" || token == null || token == "") { return(JsonObjectOperations.JsonGenerator(response, false, null, "\"Xahiş edirik programı bağlayıb təkrar giriş edərək yenidən cəhd edin\"", false)); } //URL'dən gələn Qr kod dəyəri boşdursa (və ya null)... if (qr_code == null || qr_code == "") { return(JsonObjectOperations.JsonGenerator(response, false, null, "\"Qr Kod oxunmadı!\"", false)); } try { int std_id = Convert.ToInt32(student_id); //URL'dən gələn məlumatlara əsasən tələbənin məlumatlarını al... var student_info = (from s in db.Students join g in db.Groups on s.student_group_id equals g.group_id join q in db.Qr_Codes on s.student_group_id equals q.qr_codes_group_id where s.student_id == std_id && s.student_device_id == student_device_id && q.qr_codes_date == today select new { s.student_id, g.group_name, q.qr_codes_status, q.qr_codes_value, q.qr_codes_date, q.qr_code_deadline_time }).FirstOrDefault(); //Əgər yuxarıdakı sorğu null gəlibsə, deməli bu gün tələbənin olduğu grup üçün Qr kod generate olunmayıb if (student_info == null) { return(JsonObjectOperations.JsonGenerator(response, false, null, "\"Sizin grupda bu günə aid Qr kod tapılmadı\"", false)); } //Əgər tələbənin kamera ilə oxuduğu Qr kod səhvdirsə if (student_info.qr_codes_value != qr_code) { return(JsonObjectOperations.JsonGenerator(response, false, null, "\"Qr kod səhvdir!\"", false)); } //Əgər Qr kodun generate olunan anda databazaya yazılan deadline vaxtından sonra tələbə təsdiq edərsə... if (student_info.qr_code_deadline_time < time) { Qr_Codes ChangeQrCodeStatus = db.Qr_Codes.Where(q => q.qr_codes_date == today && q.qr_codes_value == student_info.qr_codes_value).FirstOrDefault(); ChangeQrCodeStatus.qr_codes_status = false; return(JsonObjectOperations.JsonGenerator(response, false, null, "\"Bu Qr kod artıq etibarlı deyil!\"", false)); } //Əgər tələbənin oxuduğu Qr kod varsa, lakin artıq etibarlı deyilsə (dərsə gecikibsə)... if (student_info.qr_codes_status != true) { return(JsonObjectOperations.JsonGenerator(response, false, null, "\"Bu Qr kod artıq etibarlı deyil!\"", false)); } //Əgər bu günə aid Qr kod varsa... if (student_info != null && student_info.qr_codes_status == true && student_info.qr_codes_value == qr_code && student_info.qr_codes_date == today) { //Students_Attendance table'dan bu günə və bu tələbəyə aid olan sətiri seç... Students_Attendance student_attendance = db.Students_Attendance.Where(a => a.students_attendance_date == today && a.students_attendance_student_id == student_info.student_id).First(); //Əgər tələbə bu Qr kodu artıq bu gün bir dəfə təsdiq edibsə... if (student_attendance.students_attendance_status == true) { return(JsonObjectOperations.JsonGenerator(response, false, null, "\"Siz bu gün dərsdə iştirak etdiyinizi artıq təsdiq etmisiniz\"", false)); } //Tələbənin Attendance'nın statusunu true et (yəni dərsdədir Qr kod oxunub) və Qr kodu oxuduğu İp adresini yaz DB ya student_attendance.students_attendance_status = true; student_attendance.students_attendance_sender_ip = StudentIPAddress.Get(); db.SaveChanges(); return(JsonObjectOperations.JsonGenerator(response, true, "\"Sizin dərsdə iştirak etdiyiniz müvəffəqiyyətlə təsdiqləndi\"", null, false)); } //Əgər yuxarıdakı şərtlərin heç biri ödənmirsə... return(JsonObjectOperations.JsonGenerator(response, false, null, "\"Xahiş edirik programı bağlayıb təkrar giriş edərək yenidən cəhd edin\"", false)); } catch { //Əgər yuxarıdakı şərtlərin heç biri ödənmirsə... return(JsonObjectOperations.JsonGenerator(response, false, null, "\"Xahiş edirik programı bağlayıb təkrar giriş edərək yenidən cəhd edin!\"", false)); } }