private Models.Company CreateNewCompany(CompanyDTO company, int nextId, out SerializableCompany serialized) { serialized = null; if (company.EntryDate == null) { Log(new CallbackParameters(CallbackReason.NullEntryDate) { Company = company }); return(null); } var entryDate = company.EntryDate.Value; var companyTypes = company.CompanyTypes.Where(t => t != null).Select(t => t.Value).ToList(); serialized = SerializableCompany.Deserialize(company.Serialized); if (serialized != null) { if (serialized.Types != null) { companyTypes.AddRange(serialized.Types); } if (serialized.Customer != null) { companyTypes.Add(CompanyType.Customer); } } if (company.Name.EndsWith("isomedix", true, CultureInfo.InvariantCulture)) { companyTypes.Add(CompanyType.TreatmentFacility); } else if (company.Name.StartsWith("sterigenics", true, CultureInfo.InvariantCulture)) { companyTypes.Add(CompanyType.TreatmentFacility); } var newCompany = new Models.Company { EmployeeId = company.EmployeeId ?? _newContextHelper.DefaultEmployee.EmployeeId, TimeStamp = entryDate.ConvertLocalToUTC(), Id = nextId, Name = company.Name, Active = !company.InActive, CompanyTypes = companyTypes.Distinct().Select(t => new CompanyTypeRecord { CompanyId = nextId, CompanyType = (int)t }).ToList() }; return(newCompany); }
private Company SyncCompany(Data.Models.Company company, out bool commitNewContext) { commitNewContext = false; var oldCompany = OldContext.Companies .Select(c => new { company = c, contacts = c.Contacts, profiles = c.tblProfiles }) .Where(c => c.company.Company_IA == company.Name) .ToList() .Select(c => c.company) .FirstOrDefault(); if (oldCompany == null) { oldCompany = new Company { Company_IA = company.Name, EntryDate = company.TimeStamp.ConvertUTCToLocal().RoundMillisecondsForSQL(), s_GUID = Guid.NewGuid(), }; OldContext.Companies.AddObject(oldCompany); } oldCompany.CType = GetCType(company.CompanyTypes.Select(c => c.CompanyTypeEnum)); oldCompany.InActive = !company.Active; oldCompany.EmployeeID = company.EmployeeId; oldCompany.Serialized = SerializableCompany.Serialize(company); var oldIds = new List <int?>(); var contactsToRemove = oldCompany.Contacts == null ? new List <Contact>() : oldCompany.Contacts.ToList(); foreach (var contact in company.Contacts) { foreach (var address in contact.Addresses.DefaultIfEmpty(new ContactAddress { Address = new Address(), OldContextID = contact.OldContextID })) { var oldContact = contactsToRemove.FirstOrDefault(c => c.ID == address.OldContextID); if (oldContact != null) { contactsToRemove.Remove(oldContact); } else { oldContact = new Contact { Company_IA = company.Name, Broker = company.Customer == null ? null : company.Customer.Broker.Name, EntryDate = DateTime.Now.RoundMillisecondsForSQL(), s_GUID = Guid.NewGuid() }; OldContext.Contacts.AddObject(oldContact); OldContext.SaveChanges(); address.OldContextID = oldContact.ID; commitNewContext = true; } oldIds.Add(oldContact.ID); oldContact.Contact_IA = contact.Name; oldContact.Phone_IA = contact.PhoneNumber; oldContact.EmailAddress_IA = contact.EMailAddress; oldContact.AddrType = address.AddressDescription; oldContact.Address1_IA = address.Address.AddressLine1; oldContact.Address2_IA = address.Address.AddressLine2; oldContact.Address3_IA = address.Address.AddressLine3; oldContact.City_IA = address.Address.City; oldContact.State_IA = address.Address.State; oldContact.Zip_IA = address.Address.PostalCode; oldContact.Country_IA = address.Address.Country; } if (!oldIds.Contains(contact.OldContextID)) { contact.OldContextID = oldIds.FirstOrDefault(); commitNewContext = true; } } contactsToRemove.ForEach(c => OldContext.Contacts.DeleteObject(c)); if (company.Customer != null) { var entryDate = OldContext.tblProfiles.Select(n => n.EntryDate).DefaultIfEmpty(DateTime.Now.RoundMillisecondsForSQL()).Max(); var notesToRemove = (oldCompany.tblProfiles == null ? new List <tblProfile>() : oldCompany.tblProfiles.ToList()).ToDictionary(p => p.EntryDate); foreach (var note in company.Customer.Notes) { tblProfile oldNote; if (note.EntryDate != null && notesToRemove.TryGetValue(note.EntryDate.Value, out oldNote)) { notesToRemove.Remove(oldNote.EntryDate); } else { entryDate = entryDate.AddSeconds(1); oldNote = new tblProfile { EntryDate = entryDate, Company_IA = oldCompany.Company_IA, s_GUID = Guid.NewGuid() }; OldContext.tblProfiles.AddObject(oldNote); note.EntryDate = oldNote.EntryDate; commitNewContext = true; } oldNote.Boldit = note.Bold; oldNote.ProfileType = note.Type; oldNote.ProfileText = note.Text; } notesToRemove.Values.ForEach((n, i) => OldContext.tblProfiles.DeleteObject(n)); } return(oldCompany); }