public DrogueRunPositionModel GetDrogueRunPositionModelExistDB(DrogueRunPositionModel droguePositionModel)
        {
            DrogueRunPositionModel DrogueRunPositionModel = (from c in db.DrogueRunPositions
                                                             where c.DrogueRunID == droguePositionModel.DrogueRunID &&
                                                             c.Ordinal == droguePositionModel.Ordinal &&
                                                             c.StepDateTime_Local == droguePositionModel.StepDateTime_Local
                                                             select new DrogueRunPositionModel
            {
                Error = "",
                DrogueRunPositionID = c.DrogueRunPositionID,
                DBCommand = (DBCommandEnum)c.DBCommand,
                DrogueRunID = c.DrogueRunID,
                Ordinal = c.Ordinal,
                StepLat = c.StepLat,
                StepLng = c.StepLng,
                StepDateTime_Local = c.StepDateTime_Local,
                CalculatedSpeed_m_s = c.CalculatedSpeed_m_s,
                CalculatedDirection_deg = c.CalculatedDirection_deg,
                LastUpdateDate_UTC = c.LastUpdateDate_UTC,
                LastUpdateContactTVItemID = c.LastUpdateContactTVItemID,
            }).FirstOrDefault <DrogueRunPositionModel>();

            if (DrogueRunPositionModel == null)
            {
                return(ReturnError(string.Format(ServiceRes.CouldNotFind_With_Equal_, ServiceRes.DrogueRunPosition,
                                                 ServiceRes.DrogueRunID + "," +
                                                 ServiceRes.Ordinal + "," +
                                                 ServiceRes.StepDateTime_Local,
                                                 droguePositionModel.DrogueRunID + "," +
                                                 droguePositionModel.Ordinal + "," +
                                                 droguePositionModel.StepDateTime_Local)));
            }

            return(DrogueRunPositionModel);
        }
        // Post
        public DrogueRunPositionModel PostAddDrogueRunPositionDB(DrogueRunPositionModel droguePositionModel)
        {
            string retStr = DrogueRunPositionModelOK(droguePositionModel);

            if (!string.IsNullOrWhiteSpace(retStr))
            {
                return(ReturnError(retStr));
            }

            ContactOK contactOK = IsContactOK();

            if (!string.IsNullOrEmpty(contactOK.Error))
            {
                return(ReturnError(contactOK.Error));
            }

            bool DrogueRunExist = DrogueRunExistWithDrogueRunIDDB(droguePositionModel.DrogueRunID);

            if (!DrogueRunExist)
            {
                return(ReturnError(string.Format(ServiceRes._DoesNotExist, ServiceRes.DrogueRun + "[" + droguePositionModel.DrogueRunID + "]")));
            }

            DrogueRunPositionModel DrogueRunPositionModelExist = GetDrogueRunPositionModelExistDB(droguePositionModel);

            if (string.IsNullOrWhiteSpace(DrogueRunPositionModelExist.Error))
            {
                return(ReturnError(string.Format(ServiceRes._AlreadyExists, ServiceRes.DrogueRunPosition)));
            }

            DrogueRunPosition droguePositionNew = new DrogueRunPosition();

            retStr = FillDrogueRunPosition(droguePositionNew, droguePositionModel, contactOK);
            if (!string.IsNullOrWhiteSpace(retStr))
            {
                return(ReturnError(retStr));
            }

            using (TransactionScope ts = new TransactionScope())
            {
                db.DrogueRunPositions.Add(droguePositionNew);
                retStr = DoAddChanges();
                if (!string.IsNullOrWhiteSpace(retStr))
                {
                    return(ReturnError(retStr));
                }

                LogModel logModel = _LogService.PostAddLogForObj("DrogueRunPositions", droguePositionNew.DrogueRunPositionID, LogCommandEnum.Add, droguePositionNew);
                if (!string.IsNullOrWhiteSpace(logModel.Error))
                {
                    return(ReturnError(logModel.Error));
                }

                ts.Complete();
            }
            return(GetDrogueRunPositionModelWithDrogueRunPositionIDDB(droguePositionNew.DrogueRunPositionID));
        }
        // Check
        public string DrogueRunPositionModelOK(DrogueRunPositionModel drogueRunPositionModel)
        {
            string retStr = FieldCheckNotZeroInt(drogueRunPositionModel.DrogueRunID, ServiceRes.DrogueRunID);

            if (!string.IsNullOrWhiteSpace(retStr))
            {
                return(retStr);
            }

            retStr = FieldCheckNotNullAndWithinRangeInt(drogueRunPositionModel.Ordinal, ServiceRes.Ordinal, 0, 20000);
            if (!string.IsNullOrWhiteSpace(retStr))
            {
                return(retStr);
            }

            retStr = FieldCheckNotNullAndWithinRangeDouble(drogueRunPositionModel.StepLat, ServiceRes.StepLat, -90.0D, 90.0D);
            if (!string.IsNullOrWhiteSpace(retStr))
            {
                return(retStr);
            }

            retStr = FieldCheckNotNullAndWithinRangeDouble(drogueRunPositionModel.StepLng, ServiceRes.StepLng, -180.0D, 180.0D);
            if (!string.IsNullOrWhiteSpace(retStr))
            {
                return(retStr);
            }

            retStr = FieldCheckNotNullDateTime(drogueRunPositionModel.StepDateTime_Local, ServiceRes.StepDateTime_Local);
            if (!string.IsNullOrWhiteSpace(retStr))
            {
                return(retStr);
            }

            retStr = FieldCheckNotNullAndWithinRangeDouble(drogueRunPositionModel.CalculatedSpeed_m_s, ServiceRes.CalculatedSpeed_m_s, 0.0D, 100.0D);
            if (!string.IsNullOrWhiteSpace(retStr))
            {
                return(retStr);
            }

            retStr = FieldCheckNotNullAndWithinRangeDouble(drogueRunPositionModel.CalculatedDirection_deg, ServiceRes.CalculatedDirection_deg, 0.0D, 360.0D);
            if (!string.IsNullOrWhiteSpace(retStr))
            {
                return(retStr);
            }

            retStr = _BaseEnumService.DBCommandOK(drogueRunPositionModel.DBCommand);
            if (!string.IsNullOrWhiteSpace(retStr))
            {
                return(retStr);
            }

            return("");
        }
        public DrogueRunPositionModel PostUpdateDrogueRunPositionDB(DrogueRunPositionModel droguePositionModel)
        {
            string retStr = DrogueRunPositionModelOK(droguePositionModel);

            if (!string.IsNullOrEmpty(retStr))
            {
                return(ReturnError(retStr));
            }

            ContactOK contactOK = IsContactOK();

            if (!string.IsNullOrEmpty(contactOK.Error))
            {
                return(ReturnError(contactOK.Error));
            }

            DrogueRunPosition droguePositionToUpdate = GetDrogueRunPositionWithDrogueRunPositionIDDB(droguePositionModel.DrogueRunPositionID);

            if (droguePositionToUpdate == null)
            {
                return(ReturnError(string.Format(ServiceRes.CouldNotFind_ToUpdate, ServiceRes.DrogueRunPosition)));
            }

            retStr = FillDrogueRunPosition(droguePositionToUpdate, droguePositionModel, contactOK);
            if (!string.IsNullOrWhiteSpace(retStr))
            {
                return(ReturnError(retStr));
            }

            using (TransactionScope ts = new TransactionScope())
            {
                retStr = DoUpdateChanges();
                if (!string.IsNullOrWhiteSpace(retStr))
                {
                    return(ReturnError(retStr));
                }

                LogModel logModel = _LogService.PostAddLogForObj("DrogueRunPositions", droguePositionToUpdate.DrogueRunPositionID, LogCommandEnum.Change, droguePositionToUpdate);
                if (!string.IsNullOrWhiteSpace(logModel.Error))
                {
                    return(ReturnError(logModel.Error));
                }

                ts.Complete();
            }
            return(GetDrogueRunPositionModelWithDrogueRunPositionIDDB(droguePositionToUpdate.DrogueRunPositionID));
        }
        // Fill
        public string FillDrogueRunPosition(DrogueRunPosition drogueRunPositionNew, DrogueRunPositionModel drogueRunPositionModel, ContactOK contactOK)
        {
            drogueRunPositionNew.DBCommand               = (int)drogueRunPositionModel.DBCommand;
            drogueRunPositionNew.DrogueRunID             = drogueRunPositionModel.DrogueRunID;
            drogueRunPositionNew.Ordinal                 = drogueRunPositionModel.Ordinal;
            drogueRunPositionNew.StepLat                 = drogueRunPositionModel.StepLat;
            drogueRunPositionNew.StepLng                 = drogueRunPositionModel.StepLng;
            drogueRunPositionNew.StepDateTime_Local      = drogueRunPositionModel.StepDateTime_Local;
            drogueRunPositionNew.CalculatedSpeed_m_s     = drogueRunPositionModel.CalculatedSpeed_m_s;
            drogueRunPositionNew.CalculatedDirection_deg = drogueRunPositionModel.CalculatedDirection_deg;
            drogueRunPositionNew.LastUpdateDate_UTC      = DateTime.UtcNow;
            if (contactOK == null)
            {
                drogueRunPositionNew.LastUpdateContactTVItemID = 2;
            }
            else
            {
                drogueRunPositionNew.LastUpdateContactTVItemID = contactOK.ContactTVItemID;
            }

            return("");
        }
Exemple #6
0
        // Post
        public DrogueRunModel PostAddOrModifyDB(FormCollection fc)
        {
            int  tempInt                = 0;
            int  DrogueRunID            = 0;
            int  SubsectorTVItemID      = 0;
            int  DrogueNumber           = 0;
            int  TakeValueEveryXMinutes = 0;
            int  TakeValueEveryXSeconds = 0;
            bool IsRisingTide           = true;

            DrogueTypeEnum DrogueType       = DrogueTypeEnum.Error;
            DateTime       RunStartDateTime = DateTime.Now;
            string         DroguePoints     = "";

            ContactOK contactOK = IsContactOK();

            if (!string.IsNullOrWhiteSpace(contactOK.Error))
            {
                return(ReturnError(contactOK.Error));
            }


            int.TryParse(fc["DrogueRunID"], out DrogueRunID);
            // could be 0 if 0 then we need to add the new DrogueRun

            DrogueRunModel drogueRunModelToChange = new DrogueRunModel();

            if (DrogueRunID != 0)
            {
                drogueRunModelToChange = GetDrogueRunModelWithDrogueRunIDDB(DrogueRunID);
                if (!string.IsNullOrWhiteSpace(drogueRunModelToChange.Error))
                {
                    return(drogueRunModelToChange);
                }
            }

            int.TryParse(fc["SubsectorTVItemID"], out SubsectorTVItemID);
            if (SubsectorTVItemID == 0)
            {
                return(ReturnError(string.Format(ServiceRes._IsRequired, ServiceRes.SubsectorTVItemID)));
            }

            int.TryParse(fc["TakeValueEveryXMinutes"], out TakeValueEveryXMinutes);

            TakeValueEveryXSeconds = TakeValueEveryXMinutes * 60;

            int.TryParse(fc["DrogueNumber"], out DrogueNumber);
            if (DrogueNumber == 0)
            {
                return(ReturnError(string.Format(ServiceRes._IsRequired, ServiceRes.DrogueNumber)));
            }

            if (string.IsNullOrWhiteSpace(fc["DrogueType"]))
            {
                return(ReturnError(string.Format(ServiceRes._IsRequired, ServiceRes.DrogueType)));
            }
            else
            {
                int.TryParse(fc["DrogueType"], out tempInt);
                DrogueType = (DrogueTypeEnum)tempInt;
            }

            if (string.IsNullOrWhiteSpace(fc["IsRisingTide"]))
            {
                IsRisingTide = false;
            }

            DroguePoints = fc["DroguePoints"];

            DrogueRunModel drogueRunModelRet = new DrogueRunModel();

            using (TransactionScope ts = new TransactionScope())
            {
                if (DrogueRunID == 0)
                {
                    DrogueRunModel drogueRunModelNew = new DrogueRunModel()
                    {
                        DBCommand         = DBCommandEnum.Original,
                        DrogueNumber      = DrogueNumber,
                        DrogueType        = DrogueType,
                        RunStartDateTime  = RunStartDateTime,
                        SubsectorTVItemID = SubsectorTVItemID,
                        IsRisingTide      = IsRisingTide,
                    };

                    drogueRunModelRet = PostAddDrogueRunDB(drogueRunModelNew);
                }
                else
                {
                    drogueRunModelToChange.DrogueNumber     = DrogueNumber;
                    drogueRunModelToChange.DrogueType       = DrogueType;
                    drogueRunModelToChange.RunStartDateTime = RunStartDateTime;
                    drogueRunModelToChange.IsRisingTide     = IsRisingTide;

                    drogueRunModelRet = PostUpdateDrogueRunDB(drogueRunModelToChange);
                }

                //    ts.Complete();
                //}

                if (string.IsNullOrWhiteSpace(drogueRunModelRet.Error))
                {
                    int Ordinal = 0;
                    List <DrogueRunPositionModel> drogueRunPositionModelList = new List <DrogueRunPositionModel>();
                    List <string> lineList = DroguePoints.Split("\r\n".ToCharArray(), StringSplitOptions.None).ToList();

                    DateTime OldStepDate = new DateTime();
                    foreach (string s in lineList)
                    {
                        if (s.Trim().Length == 0)
                        {
                            continue;
                        }

                        List <string> lineValList = s.Split(" ".ToCharArray(), StringSplitOptions.None).ToList();
                        if (lineValList.Count != 4)
                        {
                            return(ReturnError(ServiceRes.DroguePointsNotWellFormed));
                        }

                        if (!float.TryParse(lineValList[0], out float Lat))
                        {
                            return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Lat)));
                        }

                        if (!float.TryParse(lineValList[1], out float Lng))
                        {
                            return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Lng)));
                        }

                        if (!int.TryParse(lineValList[2].Substring(0, 4), out int Year))
                        {
                            return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Year)));
                        }

                        string MonthText = lineValList[2].Substring(5, 2);
                        if (MonthText.StartsWith("0"))
                        {
                            MonthText = MonthText.Substring(1);
                        }
                        if (!int.TryParse(MonthText, out int Month))
                        {
                            return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Month)));
                        }

                        string DayText = lineValList[2].Substring(8, 2);
                        if (DayText.StartsWith("0"))
                        {
                            DayText = DayText.Substring(1);
                        }
                        if (!int.TryParse(DayText, out int Day))
                        {
                            return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Day)));
                        }

                        string HourText = lineValList[3].Substring(0, 2);
                        if (HourText.StartsWith("0"))
                        {
                            HourText = HourText.Substring(1);
                        }
                        if (!int.TryParse(HourText, out int Hour))
                        {
                            return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Hour)));
                        }

                        string MinuteText = lineValList[3].Substring(3, 2);
                        if (MinuteText.StartsWith("0"))
                        {
                            MinuteText = MinuteText.Substring(1);
                        }
                        if (!int.TryParse(MinuteText, out int Minute))
                        {
                            return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Minute)));
                        }

                        if (!int.TryParse(lineValList[3].Substring(6, 2), out int Second))
                        {
                            return(ReturnError(string.Format(ServiceRes.CouldNotParse_, ServiceRes.Second)));
                        }

                        DateTime StepDate = new DateTime(Year, Month, Day, Hour, Minute, Second);

                        if (StepDate <= OldStepDate)
                        {
                            return(ReturnError(string.Format(ServiceRes.DatesAreNotAllInChronologicalOrder_And_, StepDate, OldStepDate)));
                        }

                        TimeSpan timeSpan = new TimeSpan(StepDate.Ticks - OldStepDate.Ticks);

                        if (timeSpan.TotalSeconds > TakeValueEveryXSeconds || TakeValueEveryXMinutes == 0)
                        {
                            DrogueRunPositionModel drogueRunPositionModel = new DrogueRunPositionModel()
                            {
                                DBCommand               = DBCommandEnum.Original,
                                StepLat                 = Lat,
                                StepLng                 = Lng,
                                StepDateTime_Local      = StepDate,
                                Ordinal                 = Ordinal,
                                DrogueRunID             = drogueRunModelRet.DrogueRunID,
                                CalculatedSpeed_m_s     = 0.0f,
                                CalculatedDirection_deg = 0.0f,
                            };

                            drogueRunPositionModelList.Add(drogueRunPositionModel);

                            Ordinal += 1;

                            OldStepDate = StepDate;
                        }
                    }

                    for (int i = 0, count = drogueRunPositionModelList.Count - 1; i < count; i++)
                    {
                        double   dist     = _MapInfoService.CalculateDistance((double)drogueRunPositionModelList[i].StepLat * d2r, (double)drogueRunPositionModelList[i].StepLng * d2r, (double)drogueRunPositionModelList[i + 1].StepLat * d2r, (double)drogueRunPositionModelList[i + 1].StepLng * d2r, base.R);
                        TimeSpan timeSpan = new TimeSpan(drogueRunPositionModelList[i + 1].StepDateTime_Local.Ticks - drogueRunPositionModelList[i].StepDateTime_Local.Ticks);
                        float    Speed    = Math.Abs((float)(dist / timeSpan.TotalSeconds));
                        drogueRunPositionModelList[i].CalculatedSpeed_m_s = Speed;

                        double StepLat = drogueRunPositionModelList[i + 1].StepLat - drogueRunPositionModelList[i].StepLat;
                        double StepLng = drogueRunPositionModelList[i + 1].StepLng - drogueRunPositionModelList[i].StepLng;

                        double angle = Math.Atan2(StepLat, StepLng) * 180 / Math.PI;

                        if (StepLat >= 0.0D && StepLng >= 0.0D)
                        {
                            angle = 90 - angle;
                        }
                        else if (StepLat <= 0.0D && StepLng >= 0.0D)
                        {
                            angle = 90 + Math.Abs(angle);
                        }
                        else if (StepLat <= 0.0D && StepLng <= 0.0D)
                        {
                            angle = 90 + Math.Abs(angle);
                        }
                        else if (StepLat >= 0.0D && StepLng <= 0.0D)
                        {
                            angle = 360 - Math.Abs(angle) + 90;
                        }
                        else
                        {
                            angle = 0.0f;
                        }

                        if (drogueRunPositionModelList[i].StepLat == drogueRunPositionModelList[i + 1].StepLat && drogueRunPositionModelList[i].StepLng == drogueRunPositionModelList[i + 1].StepLng)
                        {
                            Speed = 0.0f;
                            angle = 0.0f;
                        }

                        drogueRunPositionModelList[i].CalculatedDirection_deg = (float)angle;
                    }

                    if (drogueRunPositionModelList.Count > 1)
                    {
                        drogueRunPositionModelList[drogueRunPositionModelList.Count - 1].CalculatedSpeed_m_s     = drogueRunPositionModelList[drogueRunPositionModelList.Count - 2].CalculatedSpeed_m_s;
                        drogueRunPositionModelList[drogueRunPositionModelList.Count - 1].CalculatedDirection_deg = drogueRunPositionModelList[drogueRunPositionModelList.Count - 2].CalculatedDirection_deg;
                    }

                    List <DrogueRunPositionModel> drogueRunPositionModelListInDB = _DrogueRunPositionService.GetDrogueRunPositionModelListWithDrogueRunIDDB(drogueRunModelRet.DrogueRunID).OrderBy(c => c.Ordinal).ToList();

                    if (drogueRunPositionModelList.Count == drogueRunPositionModelListInDB.Count)
                    {
                        for (int i = 0, count = drogueRunPositionModelList.Count; i < count; i++)
                        {
                            drogueRunPositionModelList[i].DrogueRunPositionID = drogueRunPositionModelListInDB[i].DrogueRunPositionID;
                            DrogueRunPositionModel drogueRunPositionModel = _DrogueRunPositionService.PostUpdateDrogueRunPositionDB(drogueRunPositionModelList[i]);
                            if (!string.IsNullOrWhiteSpace(drogueRunPositionModel.Error))
                            {
                                return(ReturnError(drogueRunPositionModel.Error));
                            }
                        }
                    }
                    else if (drogueRunPositionModelList.Count > drogueRunPositionModelListInDB.Count)
                    {
                        for (int i = 0, count = drogueRunPositionModelListInDB.Count; i < count; i++)
                        {
                            drogueRunPositionModelList[i].DrogueRunPositionID = drogueRunPositionModelListInDB[i].DrogueRunPositionID;
                            DrogueRunPositionModel drogueRunPositionModel = _DrogueRunPositionService.PostUpdateDrogueRunPositionDB(drogueRunPositionModelList[i]);
                            if (!string.IsNullOrWhiteSpace(drogueRunPositionModel.Error))
                            {
                                return(ReturnError(drogueRunPositionModel.Error));
                            }
                        }
                        for (int i = drogueRunPositionModelListInDB.Count, count = drogueRunPositionModelList.Count; i < count; i++)
                        {
                            DrogueRunPositionModel drogueRunPositionModel = _DrogueRunPositionService.PostAddDrogueRunPositionDB(drogueRunPositionModelList[i]);
                            if (!string.IsNullOrWhiteSpace(drogueRunPositionModel.Error))
                            {
                                return(ReturnError(drogueRunPositionModel.Error));
                            }
                        }
                    }
                    else
                    {
                        for (int i = 0, count = drogueRunPositionModelList.Count; i < count; i++)
                        {
                            drogueRunPositionModelList[i].DrogueRunPositionID = drogueRunPositionModelListInDB[i].DrogueRunPositionID;
                            DrogueRunPositionModel drogueRunPositionModel = _DrogueRunPositionService.PostUpdateDrogueRunPositionDB(drogueRunPositionModelList[i]);
                            if (!string.IsNullOrWhiteSpace(drogueRunPositionModel.Error))
                            {
                                return(ReturnError(drogueRunPositionModel.Error));
                            }
                        }
                        for (int i = drogueRunPositionModelList.Count, count = drogueRunPositionModelListInDB.Count; i < count; i++)
                        {
                            DrogueRunPositionModel drogueRunPositionModel = _DrogueRunPositionService.PostDeleteDrogueRunPositionDB(drogueRunPositionModelListInDB[i].DrogueRunPositionID);
                            if (!string.IsNullOrWhiteSpace(drogueRunPositionModel.Error))
                            {
                                return(ReturnError(drogueRunPositionModel.Error));
                            }
                        }
                    }

                    if (drogueRunPositionModelList.Count > 0)
                    {
                        drogueRunModelRet.RunStartDateTime = drogueRunPositionModelList[0].StepDateTime_Local;

                        drogueRunModelRet = PostUpdateDrogueRunDB(drogueRunModelRet);
                    }

                    ts.Complete();
                }
            }

            return(drogueRunModelRet);
        }