public async Task<ActionResult> Edit(Document document)
        {
            if (DoesCodeAlreadyExist(document))
            {
                ModelState.AddModelError("CatalogCode", DocumentStrings.CodeAlreadyExists);
            }

            if (ModelState.IsValid)
            {
                foreach (var t in document.Translations)
                {
                    db.UpdateTranslation(t);
                }

                db.Update(document);

                await db.SaveChangesAsync();

                return RedirectToAction("Index");
            }

            var model = new DocumentEditViewModel(document);
            await model.PopulateDropDownLists(db.Set<Author>(), db.Set<Collection>());

            return View(model);
        }
        // GET: BackOffice/Documents/Create
        public async Task<ActionResult> Create(int? collectionId, int? authorId)
        {
            var doc = new Document();

            doc.Translations.Add(new DocumentTranslation
            {
                LanguageCode = LanguageDefinitions.DefaultLanguage
            });

            // Check for a collection.
            if (collectionId != null && db.Set<Collection>().Any(c => c.Id == collectionId))
            {
                doc.CatalogCode = CodeGenerator.SuggestDocumentCode(collectionId.Value);
                doc.CollectionId = collectionId.Value;
            }

            // Check for an author.
            if (authorId != null && db.Set<Author>().Any(a => a.Id == authorId))
            {
                doc.AuthorId = authorId.Value;
            }

            var model = new DocumentEditViewModel(doc);
            await model.PopulateDropDownLists(db.Set<Author>(), db.Set<Collection>());

            return View(model);
        }
        // GET: BackOffice/Documents/Edit/5
        public async Task<ActionResult> Edit(int? id)
        {
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }

            Document document = await db.GetByIdAsync(id);

            if (document == null)
            {
                return HttpNotFound();
            }

            document.Translations = document.Translations.ToList();

            var model = new DocumentEditViewModel(document);
            await model.PopulateDropDownLists(db.Set<Author>(), db.Set<Collection>());

            return View(model);
        }