/// <summary>
        /// Function in <see cref="LocalDB"/> to transmit all <see cref="Record"/>s in the <see cref="MyCouchClient"/> Database to the <see cref="ExternalDB"/>.
        /// </summary>
        public static void midnightsync()
        {
            MyCouchClient client = ClientBuilder(ConfigReader.getConfig());
            while (true)
            {
                while (DateTime.Now.ToString("HH:mm").Contains("23:59"))
                {
                    var query = new MyCouch.Requests.QueryViewRequest("_all_docs");
                    try
                    {
                        var response = client.Views.QueryAsync<Record>(query);
                        for(int i =0; i<response.Result.RowCount; i++)
                        {
                            response.Result.Rows[i].Value.completeRecord(0, DateTime.Now.ToString("yyyy-dd-MM ") + "23:59:00.000");
                            MS_ExternalDB.Transmit(MS_ExternalDB.CreateConnString(), response.Result.Rows[i].Value);
                        }
                        

                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.Message);
                    }
                }
            }
        }
        /// <summary>
        /// Function in <see cref="LocalDB"/> to check a <see cref="Record"/> "KartenNummer" in the <see cref="MyCouchClient"/> Database. "Valid" will be true when the KartenNummer is valid.
        /// </summary>
        /// <param name="record"><see cref="Record"/> to check.</param>
        /// <param name="valid">True if <see cref="Record"/> is valid</param>
        /// <returns>Returns the modified <see cref="Record"/>. When Card is OK it will add the <see cref="Record.studentID"/>, <see cref="Record.kartenID"/> and <see cref="Record"/></returns>
        public static Record checkCardnumber(Record record, out bool valid)
        {
            MyCouchClient client = LocalDB.ClientBuilder(ConfigReader.getConfig(), true);
            //Check the number
            #region QueryViewRequest
            MyCouch.Requests.QueryViewRequest query = new MyCouch.Requests.QueryViewRequest("view","KartenNummer");
            query.Configure(cfg => cfg.Key(record.kartenNummer));
            var response = client.Views.QueryAsync<Card>(query);

            #endregion
            try
            {
                if (response.Result.TotalRows > 0)
                {
                    //Get content-add StudentID to Record
                    record.studentID = response.Result.Rows[0].Value.studentID;
                    record.kartenID = response.Result.Rows[0].Value.id;
                    valid = true;
                    return record;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Invalid Cardnumber!");
                Console.WriteLine(record.kartenNummer);
                Notification.playsound(4);
            }
            valid = false;
            return record;

            // return null;
        }
        public static List<MyCouch.Responses.EntityResponse<Record>> GetRecords(MyCouchClient client,bool uselessbool)
        {
            List<MyCouch.Responses.EntityResponse<Record>> list = new List<MyCouch.Responses.EntityResponse<Record>>();
            var query = new MyCouch.Requests.QueryViewRequest("view2", "fertigeRecords");

            try
            {
                var response = client.Views.QueryAsync<Record>(query);

                for (int i = 0; i < response.Result.RowCount; i++)
                {
                    MyCouch.Responses.EntityResponse<Record> recordresponse = copyEntry(response.Result.Rows[i].Id);
                    list.Add(recordresponse);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
            return list;
        }
        /// <summary>
        /// Function in <see cref="LocalDB"/> to check a <see cref="Record"/> in the LocalDB.
        /// </summary>
        /// <param name="KartenNummer"><see cref="Record.kartenNummer"/> to check.</param>
        /// <param name="record">Returns the edited <see cref="Record"/></param>
        /// <returns>true when there is exactly one unfinished Record. False when there are more then one or no unfinished Records.</returns>
        public static bool checkRecords(string KartenNummer, out Record record)
        {


            #region QueryViewRequest

            MyCouch.Requests.QueryViewRequest query = new MyCouch.Requests.QueryViewRequest("view","erledigt");
            query.Configure(cfg => cfg.Key(KartenNummer));
            var response = LocalDB.ClientBuilder(ConfigReader.getConfig()).Views.QueryAsync<Record[]>(query);
            #endregion

            if (response.Result.TotalRows == 1)
            {
                MyCouch.Responses.EntityResponse<Record> recordresponse = copyEntry(response.Result.Rows[0].Id);
                record = recordresponse.Content;
                deleteRecord(recordresponse.Id, recordresponse.Rev);
                
                return true;
            }
            else if (response.Result.TotalRows > 1) //should not happen right now! Same as 0 TotalRows
            {
                Console.WriteLine(response.Result.TotalRows + " Records not finished!");
                record = null;
                
                return false;
            }
            else
            {
                record = null;
                
                return false;
            }
        }