public long ProcessCompanyAddresses(List <CompanyAddressObject> addresses, long importerId)
        {
            try
            {
                if (!addresses.Any())
                {
                    return(-2);
                }
                using (var db = new ImportPermitEntities())
                {
                    var count = 0;

                    addresses.ForEach(i =>
                    {
                        var newAdd = new Address
                        {
                            AddressLine1 = i.AddressLine1,
                            AddressLine2 = i.AddressLine2,
                            CityId       = i.CityId,
                            LastUpdated  = DateTime.Now.ToString("yyyy/MM/dddd")
                        };

                        var addInfo = db.Addresses.Add(newAdd);
                        db.SaveChanges();

                        var cmAdd = new ImporterAddress
                        {
                            AddressId     = addInfo.AddressId,
                            AddressTypeId = i.AddressTypeId,
                            ImporterId    = importerId,
                            LastUpdated   = DateTime.Now.ToString("yyyy/MM/dddd")
                        };

                        db.ImporterAddresses.Add(cmAdd);
                        db.SaveChanges();
                        count++;
                    });

                    return(count == addresses.Count() ? 5 : -1);
                }
            }
            catch (DbEntityValidationException e)
            {
                var str = "";
                foreach (var eve in e.EntityValidationErrors)
                {
                    str += string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                         eve.Entry.Entity.GetType().Name, eve.Entry.State) + "\n";
                    str = eve.ValidationErrors.Aggregate(str, (current, ve) => current + (string.Format("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage) + " \n"));
                }
                ErrorLogger.LoggError(e.StackTrace, e.Source, str);
                return(0);
            }
        }
        public long ProcessCompanyProfileAndAddresses(GeneralInformationObject info)
        {
            try
            {
                if (info.CompanyId < 1)
                {
                    return(-2);
                }
                using (var db = new ImportPermitEntities())
                {
                    var duplicates = db.Importers.Where(s => s.Name.Trim().ToLower() == info.Name.Trim().ToLower()).ToList();
                    if (!duplicates.Any())
                    {
                        return(-3);
                    }

                    var companies = db.Importers.Where(s => s.Id == info.CompanyId).Include("ImporterAddresses").ToList();
                    if (!companies.Any())
                    {
                        return(-3);
                    }

                    var j = companies[0];
                    j.RCNumber                 = info.RCNumber;
                    j.TIN                      = info.TIN;
                    j.Name                     = info.Name;
                    j.StructureId              = info.StructureId;
                    j.ShortNme                 = info.ShortNme;
                    j.TotalStaff               = info.TotalStaff;
                    j.TotalExpatriate          = info.TotalExpatriate;
                    j.BusinessCommencementDate = info.BusinessCommencementDate;
                    db.Entry(j).State          = EntityState.Modified;
                    db.SaveChanges();

                    if (info.CompanyAddressObjects.Any())
                    {
                        var existingAddresses = j.ImporterAddresses.ToList();
                        info.CompanyAddressObjects.ForEach(i =>
                        {
                            var existing = existingAddresses.Find(u => u.AddressId == i.AddressId);
                            var add      = db.Addresses.Find(i.AddressId);
                            if (existing != null && existing.AddressId > 0 && add != null && add.AddressId > 0)
                            {
                                existing.AddressTypeId = i.AddressTypeId;
                                existing.IsRegisteredSameAsOperational = i.IsRegisteredSameAsOperational;
                                db.Entry(existing).State = EntityState.Modified;
                                db.SaveChanges();

                                add.AddressLine1         = i.AddressLine1;
                                add.CityId               = i.CityId;
                                add.LastUpdated          = DateTime.Now.ToString("yyyy/MM/dddd");
                                db.Entry(existing).State = EntityState.Modified;
                                db.SaveChanges();
                            }
                            else
                            {
                                var newAdd = new Address
                                {
                                    AddressLine1 = i.AddressLine1,
                                    AddressLine2 = i.AddressLine2,
                                    CityId       = i.CityId,
                                    LastUpdated  = DateTime.Now.ToString("yyyy/MM/dddd")
                                };

                                var addInfo = db.Addresses.Add(newAdd);
                                db.SaveChanges();

                                var cmAdd = new ImporterAddress
                                {
                                    AddressId     = addInfo.AddressId,
                                    AddressTypeId = i.AddressTypeId,
                                    ImporterId    = info.CompanyId,
                                    LastUpdated   = DateTime.Now.ToString("yyyy/MM/dddd")
                                };

                                db.ImporterAddresses.Add(cmAdd);
                                db.SaveChanges();
                            }
                        });
                    }

                    return(j.Id);
                }
            }
            catch (DbEntityValidationException e)
            {
                var str = "";
                foreach (var eve in e.EntityValidationErrors)
                {
                    str += string.Format("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",
                                         eve.Entry.Entity.GetType().Name, eve.Entry.State) + "\n";
                    str = eve.ValidationErrors.Aggregate(str, (current, ve) => current + (string.Format("- Property: \"{0}\", Error: \"{1}\"", ve.PropertyName, ve.ErrorMessage) + " \n"));
                }
                ErrorLogger.LoggError(e.StackTrace, e.Source, str);
                return(0);
            }
        }