// Post
        public PolSourceSiteModel PolSourceSiteAddOrModifyDB(FormCollection fc)
        {
            int    tempInt               = 0;
            int    ParentTVItemID        = 0;
            int    PolSourceSiteTVItemID = 0;
            bool   IsActive              = false;
            bool   IsPointSource         = false;
            double Lat = 0.0D;
            double Lng = 0.0D;

            ContactOK contactOK = IsContactOK();

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

            if (string.IsNullOrWhiteSpace(fc["ParentTVItemID"]))
            {
                return(ReturnError(string.Format(ServiceRes._IsRequired, ServiceRes.ParentTVItemID)));
            }

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

            if (string.IsNullOrWhiteSpace(fc["PolSourceSiteTVItemID"]))
            {
                return(ReturnError(string.Format(ServiceRes._IsRequired, ServiceRes.PolSourceSiteTVItemID)));
            }

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

            // PolSourceSiteTVItemID == 0 ==> Add
            // PolSourceSiteTVItemID > 0 ==> Modify

            TVItemModel tvItemModelPolSource = null;

            if (PolSourceSiteTVItemID != 0)
            {
                tvItemModelPolSource = _TVItemService.GetTVItemModelWithTVItemIDDB(PolSourceSiteTVItemID);
                if (!string.IsNullOrWhiteSpace(tvItemModelPolSource.Error))
                {
                    return(ReturnError(tvItemModelPolSource.Error));
                }
            }

            PolSourceSiteModel polSourceSiteNewOrToChange = new PolSourceSiteModel();

            if (PolSourceSiteTVItemID != 0)
            {
                polSourceSiteNewOrToChange = GetPolSourceSiteModelWithPolSourceSiteTVItemIDDB(PolSourceSiteTVItemID);
                if (!string.IsNullOrWhiteSpace(polSourceSiteNewOrToChange.Error))
                {
                    return(ReturnError(polSourceSiteNewOrToChange.Error));
                }
            }

            polSourceSiteNewOrToChange.DBCommand = DBCommandEnum.Original;

            if (string.IsNullOrWhiteSpace(fc["IsActive"]))
            {
                IsActive = false;
            }
            else
            {
                IsActive = true;
            }

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

                polSourceSiteNewOrToChange.InactiveReason = (PolSourceInactiveReasonEnum)tempInt;
            }
            else
            {
                polSourceSiteNewOrToChange.InactiveReason = null;
            }

            if (string.IsNullOrWhiteSpace(fc["IsPointSource"]))
            {
                IsPointSource = false;
            }
            else
            {
                IsPointSource = true;
            }

            polSourceSiteNewOrToChange.IsPointSource = IsPointSource;

            double.TryParse(fc["Lat"], out Lat);
            if (Lat == 0.0D)
            {
                return(ReturnError(string.Format(ServiceRes._IsRequired, ServiceRes.Lat)));
            }

            double.TryParse(fc["Lng"], out Lng);
            if (Lng == 0.0D)
            {
                return(ReturnError(string.Format(ServiceRes._IsRequired, ServiceRes.Lng)));
            }

            List <Coord> coordList = new List <Coord>()
            {
                new Coord()
                {
                    Lat = (float)Lat, Lng = (float)Lng, Ordinal = 0
                }
            };

            using (TransactionScope ts = new TransactionScope())
            {
                string     ObservationInfo           = ((int)PolSourceObsInfoEnum.SourceStart).ToString() + ",";
                List <int> obsIntList                = ObservationInfo.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();
                string     ObservationLanguageTVText = ServiceRes.Error;
                string     TVText         = _BaseEnumService.GetEnumText_PolSourceObsInfoTextEnum(PolSourceObsInfoEnum.Error);
                int        NextSiteNumber = 0;

                if (PolSourceSiteTVItemID == 0)
                {
                    NextSiteNumber = GetNextAvailableSiteNumberWithParentTVItemIDDB(ParentTVItemID);

                    polSourceSiteNewOrToChange.Site = NextSiteNumber;

                    TVText = TVText + " - " + "000000".Substring(0, "000000".Length - NextSiteNumber.ToString().Length) + NextSiteNumber.ToString();

                    TVItemModel tvItemModelNewPolSourceSite = _TVItemService.PostAddChildTVItemDB(ParentTVItemID, TVText, TVTypeEnum.PolSourceSite);
                    if (!string.IsNullOrWhiteSpace(tvItemModelNewPolSourceSite.Error))
                    {
                        return(ReturnError(tvItemModelNewPolSourceSite.Error));
                    }

                    polSourceSiteNewOrToChange.PolSourceSiteTVItemID = tvItemModelNewPolSourceSite.TVItemID;
                    polSourceSiteNewOrToChange.PolSourceSiteTVText   = TVText;

                    polSourceSiteNewOrToChange = PostAddPolSourceSiteDB(polSourceSiteNewOrToChange);
                    if (!string.IsNullOrWhiteSpace(polSourceSiteNewOrToChange.Error))
                    {
                        return(ReturnError(polSourceSiteNewOrToChange.Error));
                    }

                    // Automatically add one Pollution Source Observation for today
                    PolSourceObservationModel polSourceObservationModelNew = new PolSourceObservationModel()
                    {
                        DBCommand               = DBCommandEnum.Original,
                        PolSourceSiteID         = polSourceSiteNewOrToChange.PolSourceSiteID,
                        ObservationDate_Local   = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day),
                        ContactTVItemID         = contactOK.ContactTVItemID,
                        Observation_ToBeDeleted = "",
                    };

                    PolSourceObservationModel polSourceObservationModelRet = _PolSourceObservationService.PostAddPolSourceObservationDB(polSourceObservationModelNew);
                    if (!string.IsNullOrWhiteSpace(polSourceObservationModelRet.Error))
                    {
                        return(ReturnError(polSourceObservationModelRet.Error));
                    }

                    // Automatically add one Pollution Source Observation Issue
                    PolSourceObservationIssueModel polSourceObservationIssueModelNew = new PolSourceObservationIssueModel();
                    polSourceObservationIssueModelNew.DBCommand = DBCommandEnum.Original;
                    polSourceObservationIssueModelNew.PolSourceObservationID = polSourceObservationModelRet.PolSourceObservationID;
                    polSourceObservationIssueModelNew.ObservationInfo        = ObservationInfo;
                    polSourceObservationIssueModelNew.Ordinal = 0;

                    PolSourceObservationIssueModel polSourceObservationIssueModelRet = _PolSourceObservationService._PolSourceObservationIssueService.PostAddPolSourceObservationIssueDB(polSourceObservationIssueModelNew);
                    if (!string.IsNullOrWhiteSpace(polSourceObservationIssueModelRet.Error))
                    {
                        return(ReturnError(polSourceObservationIssueModelRet.Error));
                    }

                    // doing the other language
                    foreach (LanguageEnum lang in LanguageListAllowable.Where(c => c != LanguageRequest))
                    {
                        TVItemService tvItemService = new TVItemService(lang, _TVItemService.User);
                        Thread.CurrentThread.CurrentCulture   = new CultureInfo(lang + "-CA");
                        Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang + "-CA");

                        ObservationInfo           = ((int)PolSourceObsInfoEnum.SourceStart).ToString() + ",";
                        ObservationLanguageTVText = ServiceRes.Error;
                        TVText = _BaseEnumService.GetEnumText_PolSourceObsInfoTextEnum(PolSourceObsInfoEnum.Error);

                        TVText = (string.IsNullOrWhiteSpace(TVText) ? ServiceRes.Error : TVText);

                        if (PolSourceSiteTVItemID == 0)
                        {
                            TVText = TVText + " - " + "000000".Substring(0, "000000".Length - NextSiteNumber.ToString().Length) + NextSiteNumber.ToString();
                        }
                        else
                        {
                            TVText = TVText + " - " + "000000".Substring(0, "000000".Length - polSourceSiteNewOrToChange.Site.ToString().Length) + polSourceSiteNewOrToChange.Site.ToString();
                        }

                        TVItemLanguageModel tvItemLanguageModel = new TVItemLanguageModel();
                        tvItemLanguageModel.DBCommand = DBCommandEnum.Original;
                        tvItemLanguageModel.Language  = lang;
                        tvItemLanguageModel.TVText    = TVText;
                        tvItemLanguageModel.TVItemID  = polSourceSiteNewOrToChange.PolSourceSiteTVItemID;

                        TVItemLanguageModel tvItemLanguageModelRet = tvItemService._TVItemLanguageService.PostUpdateTVItemLanguageDB(tvItemLanguageModel);
                        if (!string.IsNullOrWhiteSpace(tvItemLanguageModelRet.Error))
                        {
                            return(ReturnError(tvItemLanguageModelRet.Error));
                        }

                        Thread.CurrentThread.CurrentCulture   = new CultureInfo(LanguageRequest + "-CA");
                        Thread.CurrentThread.CurrentUICulture = new CultureInfo(LanguageRequest + "-CA");
                    }
                }
                else
                {
                    polSourceSiteNewOrToChange = PostUpdatePolSourceSiteDB(polSourceSiteNewOrToChange);
                    if (!string.IsNullOrWhiteSpace(polSourceSiteNewOrToChange.Error))
                    {
                        return(ReturnError(polSourceSiteNewOrToChange.Error));
                    }
                }

                // Adding map info
                List <MapInfoPointModel> mapInfoPointModelList = _MapInfoService._MapInfoPointService.GetMapInfoPointModelListWithTVItemIDAndTVTypeAndMapInfoDrawTypeDB(polSourceSiteNewOrToChange.PolSourceSiteTVItemID, TVTypeEnum.PolSourceSite, MapInfoDrawTypeEnum.Point);
                if (mapInfoPointModelList.Count == 0)
                {
                    MapInfoModel mapInfoModelRet = _MapInfoService.CreateMapInfoObjectDB(coordList, MapInfoDrawTypeEnum.Point, TVTypeEnum.PolSourceSite, polSourceSiteNewOrToChange.PolSourceSiteTVItemID);
                    if (!string.IsNullOrWhiteSpace(mapInfoModelRet.Error))
                    {
                        return(ReturnError(mapInfoModelRet.Error));
                    }
                }
                else
                {
                    mapInfoPointModelList[0].Lat = coordList[0].Lat;
                    mapInfoPointModelList[0].Lng = coordList[0].Lng;

                    MapInfoPointModel mapInfoPointModelRet = _MapInfoService._MapInfoPointService.PostUpdateMapInfoPointDB(mapInfoPointModelList[0]);
                    if (!string.IsNullOrWhiteSpace(mapInfoPointModelRet.Error))
                    {
                        return(ReturnError(mapInfoPointModelRet.Error));
                    }
                }

                TVItemModel tvItemModelPolSourceSite = _TVItemService.GetTVItemModelWithTVItemIDDB(polSourceSiteNewOrToChange.PolSourceSiteTVItemID);
                if (!string.IsNullOrWhiteSpace(tvItemModelPolSourceSite.Error))
                {
                    return(ReturnError(tvItemModelPolSourceSite.Error));
                }

                tvItemModelPolSourceSite.IsActive = IsActive;

                TVItemModel tvItemModelRet = _TVItemService.PostUpdateTVItemDB(tvItemModelPolSourceSite);
                if (!string.IsNullOrWhiteSpace(tvItemModelRet.Error))
                {
                    return(ReturnError(tvItemModelRet.Error));
                }

                ts.Complete();
            }
            return(polSourceSiteNewOrToChange);
        }
        // Post
        public PolSourceObservationModel PolSourceObservationAddOrModifyDB(FormCollection fc)
        {
            int  PolSourceSiteID        = 0;
            int  PolSourceSiteTVItemID  = 0;
            int  PolSourceObservationID = 0;
            int  Year            = 0;
            int  Month           = 0;
            int  Day             = 0;
            bool DesktopReviewed = false;

            DateTime ObsDate = new DateTime(1900, 1, 1);

            ContactOK contactOK = IsContactOK();

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

            if (string.IsNullOrWhiteSpace(fc["PolSourceSiteTVItemID"]))
            {
                return(ReturnError(string.Format(ServiceRes._IsRequired, ServiceRes.PolSourceSiteTVItemID)));
            }

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

            TVItemModel tvItemModelPolSourcSite = _TVItemService.GetTVItemModelWithTVItemIDDB(PolSourceSiteTVItemID);

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

            if (string.IsNullOrWhiteSpace(fc["PolSourceSiteID"]))
            {
                return(ReturnError(string.Format(ServiceRes._IsRequired, ServiceRes.PolSourceSiteID)));
            }

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

            if (string.IsNullOrWhiteSpace(fc["PolSourceObservationID"]))
            {
                return(ReturnError(string.Format(ServiceRes._IsRequired, ServiceRes.PolSourceObservationID)));
            }

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

            // PolSourceObservationID == 0 ==> Add
            // PolSourceObservationID > 0 ==> Modify

            PolSourceObservationModel polSourceObservationModelToAddOrChange = new PolSourceObservationModel();

            if (PolSourceObservationID > 0)
            {
                polSourceObservationModelToAddOrChange = GetPolSourceObservationModelWithPolSourceObservationIDDB(PolSourceObservationID);
                if (!string.IsNullOrWhiteSpace(polSourceObservationModelToAddOrChange.Error))
                {
                    return(ReturnError(polSourceObservationModelToAddOrChange.Error));
                }
            }

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

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

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

            ObsDate = new DateTime(Year, Month, Day);

            if (fc["DesktopReviewed"] != null)
            {
                DesktopReviewed = true;
            }

            //PolSourceObservationModel polSourceObservationModelRet = new PolSourceObservationModel();
            using (TransactionScope ts = new TransactionScope())
            {
                PolSourceObservationModel polSourceObservationModelNew = new PolSourceObservationModel()
                {
                    DBCommand               = DBCommandEnum.Original,
                    PolSourceSiteID         = PolSourceSiteID,
                    ObservationDate_Local   = ObsDate,
                    ContactTVItemID         = contactOK.ContactTVItemID,
                    DesktopReviewed         = DesktopReviewed,
                    Observation_ToBeDeleted = "",
                };

                if (PolSourceObservationID == 0) // new
                {
                    polSourceObservationModelToAddOrChange = PostAddPolSourceObservationDB(polSourceObservationModelNew);
                    if (!string.IsNullOrWhiteSpace(polSourceObservationModelToAddOrChange.Error))
                    {
                        return(ReturnError(polSourceObservationModelToAddOrChange.Error));
                    }

                    string     ObservationInfo = ((int)PolSourceObsInfoEnum.SourceStart).ToString() + ",";
                    List <int> obsIntList      = ObservationInfo.Split(",".ToCharArray(), StringSplitOptions.RemoveEmptyEntries).Select(int.Parse).ToList();

                    PolSourceObservationIssueModel polSourceObservationIssueModelNew = new PolSourceObservationIssueModel();
                    polSourceObservationIssueModelNew.DBCommand = DBCommandEnum.Original;
                    polSourceObservationIssueModelNew.PolSourceObservationID = polSourceObservationModelToAddOrChange.PolSourceObservationID;
                    polSourceObservationIssueModelNew.ObservationInfo        = ObservationInfo;
                    polSourceObservationIssueModelNew.Ordinal = 0;

                    PolSourceObservationIssueModel polSourceObservationIssueModelRet = _PolSourceObservationIssueService.PostAddPolSourceObservationIssueDB(polSourceObservationIssueModelNew);
                    if (!string.IsNullOrWhiteSpace(polSourceObservationIssueModelRet.Error))
                    {
                        return(ReturnError(polSourceObservationIssueModelRet.Error));
                    }

                    // doing the other language
                    foreach (LanguageEnum lang in LanguageListAllowable.Where(c => c != LanguageRequest))
                    {
                        TVItemService tvItemService = new TVItemService(lang, _PolSourceObservationIssueService.User);
                        Thread.CurrentThread.CurrentCulture   = new CultureInfo(lang + "-CA");
                        Thread.CurrentThread.CurrentUICulture = new CultureInfo(lang + "-CA");

                        ObservationInfo = ((int)PolSourceObsInfoEnum.SourceStart).ToString() + ",";
                        string ObservationLanguageTVText = ServiceRes.Error;
                        string TVText = _BaseEnumService.GetEnumText_PolSourceObsInfoTextEnum(PolSourceObsInfoEnum.Error);;

                        TVText = (string.IsNullOrWhiteSpace(TVText) ? ServiceRes.Error : TVText);

                        int Site = GetSiteWithPolSourceSiteID(PolSourceSiteID);

                        TVText = TVText + " - " + "000000".Substring(0, "000000".Length - Site.ToString().Length) + Site.ToString();

                        TVItemLanguageModel tvItemLanguageModel = new TVItemLanguageModel();
                        tvItemLanguageModel.DBCommand = DBCommandEnum.Original;
                        tvItemLanguageModel.Language  = lang;
                        tvItemLanguageModel.TVText    = TVText;
                        tvItemLanguageModel.TVItemID  = PolSourceSiteID;

                        TVItemLanguageModel tvItemLanguageModelRet = tvItemService._TVItemLanguageService.PostUpdateTVItemLanguageDB(tvItemLanguageModel);
                        if (!string.IsNullOrWhiteSpace(tvItemLanguageModelRet.Error))
                        {
                            return(ReturnError(tvItemLanguageModelRet.Error));
                        }

                        Thread.CurrentThread.CurrentCulture   = new CultureInfo(LanguageRequest + "-CA");
                        Thread.CurrentThread.CurrentUICulture = new CultureInfo(LanguageRequest + "-CA");
                    }
                }
                else
                {
                    polSourceObservationModelNew.PolSourceObservationID = polSourceObservationModelToAddOrChange.PolSourceObservationID;
                    polSourceObservationModelToAddOrChange = PostUpdatePolSourceObservationDB(polSourceObservationModelNew);
                    if (!string.IsNullOrWhiteSpace(polSourceObservationModelToAddOrChange.Error))
                    {
                        return(ReturnError(polSourceObservationModelToAddOrChange.Error));
                    }
                }

                ts.Complete();
            }
            return(polSourceObservationModelToAddOrChange);
        }