Пример #1
0
        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"));
        }
Пример #2
0
        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));
            }
        }