Пример #1
0
        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);
        }
Пример #2
0
        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);
        }