public void UpdateModels(UpdateViewModel model, string userName)
 {
     UpdateModels(model, model.CurrentTripId, model.Ship.ShipId, model.LoadGoodsJourney, 0, userName);
     UpdateModels(model, model.CurrentTripId, model.Ship.ShipId, model.JourneyInProgress, 0, userName);
     UpdateModels(model, model.CurrentTripId, model.Ship.ShipId, model.UnloadGoodsJourney, 0, userName);
     UpdateModels(model, model.CurrentTripId, model.Ship.ShipId, model.UnusualJourney, 0, userName);
     UpdateModels(model, model.CurrentTripId, model.Ship.ShipId, model.JourneyPlan, 1, userName);
     UpdateModels(model, model.CurrentTripId, model.Ship.ShipId, model.Note, 2, userName);
 }
        //public Single SetRestWeight(int shipId, string tripId, int taskId, int? stateId, Single arrangedWeight)
        //{
        //    var jns = db.Journeys.FirstOrDefault(p => p.TripId == tripId && p.ShipId == shipId);
        //    Single result = (jns.Weight - arrangedWeight);
        //    return result;
        //}
        private void UpdateModels(UpdateViewModel upv, string tripId, int shipId, dynamic model, int kind, string userName)
        {
            model.ShipId = shipId;
            model.TripId = tripId;
            switch (kind)
            {
                case 0:
                    int taskId = model.TaskId;
                    int? stateId = model.StateId;
                    int? portId = model.PortId;
                    //if ((stateId == ConstId.LoadedStateId || stateId == ConstId.UnloadedStateId || stateId == ConstId.UnloadingStateId || stateId == ConstId.LoadingStateId) && (taskId == ConstId.LoadTaskId || taskId == ConstId.UnloadTaskId))
                    //{
                    //    model.RestWeight = SetRestWeight(shipId, tripId, taskId, stateId, model.ArrangedWeight);
                    //}
                    //JourneySupervision a = db.JourneySuppervision.Where(p => p.TripId == tripId && p.ShipId == shipId && p.TaskId == taskId && p.PortId == portId && p.StateId == stateId).FirstOrDefault();
                    //if (a == null)
                    //{
                    if (model.PortId != null || model.CreatedDate != null || model.Position != null || model.ArrangedWeight != 0)
                    {
                        var js = new JourneySupervision
                        {
                            ShipId = shipId,
                            TripId = tripId,
                            StateId = stateId,
                            PortId = model.PortId,
                            ArrangedWeight = model.ArrangedWeight,
                            CreatedDate = model.CreatedDate,
                            RestWeight = model.RestWeight,
                            Position = model.Position,
                            TaskId = taskId,
                            CategoryName = model.CategoryName,
                            Updator = userName,
                            UpdateTime = DateTime.Now,
                            NationName = model.NationName
                        };
                        db.JourneySuppervision.Add(js);
                    }
                    //}
                    //else
                    //{
                    //    if (model.StateId == ConstId.LoadingStateId || model.StateId == ConstId.UnloadingStateId)
                    //    {
                    //        var js = new JourneySupervision
                    //        {
                    //            ShipId = shipId,
                    //            TripId = tripId,
                    //            StateId = stateId,
                    //            PortId = model.PortId,
                    //            ArrangedWeight = model.ArrangedWeight,
                    //            CreatedDate = model.CreatedDate,
                    //            RestWeight = model.RestWeight,
                    //            Position = model.Position,
                    //            TaskId = taskId,
                    //            CategoryName = model.CategoryName,
                    //            Updator = userName,
                    //            UpdateTime = DateTime.Now
                    //        };
                    //        db.JourneySuppervision.Add(js);
                    //    }
                    //    else
                    //    {
                    //        a.ArrangedWeight = model.ArrangedWeight ?? 0;
                    //        a.RestWeight = model.RestWeight ?? 0;
                    //        a.CreatedDate = model.CreatedDate;
                    //        a.Note = model.Note;
                    //        a.PortId = model.PortId;
                    //        a.Position = model.Position;
                    //        a.StateId = stateId;
                    //        a.CategoryName = model.CategoryName;
                    //        a.UpdateTime = DateTime.Now;
                    //        a.Updator = userName;
                    //        db.Entry(a).State = EntityState.Modified;
                    //    }
                    //}
                    if (model.StateId != null)
                    {
                        var plan = db.Compares.FirstOrDefault(p => p.StateId == stateId);
                        if (plan != null)
                        {
                            string plid = plan.PlanId;

                            var jourpl = db.journeyPlans.FirstOrDefault(p => p.ShipId == shipId && p.TripId == tripId && p.PlanId == plid && p.PortId == portId);
                            if (jourpl != null)
                            {
                                var plTime = jourpl.PlanTime;
                                DateTime? jnTime = model.CreatedDate;
                                if (plTime != null && jnTime != null)
                                {
                                    var rs1 = db.Results.Where(p => p.TripId == tripId && p.ShipId == shipId && p.PlanId == plid && p.PortId == portId);
                                    if (rs1 != null)
                                    {
                                        foreach (var item in rs1)
                                        {
                                            item.StateId = stateId;
                                            item.JourneyDate = jnTime;
                                            var days = (item.PlanDate.Value - jnTime.Value).Days;
                                            if (days > 0)
                                            {
                                                upv.IsLate = 1;
                                                item.Remark = "Sớm hơn " + days + " ngày so với dự kiến";
                                            }
                                            if (days < 0)
                                            {
                                                item.Remark = "Trễ hơn " + -days + " ngày so với dự kiến";
                                                upv.IsLate = 2;
                                            }
                                            if (days == 0)
                                            {
                                                upv.IsLate = 0;
                                                item.Remark = "Đúng theo dự kiến";
                                            }
                                        }
                                        upv.rStateId = stateId;
                                        upv.rPlanId = plid;
                                        upv.rShipId = shipId;
                                    }
                                }
                            }
                        }

                    }
                    string ctripId = GenerateTripId(tripId);
                    var jn = db.Journeys.FirstOrDefault(p => p.ShipId == shipId && p.TripId == ctripId);
                    if (model.TaskId == ConstId.UnloadTaskId && model.StateId == ConstId.UnloadedStateId && jn == null)
                    {
                        var now = model.CreatedDate??DateTime.Now;
                        var updateJourney = db.Journeys.FirstOrDefault(p => p.ShipId == shipId && p.TripId == tripId);
                        updateJourney.EndDate = now;
                       // db.Entry(updateJourney).State = System.Data.EntityState.Modified;
                       // db.SaveChanges();
                        var journey = new Journey { ShipId = model.ShipId, TripId = ctripId, StartPortId = model.PortId, StartDate = now };
                        db.Journeys.Add(journey);
                    }
                    db.SaveChanges();

                    break;
                case 1:
                    string planId = model.PlanId;
                    //var b = db.journeyPlans.FirstOrDefault(p => p.TripId == tripId && p.ShipId == shipId && p.PlanId == planId);
                    //if (b != null)
                    //{
                    //    b.PlanTime = model.PlanTime;
                    //    b.PortId = model.PortId;
                    //    b.UpdateTime = DateTime.Now;
                    //    b.Updator = userName;
                    //}
                    //else
                    //{
                    if (model.PlanId != null || model.PlanTime != null && model.PortId)
                    {
                        var jp = new JourneyPlan
                        {
                            ShipId = shipId,
                            TripId = tripId,
                            PlanId = planId,
                            PlanTime = model.PlanTime,
                            PortId = model.PortId,
                            Updator = userName,
                            UpdateTime = DateTime.Now
                        };
                        var rs = new Result { PlanDate = model.PlanTime, PlanId = planId, ShipId = shipId, TripId = tripId, PortId = model.PortId };
                        db.journeyPlans.Add(jp);
                        db.Results.Add(rs);
                    }
                    //}
                    db.SaveChanges();
                    break;
                case 2:
                    bool isnull = string.IsNullOrEmpty(model.NoteContent);
                    if (!isnull)
                    {
                        var note = new Note { CreatedDate = model.CreatedDate, ShipId = shipId, TripId = tripId, NoteContent = model.NoteContent, Updator = userName, UpdateTime = DateTime.Now };
                        db.Notes.Add(note);
                        db.SaveChanges();
                    }
                    break;
                default:
                    break;
            }
        }
        public void SetUpdateViewModelShip(UpdateViewModel model, int shipId, string tripId)
        {
            model.CurrentStartTime = db.Journeys.FirstOrDefault(p => p.ShipId == shipId && p.TripId == tripId).StartDate;

            model.AvailableTripIds.Add(tripId);
            model.Ship = db.Ships.Find(shipId);
            model.CurrentTripId = tripId;
            model.LoadGoodsJourney = new JourneySupervision() { ShipId = shipId, TripId = tripId, TaskId = 1 };
            model.UnloadGoodsJourney = new JourneySupervision() { ShipId = shipId, TripId = tripId, TaskId = 2 };
            model.JourneyInProgress = new JourneySupervision() { ShipId = shipId, TripId = tripId, TaskId = 3 };
            model.UnusualJourney = new JourneySupervision() { ShipId = shipId, TripId = tripId, TaskId = 4 };
            model.Note = new Note() { ShipId = shipId, TripId = tripId };
            model.JourneyPlan = new JourneyPlan() { ShipId = shipId, TripId = tripId };
            var journey = db.Journeys.FirstOrDefault(p => p.ShipId == shipId && p.TripId == tripId);
            if (journey.ContractNumber != null)
            {
                model.InsertOrUpdate = 2;
                model.StartNationId = journey.StartNationName != null ? db.Nations.FirstOrDefault(p => p.NationName == journey.StartNationName).NationId : null;
                model.StopNationId = journey.StopNationName != null ? db.Nations.FirstOrDefault(p => p.NationName == journey.StopNationName).NationId : null;
                model.ContractNumber = journey.ContractNumber;
                var shipment = db.Shipments.FirstOrDefault(p => p.ShipId == shipId && p.TripId == tripId && p.ContractNumber == journey.ContractNumber);
                var log = db.UpdateLogs.Where(p => p.ShipId == shipId && p.TripId == tripId).ToList();
                model.Logs = log;
            }
            else
            {
                model.InsertOrUpdate = 1;
            }
        }
        public void UpdateGoodsAndJourney(UpdateViewModel model)
        {
            if (model.InsertOrUpdate == 1)
            {
                Single totalWeight = 0;
                for (int i = 0; i < model.CategoryIds.Count; i++)
                {
                    if (model.CategoryIds[i] != null || model.Weights[i] != null || model.StartPortIds[i] != null || model.StopPortIds[i] != null)
                    {
                        var a = new GoodsMakingPlace { ContractNumber = model.ContractNumber, PortId = model.StartPortIds[i] == null ? model.StartPortIds[0] : model.StartPortIds[i], Kind = false, NationId = model.StartNationId };
                        var b = new GoodsMakingPlace { ContractNumber = model.ContractNumber, PortId = model.StopPortIds[i] == null ? model.StopPortIds[0] : model.StopPortIds[i], Kind = true, NationId = model.StopNationId };
                        if (model.Weights[i] != null || model.CategoryIds[i] != null)
                        {
                            var shipment = new Shipment { CategoryId = model.CategoryIds[i], ShipId = model.Ship.ShipId, ContractNumber = model.ContractNumber, TripId = model.CurrentTripId, Weight = model.Weights[i] ?? 0 };
                            db.Shipments.Add(shipment);
                        }
                        totalWeight += model.Weights[i] != null ? model.Weights[i].Value : 0;
                        try
                        {
                            db.GoodMakingPlaces.Add(a);
                            db.GoodMakingPlaces.Add(b);
                        }
                        catch (Exception)
                        {
                        }
                        var log = new UpdateLog
                        {
                            ContractNumber = model.ContractNumber,
                            TripId = model.CurrentTripId,
                            ShipId = model.Ship.ShipId,
                            Category = db.Categories.Find(model.CategoryIds[i]) == null ? "" : db.Categories.Find(model.CategoryIds[i]).CategoryName,
                            StartPort = db.Ports.Find(model.StartPortIds[i]) == null ? "" : db.Ports.Find(model.StartPortIds[i]).PortName,
                            StopPort = db.Ports.Find(model.StopPortIds[i]) == null ? "" : db.Ports.Find(model.StopPortIds[i]).PortName,
                            Weight = model.Weights[i].ToString()
                        };
                        db.UpdateLogs.Add(log);
                    }
                }
                var jouney = db.Journeys.FirstOrDefault(p => p.ShipId == model.Ship.ShipId && p.TripId == model.CurrentTripId);
                jouney.ContractNumber = model.ContractNumber;
                jouney.Weight += totalWeight;
                jouney.StartNationName = model.StartNationId != null ? db.Nations.Find(model.StartNationId).NationName : null;
                jouney.StopNationName = model.StopNationId == null ? null : db.Nations.Find(model.StopNationId).NationName;
                db.Entry(jouney).State = System.Data.EntityState.Modified;

            }
            //var jouney2 = db.Journeys.FirstOrDefault(p => p.ShipId == model.Ship.ShipId && p.TripId == model.CurrentTripId);
            //jouney2.StartNationName = db.Nations.Find(model.StartNationId).NationName;
            //jouney2.StopNationName = db.Nations.Find(model.StopNationId).NationName;
            //db.Entry(jouney2).State = System.Data.EntityState.Modified;
        }
 public void InitialUpdateViewModel(UpdateViewModel UViewModel)
 {
     UViewModel.AvailableCategories = db.Categories.OrderBy(p => p.CategoryName).ToList();
     UViewModel.AvailableNations = db.Nations.OrderBy(p => p.NationName).ToList();
     UViewModel.AvailablePorts = db.Ports.OrderBy(p => p.PortName).ToList();
     UViewModel.AvailableStates = db.States.OrderBy(p => p.StateName).ToList();
     UViewModel.AvailablePlans = db.Plans.OrderBy(p => p.PlanName).ToList();
     UViewModel.InsertOrUpdate = 1;
     UViewModel.AvailableTripIds = new List<string>();
 }
 public ICollection<Result> GetResult(UpdateViewModel model)
 {
     var result = db.Results.Where(p => p.ShipId == model.rShipId && p.StateId == model.rStateId && p.TripId == model.CurrentTripId && p.PlanId == model.rPlanId).ToList();
     return result;
 }
 public void GetJourney(UpdateViewModel model)
 {
     var journey = db.Journeys.FirstOrDefault(p => p.TripId == model.CurrentTripId && p.ShipId == model.Ship.ShipId);
 }
 public ActionResult UpdateReson(UpdateViewModel model)
 {
     var result = repository.GetResult(model);
     ViewBag.availableResons = repository.GetResons();
     return View(result);
 }
 public ActionResult Update(UpdateViewModel model)
 {
     // model.CurrentStartTime = DateTime.ParseExact(_CurrentStartTime, "dd/MM/yyyy", CultureInfo.CurrentCulture);
     repository.UpdateGoodsAndJourney(model);
     repository.UpdateModels(model, User.Identity.Name);
     if (model.IsLate > 0)
     {
         return RedirectToAction("UpdateReson", model);
     }
     //repository.SaveChange();
     return RedirectToAction("Index", new { shipId = model.Ship.ShipId, tripId = model.CurrentTripId, IsRefresh = "true" });
 }