// 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);
        }
        public DocumentEditViewModel(Document d)
        {
            this.Document = d;

            AvailableAuthors = new List<SelectListItem>
                {
                    new SelectListItem
                    {
                        Value = "",
                        Text = LayoutStrings.ChooseOne
                    }
                };

            AvailableCollections = new List<SelectListItem>
                {
                    new SelectListItem
                    {
                        Value = "",
                        Text = LayoutStrings.ChooseOne
                    }
                };
        }
 private bool DoesCodeAlreadyExist(Document doc)
 {
     return db.Entities
         .Any(d => d.CatalogCode == doc.CatalogCode && d.Id != doc.Id);
 }
        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);
        }