/// <summary>
        /// Add a new shipment to the db and return a fully loaded shipment
        /// </summary>
        /// <param name="modelShipment">Accepts a shipment fully populated with no id</param>
        /// <returns>Returns a loaded Shipment </returns>
        public string AddShipment(ShipmentVM s, string BuildingUserID)
        {
            try
            {

                s.ID = Guid.NewGuid().ToString();

                Shipment ObjS = new Shipment
                {
                    ID = s.ID,
                    FirstName = s.FirstName,
                    LastName = s.LastName,
                    Phone = s.Phone,
                    Address = s.Address,
                    City = s.City,
                    State = s.State,
                    Zipcode = s.Zipcode,
                    aptID = s.ApartmentID,
                    ApartmentNumber = s.ApartmentNumber,
                    BuildingID = s.BuildingID,
                    TenantID = s.UserID,
                    Notified = false,
                    Created = DateTime.Now,
                    BuildingUserID = BuildingUserID,
                    isNewUser =s.isNewUser                      
                };
                List<Package> ObjPs = new List<Package>();
                foreach (var item in s.Packages)
                {
                    Package ObjP = new Package
                    {
                        ArrivalTime = DateTime.Now,
                        Note = item.Note,
                        TrackingNumber = item.Trackingnumber,
                        ShipmentID = ObjS.ID,
                        ShippingCarrierID = Convert.ToInt32(item.Service),
                        ShippingServiceID = Convert.ToInt32(item.shippingService),
                        PackageDeliveryStatusID = 1,// default status Undelivered
                        PakageTypeID = Convert.ToInt32(item.PackageType)
                    };

                    ObjPs.Add(ObjP);
                };
       

                db.Shipment.Add(ObjS);
             
                db.Package.AddRange(ObjPs);

                db.SaveChanges();
            
                return "Shipment was successfully added!";
            }
            catch (Exception)
            {
                throw;
            }                    
        }
        public ActionResult AddShipemnt(ShipmentVM model)
        {

            if (model != null)
            {
                if (model.isNewUser == true)
                {

                }
                else 
                {
                    DeliveryWorker DW = new DeliveryWorker();
                    var status = DW.AddShipment(model, User.Identity.GetUserId());

                    var obj = db.Package
                        .Where(c => c.PackageDeliveryStatus.Status != "Delivery")
                        .Where(c => c.Shipment.TenantID == model.UserID)
                        .OrderByDescending(c => c.ArrivalTime)
                        .Select(c => new {TrackingNumber = c.TrackingNumber, ArrivalTime = c.ArrivalTime })
                        .Take(10)
                        .ToList();
                    var TrackingCount = obj.Count();
                    var jsonObj = Json(model);
                    var Jsonpackages = Json(obj);


                    var hubContext = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<NotificationsHub>();
                    hubContext.Clients.All.incomingPackageNotification(model.BuildingID, model.ApartmentID, jsonObj, Jsonpackages, TrackingCount);
                }

                
            
            }
            return RedirectToAction("Delivery");
        }