public ActionResult AllStudentList()
        {
            using (MySqlConnection con = new MySqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString()))
            {
                sr_registerMain stdMain = new sr_registerMain();
                sr_register     sr      = new sr_register();

                mst_sessionMain sess = new mst_sessionMain();

                string query = @"SELECT 
                                a.section_id
                            FROM
                                mst_section a,
                                mst_class b
                            WHERE
                                a.class_id = b.class_id
                                    AND a.session = @session
                                    AND a.session = b.session
                            ORDER BY b.order_by 
                            LIMIT 1";

                int section = con.Query <int>(query, new { session = sess.findFinal_Session() }).SingleOrDefault();

                sr.sr_regi = stdMain.AllStudentList(section);
                DDClassWiseSection();
                return(View(sr));
            }
        }
        public void DDSections(sr_register obj)
        {
            using (MySqlConnection con = new MySqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString()))
            {
                string query = @"SELECT 
                                    section_id, section_name
                                FROM
                                    mst_section
                                WHERE
                                    class_id = @class_id
                                        AND session = (SELECT
                                            session
                                        FROM
                                            mst_session
                                        WHERE
                                            session_active = 'Y')";


                var section_list = con.Query <mst_section>(query, new { class_id = obj.class_id });

                IEnumerable <SelectListItem> list = new SelectList(section_list, "section_id", "section_name", obj.std_section_id);

                ViewData["section_id"] = list;
            }
        }
        public ActionResult AllStudentList(int section_id)
        {
            sr_registerMain stdMain = new sr_registerMain();
            sr_register     sr      = new sr_register();

            sr.sr_regi = stdMain.AllStudentList(section_id);
            DDClassWiseSection();
            return(View(sr));
        }
        public void DDtransport_id(sr_register obj)
        {
            mst_transportMain mstTransport = new mst_transportMain();

            var transport_list = mstTransport.AllTransportList();

            IEnumerable <SelectListItem> list2 = new SelectList(transport_list, "pickup_id", "pickup_point");

            ViewData["pickup_id"] = list2;
        }
        public void DDclass_name(sr_register obj)
        {
            mst_classMain mstClass = new mst_classMain();

            mst_sessionMain sess = new mst_sessionMain();

            var class_list = mstClass.AllClassList(sess.findFinal_Session());

            var adm_class_list = mstClass.AllClassList(obj.adm_session);

            IEnumerable <SelectListItem> list1 = new SelectList(class_list, "class_id", "class_name", obj.class_id);
            IEnumerable <SelectListItem> list  = new SelectList(adm_class_list, "class_name", "class_name");

            ViewData["class_id"] = list1;


            ViewData["class_name"] = list;
        }
        public ActionResult AddStudent(string sess, int reg, DateTime dt)
        {
            std_registrationMain std_reg = new std_registrationMain();

            std_registration obj = std_reg.FindRegistration(sess, reg, dt);

            sr_register std = new sr_register();

            std.std_first_name = obj.std_first_name;
            std.std_last_name  = obj.std_last_name;
            std.adm_session    = obj.session;
            std.class_id       = obj.std_class_id;
            std.reg_no         = obj.reg_no;
            std.reg_date       = obj.reg_date;
            std.std_active     = "Y";
            std.std_address    = obj.std_address;
            std.std_address1   = obj.std_address1;
            std.std_address2   = obj.std_address2;

            std.std_admission_date_str = DateTime.Now.ToShortDateString();
            std.std_contact            = obj.std_contact;
            std.std_contact1           = obj.std_contact1;
            std.std_contact2           = obj.std_contact2;
            std.std_country            = obj.std_country;
            std.std_district           = obj.std_district;
            std.std_email       = obj.std_email;
            std.std_father_name = obj.std_father_name;
            std.std_mother_name = obj.std_mother_name;
            std.std_pincode     = obj.std_pincode;
            std.std_state       = obj.std_state;

            DDclass_name(std);

            DDtransport_id(std);

            return(View(std));
        }
        public ActionResult fees_collect(fees_collect col)
        {
            using (MySqlConnection con = new MySqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString()))
            {
                mst_finMain fin = new mst_finMain();
                if (fin.checkFYnotExpired())
                {
                    try
                    {
                        mst_sessionMain sess = new mst_sessionMain();

                        if (sess.findActive_Session() == col.session)
                        {
                            string query = @"SELECT 
                                               ifnull(SUM(IFNULL(outstd_amount, 0)) - SUM(IFNULL(rmt_amount, 0)),0) amt
                                            FROM
                                                out_standing
                                            WHERE
                                                sr_number = @sr_number AND session != @session";

                            decimal amt = con.Query <decimal>(query, new { sr_number = col.sr_num, session = col.session }).SingleOrDefault();

                            if (amt != 0m)
                            {
                                ModelState.AddModelError(string.Empty, "Kindly clear previous session fees first.");
                                fees_collect fee = new fees_collect();

                                sr_registerMain stdMain = new sr_registerMain();

                                fee.list = stdMain.AllStudentList(GetDefaultSection());


                                DDsession_name();
                                DDClassWiseSection();



                                return(View(fee));
                            }
                        }

                        if (col.sr_num > 0)
                        {
                            sr_registerMain reg      = new sr_registerMain();
                            sr_register     register = new sr_register();

                            register = reg.FindStudent(col.sr_num, col.session);

                            if (register == null)
                            {
                                register = reg.FindStudent(col.sr_num, sess.findFinal_Session());
                            }

                            col.std_Name = register.std_first_name + " " + register.std_last_name;

                            col.std_father_name = register.std_father_name;

                            col.std_mother_name = register.std_mother_name;

                            col.std_contact = register.std_contact;

                            col.std_Email = register.std_email;

                            col.std_Class = register.class_name;

                            col.std_Section = register.section_name;

                            col.std_Pickup_point = register.pickup_point;

                            col.std_aadhar = register.std_aadhar;

                            return(View("submit_fees", col));
                        }
                        else if (col.reg_num > 0)
                        {
                            std_registrationMain reg          = new std_registrationMain();
                            std_registration     registration = new std_registration();


                            registration = reg.FindRegistrationForFees(col.reg_num);


                            col.std_Name = registration.std_first_name + " " + registration.std_last_name;

                            col.std_father_name = registration.std_father_name;

                            col.std_mother_name = registration.std_mother_name;

                            col.std_contact = registration.std_contact;

                            col.std_Email = registration.std_email;

                            col.std_Class = registration.class_name;

                            col.std_Section = "N/A";

                            col.std_Pickup_point = "N/A";

                            return(View("submit_fees", col));
                        }
                        else
                        {
                            fees_collect fee = new fees_collect();

                            sr_registerMain stdMain = new sr_registerMain();

                            fee.list = stdMain.AllStudentList(col.section_id);


                            DDsession_name();

                            DDClassWiseSection();



                            return(View(fee));
                        }
                    }
                    catch
                    {
                        ModelState.AddModelError(string.Empty, "Student record not found");
                        fees_collect fee = new fees_collect();

                        sr_registerMain stdMain = new sr_registerMain();

                        fee.list = stdMain.AllStudentList(GetDefaultSection());


                        DDsession_name();
                        DDClassWiseSection();



                        return(View(fee));
                    }
                }
                else
                {
                    ModelState.AddModelError(string.Empty, "Financial Year Expired cannot submit fees create new Financial  year.");

                    fees_collect fee = new fees_collect();

                    sr_registerMain stdMain = new sr_registerMain();

                    fee.list = stdMain.AllStudentList(col.section_id);

                    DDsession_name();

                    DDClassWiseSection();



                    return(View(fee));
                }
            }
        }
        public async Task <ActionResult> AddStudent(sr_register std)
        {
            try
            {
                using (MySqlConnection con = new MySqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString()))
                {
                    if (ModelState.IsValid)
                    {
                        if (std.std_contact == null)
                        {
                            ModelState.AddModelError(String.Empty, "Primary contact is mandatory.");


                            DDclass_name(std);

                            DDtransport_id(std);

                            return(View(std));
                        }
                        sr_registerMain stdMain = new sr_registerMain();

                        string query = @"SELECT 
                                    class_id
                                FROM
                                    mst_class
                                WHERE
                                    class_name = @std_admission_class
                                        AND session = (SELECT
                                            session
                                        FROM
                                            mst_session
                                        WHERE
                                            session_active = 'Y')";

                        int id = con.ExecuteScalar <int>(query, new { std.std_admission_class });

                        if (std.class_id < id)
                        {
                            ModelState.AddModelError(String.Empty, "Class cannot be lower than admission class");


                            DDclass_name(std);

                            DDtransport_id(std);

                            return(View(std));
                        }

                        if (std.std_pickup_id == null)
                        {
                            ModelState.AddModelError(String.Empty, "Avail Transport cannot be blank.");


                            DDclass_name(std);

                            DDtransport_id(std);

                            return(View(std));
                        }

                        await stdMain.AddStudent(std);



                        return(RedirectToAction("AllRegistrationList", "std_registration"));
                    }

                    DDclass_name(std);

                    DDtransport_id(std);

                    return(View(std));
                }
            }
            catch
            {
                return(RedirectToAction("AllRegistrationList", "std_registration"));
            }
        }
        public ActionResult EditDetails(sr_register std, string calling_view)
        {
            using (MySqlConnection con = new MySqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ToString()))
            {
                sr_registerMain stdMain = new sr_registerMain();
                decimal         dues    = 0m;

                string query = @"SELECT 
                                class_id
                            FROM
                                mst_class
                            WHERE
                                class_name = @std_admission_class
                                    AND session = (SELECT
                                        session
                                    FROM
                                        mst_session
                                    WHERE
                                        session_finalize = 'Y'
                                            AND session_active = 'Y')";

                int id = con.ExecuteScalar <int>(query, new { std.std_admission_class });

                //if (std.class_id < id)
                //{
                //    ModelState.AddModelError(String.Empty, "Class cannot be lower than admission class");


                //    DDclass_name(std);

                //    DDtransport_id(std);

                //    DDSections(std);

                //    return View(std);
                //}

                query = @"SELECT 
                            class_id
                        FROM
                            sr_register a,
                            mst_std_class b
                        WHERE
                            a.sr_number = b.sr_num
                                AND b.session = (SELECT 
                                    session
                                FROM
                                    mst_session
                                WHERE
                                    session_active = 'Y'
                                        AND session_finalize = 'Y')
                                AND sr_number = @sr_num";

                int changedclassid = con.Query <int>(query, new { sr_num = std.sr_number }).SingleOrDefault();

                query = @"SELECT 
                            IFNULL(COUNT(CASE
                                        WHEN rmt_amount = 0.00 THEN NULL
                                        ELSE rmt_amount
                                    END),
                                    0)
                        FROM
                            out_standing
                        WHERE
                            sr_number = @sr_num AND serial != 0
                                AND session = (SELECT 
                                    session
                                FROM
                                    mst_session
                                WHERE
                                    session_active = 'Y')
                                AND acc_id NOT IN (1 , 2, 6)";

                int error = con.Query <int>(query, new { sr_num = std.sr_number }).SingleOrDefault();



                if (error != 0 && changedclassid != std.class_id && calling_view == "AllStudentList")
                {
                    ModelState.AddModelError(String.Empty, "Cannot change, class fees already paid");

                    DDclass_name(std);

                    DDtransport_id(std);

                    DDSections(std);

                    return(View(std));
                }

                if (std.active)
                {
                    std.std_active = "Y";
                }
                else
                {
                    std.std_active = "N";
                }



                stdMain.EditStudent(std);

                if (calling_view == "AllStudentList")
                {
                    return(RedirectToAction(calling_view));
                }
                else
                {
                    return(RedirectToAction(calling_view, "GenerateTC"));
                }
            }
        }