public bool DeleteById(int id)
 {
     using (var context = new PRToolsEntities())
     {
         var documentToDelete = context.Documents.FirstOrDefault(x => x.DocumentId == id);
         if (documentToDelete == null)
             return false;
         context.DeleteObject(documentToDelete);
         context.SaveChanges();
         return true;
     }
 }
 //todo: need to either use PRG pattern or ajax so don't try to delete multiple times
 public void Delete(DeleteAccountRequest deleteAccountRequest)
 {
     using (var context = new PRToolsEntities())
     {
         Account accountEntity =
             context.Accounts.SingleOrDefault(x => x.AccountId == deleteAccountRequest.AccountId);
         if (accountEntity != null)
         {
             context.Accounts.DeleteObject(accountEntity);
             context.SaveChanges();
         }
     }
 }
        public void ChangePassword(string username, string currentPassword, string newPassword)
        {
            using (var context = new PRToolsEntities())
            {
                IQueryable<Account> result =
                    context.Accounts.Where(x => x.Username == username && x.Password == currentPassword);

                if (result.Count() != 1)
                    throw new ObjectNotFoundException();

                result.First().Password = newPassword;
                result.First().MustChangePassword = false;
                context.SaveChanges();
            }
        }
 public void LogException(Exception exception)
 {
     Debug.WriteLine(exception.ToString());
     using (var context = new PRToolsEntities())
     {
         context.AddToLogs(new Log
                               {
                                   LogItemData = exception.Message,
                                   SecondaryLogItemData =
                                       (exception.InnerException != null
                                            ? exception.InnerException.Message
                                            : null),
                                   TertiaryLogItemData = exception.StackTrace,
                               });
         context.SaveChanges();
     }
 }
        public void Create(CreateAccountRequest createAccountRequest, string encryptedPassword)
        {
            using (var context = new PRToolsEntities())
            {
                string roleName = createAccountRequest.Role.ToString();
                Role roleEntity = context.Roles.SingleOrDefault(x => x.RoleName == roleName);
                var accountEntity = new Account
                                        {
                                            FirstName = createAccountRequest.FirstName,
                                            LastName = createAccountRequest.LastName,
                                            Username = createAccountRequest.Username,
                                            Password = encryptedPassword,
                                            Email = createAccountRequest.EmailAddress,
                                            Role = roleEntity,
                                            MustChangePassword = true,
                                        };

                context.Accounts.AddObject(accountEntity);
                context.SaveChanges();
            }
        }
        public void UpsertLocalizedDocuments(int DocumentId, List<ProcessedDocument> processedDocuments, String userName)
        {
            using (var context = new PRToolsEntities())
            {
                var d = context.Documents.Where(x => x.DocumentId == DocumentId).FirstOrDefault();
                var customerIds = processedDocuments.Select(pd => pd.CustomerId).ToList();

                var existingCustomerURLS = d.CustomerDocumentURLs;

                foreach (var pd in processedDocuments)
                {
                    var durl = existingCustomerURLS.Where(x => x.CustomerId == pd.CustomerId).FirstOrDefault() ??
                               GetCustomerDocumentUrl(pd.CustomerId, DocumentId, userName, context);
                    durl.Title = pd.Title;
                    // may want to not update this if it has been (edited) -- meaning manually tweaked.
                    durl.Body = pd.Body;
                    durl.Edited = pd.Edited;

                    //durl.CustomerId =
                    durl.Status = CustomerDocumentURLStatus.Localized;
                }

                context.SaveChanges();
            }
        }
 public void Update(Domain.CustomerDocumentURL curl)
 {
     using (var context = new PRToolsEntities())
     {
         var cdurl = context.CustomerDocumentURLs.Where(cdu => cdu.CustomerDocumentURLId == curl.URLKey).First();
         cdurl.Title = curl.Title;
         cdurl.Body = curl.Body;
         cdurl.Status = curl.Status;
         cdurl.Edited = curl.Edited;
         cdurl.CustomerComments = curl.CustomerComments;
         context.SaveChanges();
     }
 }
        public Domain.Document Update(string username, Domain.Document document)
        {
            using (var context = new PRToolsEntities())
            {
                Document currentDocument =
                    context.Documents.FirstOrDefault(x => x.DocumentId == document.DocumentId);

                currentDocument.Title = document.Title;
                currentDocument.Body = document.Body;
                currentDocument.CustomerID = document.CustomerId;
                context.SaveChanges();

                return new Domain.Document
                           {
                               Body = currentDocument.Body,
                               CreatedByUsername = currentDocument.CreatedByUsername,
                               CreatedDate = currentDocument.CreatedDate,
                               DocumentId = currentDocument.DocumentId,
                               Title = currentDocument.Title,
                               CustomerId = Convert.ToInt32(currentDocument.CustomerID),
                           };
            }
        }
        public Domain.Document Save(string username, Domain.Document document)
        {
            using (var context = new PRToolsEntities())
            {
                var documentEntity = new Document
                {
                    CreatedByUsername = username,
                    Title = document.Title,
                    Body = document.Body,
                    CreatedDate = _timeProvider.Now,
                    CustomerID = document.CustomerId,
                    CutoffDate = document.CutoffDate,
                };
                context.Documents.AddObject(documentEntity);
                context.SaveChanges();

                return new Domain.Document
                {
                    DocumentId = documentEntity.DocumentId,
                    Title = documentEntity.Title,
                    Body = documentEntity.Body,
                    CreatedByUsername = documentEntity.CreatedByUsername,
                    CreatedDate = documentEntity.CreatedDate,
                    CustomerId = Convert.ToInt32(documentEntity.CustomerID),
                    CutoffDate = Convert.ToDateTime(documentEntity.CutoffDate),
                };
            }
        }
        public Domain.Document Save(string username, SaveDocumentInputModel saveDocumentInputModel)
        {
            using (var context = new PRToolsEntities())
            {
                var documentEntity = new Document
                                         {
                                             CreatedByUsername = username,
                                             Title = saveDocumentInputModel.Title,
                                             Body = saveDocumentInputModel.Body,
                                             CreatedDate = _timeProvider.Now,
                                             CustomerID = saveDocumentInputModel.CustomerId
                                         };
                context.Documents.AddObject(documentEntity);
                context.SaveChanges();

                return new Domain.Document
                           {
                               DocumentId = documentEntity.DocumentId,
                               Title = documentEntity.Title,
                               Body = documentEntity.Body,
                               CreatedByUsername = documentEntity.CreatedByUsername,
                               CreatedDate = documentEntity.CreatedDate,
                           };
            }
        }
        public void Delete(int customerId)
        {
            using (var context = new PRToolsEntities())
            {
                Customer customerEntity =
                    context.Customers.Include("Addresses").FirstOrDefault(x => x.CustomerId == customerId);
                if (customerEntity == null)
                    throw new ObjectNotFoundException();

                List<Address> addressEntities = customerEntity.Addresses.ToList();
                foreach (Address addressEntity in addressEntities)
                {
                    context.DeleteObject(addressEntity);
                }

                List<Contact> contactEntities = customerEntity.Contacts.ToList();
                foreach (Contact contactEntity in contactEntities)
                {
                    context.DeleteObject(contactEntity);
                }

                context.DeleteObject(customerEntity);
                context.SaveChanges();
            }
        }
        public void Create(CreateCustomerRequest createCustomerRequest)
        {
            using (var context = new PRToolsEntities())
            {
                var customerEntity = new Customer
                                         {

                                             FacebookURL = createCustomerRequest.FacebookUrl,
                                             ZLastName = createCustomerRequest.ZLastName,
                                             ZFirstName = createCustomerRequest.ZFirstName,
                                             WebsiteURL = createCustomerRequest.WebsiteUrl,
                                             TwitterHandle = createCustomerRequest.TwitterHandle,
                                             Phone = createCustomerRequest.Phone,
                                             Name = createCustomerRequest.Name,
                                             ListName = createCustomerRequest.ListName,
                                             GooglePlacesURL = createCustomerRequest.GooglePlacesUrl,
                                         };

                if (createCustomerRequest.ParentCustomerId > 0)
                    customerEntity.ParentCustomerId = createCustomerRequest.ParentCustomerId;

                if (createCustomerRequest.AccountManagerId > 0)
                    customerEntity.AccountManagerId = createCustomerRequest.AccountManagerId;

                if (createCustomerRequest.CustomerType != Domain.CustomerType.Undefined)
                {
                    string customerTypeKey = createCustomerRequest.CustomerType.ToString();
                    CustomerType customerType =
                        context.CustomerTypes.FirstOrDefault(
                            x => x.CustomerTypeKey == customerTypeKey);

                    customerEntity.CustomerType = customerType;
                }

                customerEntity.Addresses.Add(new Address
                                                 {
                                                     Street = createCustomerRequest.MailingAddress.Street,
                                                     AdditionalInfo =
                                                         createCustomerRequest.MailingAddress.AdditionalInfo,
                                                     City = createCustomerRequest.MailingAddress.City,
                                                     State = createCustomerRequest.MailingAddress.State,
                                                     Zipcode = createCustomerRequest.MailingAddress.Zipcode,
                                                     AddressType = "Mailing",
                                                 });

                foreach (Domain.Contact contact in createCustomerRequest.Contacts)
                {
                    customerEntity.Contacts.Add(new Contact
                                                    {
                                                        FirstName = contact.FirstName,
                                                        LastName = contact.LastName,
                                                        Phone = contact.Phone,
                                                        Email = contact.Email,
                                                    });
                }

                context.Customers.AddObject(customerEntity);
                context.SaveChanges();
            }
        }
        public void Update(UpdateCustomerRequest updateCustomerRequest)
        {
            using (var context = new PRToolsEntities())
            {
                IQueryable<Customer> customerEntities =
                    context.Customers.Where(x => x.CustomerId == updateCustomerRequest.Id);
                if (customerEntities.Count() < 1)
                    throw new ObjectNotFoundException();

                Customer customerEntity = customerEntities.FirstOrDefault();
                customerEntity.Name = updateCustomerRequest.Name;
                customerEntity.Phone = updateCustomerRequest.Phone;
                customerEntity.GooglePlacesURL = updateCustomerRequest.GooglePlacesUrl;
                customerEntity.TwitterHandle = updateCustomerRequest.TwitterHandle;
                customerEntity.WebsiteURL = updateCustomerRequest.WebsiteUrl;
                customerEntity.FacebookURL = updateCustomerRequest.FacebookUrl;
                customerEntity.ZFirstName = updateCustomerRequest.ZFirstName;
                customerEntity.ZLastName = updateCustomerRequest.ZLastName;

                if (updateCustomerRequest.ParentCustomerId > 0)
                    customerEntity.ParentCustomerId = updateCustomerRequest.ParentCustomerId;
                else
                {
                    customerEntity.ParentCustomerId = null;
                }

                if(updateCustomerRequest.AccountManagerId > 0)
                    customerEntity.AccountManagerId = updateCustomerRequest.AccountManagerId;
                else
                {
                    customerEntity.AccountManagerId = null;
                }

                if (updateCustomerRequest.CustomerType != Domain.CustomerType.Undefined)
                {
                    string customerTypeKey = updateCustomerRequest.CustomerType.ToString();
                    CustomerType customerType =
                        context.CustomerTypes.FirstOrDefault(x => x.CustomerTypeKey == customerTypeKey);
                    customerEntity.CustomerType = customerType;
                }

                Address addressEntity = context.Addresses.FirstOrDefault();
                addressEntity.Street = updateCustomerRequest.MailingAddress.Street;
                addressEntity.AdditionalInfo = updateCustomerRequest.MailingAddress.AdditionalInfo;
                addressEntity.City = updateCustomerRequest.MailingAddress.City;
                addressEntity.State = updateCustomerRequest.MailingAddress.State;
                addressEntity.Zipcode = updateCustomerRequest.MailingAddress.Zipcode;

                foreach (Domain.Contact contact in updateCustomerRequest.Contacts)
                {
                    int id = contact.Id;
                    Contact contactEntity = context.Contacts.FirstOrDefault(x => x.ContactId == id);

                    contactEntity.FirstName = contact.FirstName;
                    contactEntity.LastName = contact.LastName;
                    contactEntity.Phone = contact.Phone;
                    contactEntity.Email = contact.Email;
                }

                context.SaveChanges();
            }
        }
        public void Update(UpdateAccountRequest updateAccountRequest)
        {
            using (var _context = new PRToolsEntities())
            {
                string rolename = updateAccountRequest.Role.ToString();
                Role role = _context.Roles.Single(x => x.RoleName == rolename);

                Account account = _context.Accounts.Single(x => x.AccountId == updateAccountRequest.AccountId);
                account.FirstName = updateAccountRequest.FirstName;
                account.LastName = updateAccountRequest.LastName;
                account.Role = role;
                account.Email = updateAccountRequest.EmailAddress;

                _context.SaveChanges();
            }
        }