public async Task <ActionResult> RegenerateTeacherCodeConfirmed(int id)
        {
            License license = await db.Licenses
                              .Include("Contract")
                              .Include("CourseCatalog")
                              .FirstOrDefaultAsync();

            var now = DateTime.Now;

            foreach (var item in license.TeacherKeys)
            {
                item.RecLog.DeletedDate = now;
            }
            var newTeacherKey = new TeacherKey
            {
                Grade   = license.Grade,
                License = license,
                Code    = generateTeacherCode(license),
                RecLog  = new RecordLog {
                    CreatedDate = now
                }
            };

            license.TeacherKeys.Add(newTeacherKey);
            db.TeacherKeys.Add(newTeacherKey);
            await db.SaveChangesAsync();

            return(RedirectToAction("Details", "Contracts", new { @id = license.ContractId }));
        }
        public async Task <ActionResult> Create([Bind(Include = "Id,CourseName,Grade,StudentsCapacity,RecLog,ContractId,CourseCatalogId")] License license)
        {
            if (ModelState.IsValid)
            {
                var courseCatalog = await db.CourseCatalogs.FirstOrDefaultAsync(it => it.Id == license.CourseCatalogId);

                if (courseCatalog == null || courseCatalog.RecLog.DeletedDate.HasValue)
                {
                    return(View("Error"));
                }

                var contract = await db.Contracts.FirstOrDefaultAsync(it => it.Id == license.ContractId);

                if (contract == null)
                {
                    return(View("Error"));
                }

                license.Contract      = contract;
                license.CourseCatalog = courseCatalog;

                var now = DateTime.Now;
                license.CourseName = courseCatalog.SideName;
                license.Grade      = courseCatalog.Grade.ToString();
                var newTeacherKey = new TeacherKey
                {
                    Grade   = courseCatalog.Grade.ToString(),
                    License = license,
                    Code    = generateTeacherCode(license),
                    RecLog  = new RecordLog {
                        CreatedDate = now
                    }
                };
                license.TeacherKeys.Add(newTeacherKey);
                license.RecLog.CreatedDate = now;
                db.Licenses.Add(license);
                db.TeacherKeys.Add(newTeacherKey);
                await db.SaveChangesAsync();

                return(RedirectToAction("Details", "Contracts", new { @id = license.ContractId }));
            }

            ViewBag.CourseCatalogId = new SelectList(db.CourseCatalogs, "Id", "SideName");
            return(View(license));
        }