/// <summary>
        /// Save all sections & works to database (direct)
        /// </summary>
        /// <param name="id">id</param>
        /// <param name="companyId">companyId</param>
        public void Save(Guid id, int companyId)
        {
            JlinerAddTDS jlinerAddChanges = (JlinerAddTDS)Data.GetChanges();

            if (jlinerAddChanges.JunctionLiner2.Rows.Count > 0)
            {
                JlinerAddJunctionLiner2Gateway jlinerAddJunctionLiner2Gateway  = new JlinerAddJunctionLiner2Gateway(jlinerAddChanges);

                foreach (JlinerAddTDS.JunctionLiner2Row row in (JlinerAddTDS.JunctionLiner2DataTable)jlinerAddChanges.JunctionLiner2)
                {
                    // Insert new laterals
                    if ((!row.Deleted) && (!row.InDatabase))
                    {
                        string detailId = ""; if (!row.IsDetailIDNull()) detailId = row.DetailID;
                        string address = ""; if (!row.IsAddressNull()) address = row.Address;
                        DateTime? pipeLocated = null; if (!row.IsPipeLocatedNull()) pipeLocated = row.PipeLocated;
                        DateTime? servicesLocated = null; if (!row.IsServicesLocatedNull()) servicesLocated = row.ServicesLocated;
                        DateTime? coInstalled = null; if (!row.IsCoInstalledNull()) coInstalled = row.CoInstalled;
                        DateTime? backfilledConcrete = null; if (!row.IsBackfilledConcreteNull()) backfilledConcrete = row.BackfilledConcrete;
                        DateTime? backfilledSoil = null; if (!row.IsBackfilledSoilNull()) backfilledSoil = row.BackfilledSoil;
                        DateTime? grouted = null; if (!row.IsGroutedNull()) grouted = row.Grouted;
                        DateTime? cored = null; if (!row.IsCoredNull()) cored = row.Cored;
                        DateTime? prepped = null; if (!row.IsPreppedNull()) prepped = row.Prepped;
                        DateTime? measured = null; if (!row.IsMeasuredNull()) measured = row.Measured;
                        string linerSize = ""; if (!row.IsLinerSizeNull()) linerSize = row.LinerSize;
                        DateTime? inProcess = null; if (!row.IsInProcessNull()) inProcess = row.InProcess;
                        DateTime? inStock = null; if (!row.IsInStockNull()) inStock = row.InStock;
                        DateTime? delivered = null; if (!row.IsDeliveredNull()) delivered = row.Delivered;
                        int? buildRebuild = null; if (!row.IsBuildRebuildNull()) buildRebuild = row.BuildRebuild;
                        DateTime? preVideo = null; if (!row.IsPreVideoNull()) preVideo = row.PreVideo;
                        DateTime? linerInstalled = null; if (!row.IsLinerInstalledNull()) linerInstalled = row.LinerInstalled;
                        DateTime? finalVideo = null; if (!row.IsFinalVideoNull()) finalVideo = row.FinalVideo;
                        double? distanceFromUSMH = null; if (!row.IsDistanceFromUSMHNull()) distanceFromUSMH = row.DistanceFromUSMH;
                        double? distanceFromDSMH = null; if (!row.IsDistanceFromDSMHNull()) distanceFromDSMH = row.DistanceFromDSMH;
                        string map = ""; if (!row.IsMapNull()) map = row.Map;
                        string issue = row.Issue;
                        decimal? cost = null; if (!row.IsCostNull()) cost = row.Cost;
                        bool deleted = row.Deleted;
                        DateTime? videoInspections = null; if (!row.IsVideoInspectionNull()) videoInspections = row.VideoInspection;
                        bool coRequired = row.CoRequired;
                        bool pitRequired = row.PitRequired;
                        string coPitLocation = ""; if (!row.IsCoPitLocationNull()) coPitLocation = row.CoPitLocation;
                        bool postContractDigRequired = row.PostContractDigRequired;
                        string comments = ""; if (!row.IsCommentsNull()) comments = row.Comments;
                        string history = ""; if (!row.IsHistoryNull()) history = row.History;
                        DateTime? coCutDown = null; if (!row.IsCoCutDownNull()) coCutDown = row.CoCutDown;
                        DateTime? finalRestoration = null; if (!row.IsFinalRestorationNull()) finalRestoration = row.FinalRestoration;
                        string clientLateralID = ""; if (!row.IsClientLateralIDNull()) clientLateralID = row.ClientLateralID;
                        string videoLengthToPropertyLine = ""; if  (!row.IsVideoLengthToPropertyLineNull()) videoLengthToPropertyLine = row.VideoLengthToPropertyLine;
                        bool liningThruCo = row.LiningThruCo;
                        string hamiltonInspectionNumber = ""; if (!row.IsHamiltonInspectionNumberNull()) hamiltonInspectionNumber = row.HamiltonInspectionNumber;
                        DateTime? noticeDelivered = null; if (!row.IsNoticeDeliveredNull()) noticeDelivered = row.NoticeDelivered;

                        Jliner jliner = new Jliner(null);
                        jliner.InsertDirect(row.ID, row.RefID, row.COMPANY_ID, detailId, address, pipeLocated, servicesLocated, coInstalled, backfilledConcrete, backfilledSoil, grouted, cored, prepped, measured, linerSize, inProcess, inStock, delivered, buildRebuild, preVideo, linerInstalled, finalVideo, distanceFromUSMH, distanceFromDSMH, map, issue, cost, deleted, videoInspections, coRequired, pitRequired, coPitLocation, postContractDigRequired, comments, history, coCutDown, finalRestoration, clientLateralID, videoLengthToPropertyLine, liningThruCo, hamiltonInspectionNumber, noticeDelivered);
                    }

                    // Update laterals
                    if ((!row.Deleted) && (row.InDatabase))
                    {
                        int refId = row.RefID;

                        // original values
                        string originalDetailId = jlinerAddJunctionLiner2Gateway.GetDetailIDOriginal(id, refId, companyId);
                        string originalAddress = jlinerAddJunctionLiner2Gateway.GetAddressOriginal(id, refId, companyId);
                        DateTime? originalPipeLocated = jlinerAddJunctionLiner2Gateway.GetPipeLocatedOriginal(id, refId, companyId);
                        DateTime? originalServicesLocated = jlinerAddJunctionLiner2Gateway.GetServicesLocatedOriginal(id, refId, companyId);
                        DateTime? originalCoInstalled = jlinerAddJunctionLiner2Gateway.GetCoInstalledOriginal(id, refId, companyId);
                        DateTime? originalBackfilledConcrete = jlinerAddJunctionLiner2Gateway.GetBackfilledConcreteOriginal(id, refId, companyId);
                        DateTime? originalBackfilledSoil = jlinerAddJunctionLiner2Gateway.GetBackfilledSoilOriginal (id, refId, companyId);
                        DateTime? originalGrouted = jlinerAddJunctionLiner2Gateway.GetGroutedOriginal(id, refId, companyId);
                        DateTime? originalCored = jlinerAddJunctionLiner2Gateway.GetCoredOriginal(id, refId, companyId);
                        DateTime? originalPrepped = jlinerAddJunctionLiner2Gateway.GetPreppedOriginal(id, refId, companyId);
                        DateTime? originalMeasured = jlinerAddJunctionLiner2Gateway.GetMeasuredOriginal (id, refId, companyId);
                        string originalLinerSize = jlinerAddJunctionLiner2Gateway.GetLinerSizeOriginal(id, refId, companyId);
                        DateTime? originalInProcess = jlinerAddJunctionLiner2Gateway.GetInProcessOriginal(id, refId, companyId);
                        DateTime? originalInStock = jlinerAddJunctionLiner2Gateway.GetInStockOriginal(id, refId, companyId);
                        DateTime? originalDelivered = jlinerAddJunctionLiner2Gateway.GetDeliveredOriginal(id, refId, companyId);
                        int? originalBuildRebuild = jlinerAddJunctionLiner2Gateway.GetBuildRebuildOriginal(id, refId, companyId);
                        DateTime? originalPreVideo = jlinerAddJunctionLiner2Gateway.GetPreVideoOriginal(id, refId, companyId);
                        DateTime? originalLinerInstalled = jlinerAddJunctionLiner2Gateway.GetLinerInstalledOriginal(id, refId, companyId);
                        DateTime? originalFinalVideo = jlinerAddJunctionLiner2Gateway.GetFinalVideoOriginal(id, refId, companyId);
                        double? originalDistanceFromUSMH = jlinerAddJunctionLiner2Gateway.GetDistanceFromUSMHOriginal(id, refId, companyId);
                        double? originalDistanceFromDSMH = jlinerAddJunctionLiner2Gateway.GetDistanceFromDSMHOriginal(id, refId, companyId);
                        string originalMap = jlinerAddJunctionLiner2Gateway.GetMapOriginal(id, refId, companyId);
                        string originalIssue = jlinerAddJunctionLiner2Gateway.GetIssueOriginal(id, refId, companyId);
                        decimal? originalCost = jlinerAddJunctionLiner2Gateway.GetCostOriginal(id, refId, companyId);
                        DateTime? originalVideoInspection = jlinerAddJunctionLiner2Gateway.GetVideoInspectionOriginal(id, refId, companyId);
                        bool originalCoRequired =jlinerAddJunctionLiner2Gateway.GetCoRequiredOriginal(id, refId, companyId);
                        bool originalPitRequired = jlinerAddJunctionLiner2Gateway.GetPitRequiredOriginal(id, refId, companyId);
                        string originalCoPitLocation = jlinerAddJunctionLiner2Gateway.GetCoPitLocationOriginal(id, refId, companyId);
                        bool originalPostContractDigRequired =jlinerAddJunctionLiner2Gateway.GetPostContractDigRequiredOriginal(id, refId, companyId);
                        string originalComments = jlinerAddJunctionLiner2Gateway.GetCommentsOriginal(id, refId, companyId);
                        string originalHistory = jlinerAddJunctionLiner2Gateway.GetHistoryOriginal(id, refId, companyId);
                        DateTime? originalCoCutDown = jlinerAddJunctionLiner2Gateway.GetCoCutDownOriginal(id, refId, companyId);
                        DateTime? originalFinalRestoration = jlinerAddJunctionLiner2Gateway.GetFinalRestorationOriginal(id, refId, companyId);
                        string originalClientLateralID = jlinerAddJunctionLiner2Gateway.GetClientLateralIDOriginal(id, refId, companyId);
                        string originalVideoLengthToPropertyLine = jlinerAddJunctionLiner2Gateway.GetVideoLengthToPropertyLineOriginal(id, refId, companyId);
                        bool originalLiningThruCo = jlinerAddJunctionLiner2Gateway.GetLiningThruCoOriginal(id, refId, companyId);
                        string originalHamiltonInspectionNumber = jlinerAddJunctionLiner2Gateway.GetHamiltonInspectionNumberOriginal(id, refId, companyId);
                        DateTime? originalNoticeDelivered = jlinerAddJunctionLiner2Gateway.GetNoticeDeliveredOriginal(id, refId, companyId);

                        // new values
                        string newDetailId = jlinerAddJunctionLiner2Gateway.GetDetailID(id, refId, companyId);
                        string newAddress = jlinerAddJunctionLiner2Gateway.GetAddress(id, refId, companyId);
                        DateTime? newPipeLocated = jlinerAddJunctionLiner2Gateway.GetPipeLocated(id, refId, companyId);
                        DateTime? newServicesLocated = jlinerAddJunctionLiner2Gateway.GetServicesLocated(id, refId, companyId);
                        DateTime? newCoInstalled = jlinerAddJunctionLiner2Gateway.GetCoInstalled(id, refId, companyId);
                        DateTime? newBackfilledConcrete = jlinerAddJunctionLiner2Gateway.GetBackfilledConcrete(id, refId, companyId);
                        DateTime? newBackfilledSoil = jlinerAddJunctionLiner2Gateway.GetBackfilledSoil(id, refId, companyId);
                        DateTime? newGrouted = jlinerAddJunctionLiner2Gateway.GetGrouted(id, refId, companyId);
                        DateTime? newCored = jlinerAddJunctionLiner2Gateway.GetCored(id, refId, companyId);
                        DateTime? newPrepped = jlinerAddJunctionLiner2Gateway.GetPrepped(id, refId, companyId);
                        DateTime? newMeasured = jlinerAddJunctionLiner2Gateway.GetMeasured(id, refId, companyId);
                        string newLinerSize = jlinerAddJunctionLiner2Gateway.GetLinerSize(id, refId, companyId);
                        DateTime? newInProcess = jlinerAddJunctionLiner2Gateway.GetInProcess(id, refId, companyId);
                        DateTime? newInStock = jlinerAddJunctionLiner2Gateway.GetInStock(id, refId, companyId);
                        DateTime? newDelivered = jlinerAddJunctionLiner2Gateway.GetDelivered(id, refId, companyId);
                        int? newBuildRebuild = jlinerAddJunctionLiner2Gateway.GetBuildRebuild(id, refId, companyId);
                        DateTime? newPreVideo = jlinerAddJunctionLiner2Gateway.GetPreVideo(id, refId, companyId);
                        DateTime? newLinerInstalled = jlinerAddJunctionLiner2Gateway.GetLinerInstalled(id, refId, companyId);
                        DateTime? newFinalVideo = jlinerAddJunctionLiner2Gateway.GetFinalVideo(id, refId, companyId);
                        double? newDistanceFromUSMH = jlinerAddJunctionLiner2Gateway.GetDistanceFromUSMH(id, refId, companyId);
                        double? newDistanceFromDSMH = jlinerAddJunctionLiner2Gateway.GetDistanceFromDSMH(id, refId, companyId);
                        string newMap = jlinerAddJunctionLiner2Gateway.GetMap(id, refId, companyId);
                        string newIssue = jlinerAddJunctionLiner2Gateway.GetIssue(id, refId, companyId);
                        decimal? newCost = jlinerAddJunctionLiner2Gateway.GetCost(id, refId, companyId);
                        DateTime? newVideoInspection = jlinerAddJunctionLiner2Gateway.GetVideoInspection(id, refId, companyId);
                        bool newCoRequired = jlinerAddJunctionLiner2Gateway.GetCoRequired(id, refId, companyId);
                        bool newPitRequired = jlinerAddJunctionLiner2Gateway.GetPitRequired(id, refId, companyId);
                        string newCoPitLocation = jlinerAddJunctionLiner2Gateway.GetCoPitLocation(id, refId, companyId);
                        bool newPostContractDigRequired = jlinerAddJunctionLiner2Gateway.GetPostContractDigRequired(id, refId, companyId);
                        string newComments = jlinerAddJunctionLiner2Gateway.GetComments(id, refId, companyId);
                        string newHistory = jlinerAddJunctionLiner2Gateway.GetHistory(id, refId, companyId);
                        DateTime? newCoCutDown = jlinerAddJunctionLiner2Gateway.GetCoCutDown(id, refId, companyId);
                        DateTime? newFinalRestoration = jlinerAddJunctionLiner2Gateway.GetFinalRestoration(id, refId, companyId);
                        string newClientLateralID = jlinerAddJunctionLiner2Gateway.GetClientLateralID(id, refId, companyId);
                        string newVideoLengthToPropertyLine = jlinerAddJunctionLiner2Gateway.GetVideoLengthToPropertyLine(id, refId, companyId);
                        bool newLiningThruCo = jlinerAddJunctionLiner2Gateway.GetLiningThruCo(id, refId, companyId);
                        string newHamiltonInspectionNumber = jlinerAddJunctionLiner2Gateway.GetHamiltonInspectionNumber(id, refId, companyId);
                        DateTime? newNoticeDelivered = jlinerAddJunctionLiner2Gateway.GetNoticeDelivered(id, refId, companyId);

                        Jliner jliner = new Jliner(null);
                        jliner.UpdateDirect(row.ID, row.RefID, row.COMPANY_ID, originalDetailId, originalAddress, originalPipeLocated, originalServicesLocated, originalCoInstalled, originalBackfilledConcrete, originalBackfilledSoil, originalGrouted, originalCored, originalPrepped, originalMeasured, originalLinerSize, originalInProcess, originalInStock, originalDelivered, originalBuildRebuild, originalPreVideo, originalLinerInstalled, originalFinalVideo, originalDistanceFromUSMH, originalDistanceFromDSMH, originalMap, originalIssue, originalCost, false, originalVideoInspection, originalCoRequired, originalPitRequired, originalCoPitLocation, originalPostContractDigRequired, originalComments, originalHistory, originalCoCutDown, originalFinalRestoration, originalClientLateralID, originalVideoLengthToPropertyLine, originalLiningThruCo, originalHamiltonInspectionNumber, originalNoticeDelivered, row.ID, row.RefID, row.COMPANY_ID, newDetailId, newAddress, newPipeLocated, newServicesLocated, newCoInstalled, newBackfilledConcrete, newBackfilledSoil, newGrouted, newCored, newPrepped, newMeasured, newLinerSize, newInProcess, newInStock, newDelivered, newBuildRebuild, newPreVideo, newLinerInstalled, newFinalVideo, newDistanceFromUSMH, newDistanceFromDSMH, newMap, newIssue, newCost, false, newVideoInspection, newCoRequired, newPitRequired, newCoPitLocation, newPostContractDigRequired, newComments, newHistory, newCoCutDown, newFinalRestoration, newClientLateralID, newVideoLengthToPropertyLine, newLiningThruCo, newHamiltonInspectionNumber, newNoticeDelivered);
                    }
                }
            }
        }
        // ////////////////////////////////////////////////////////////////////////
        // PUBLIC METHODS
        //
        /// <summary>
        /// LoadForAdd
        /// </summary>
        /// <param name="id">id</param>
        /// <param name="companyId">companyId</param>
        public void LoadForAdd(Guid id, int companyId)
        {
            JlinerAddJunctionLiner2Gateway jlinerAddJunctionLiner2Gateway = new JlinerAddJunctionLiner2Gateway(Data);
            jlinerAddJunctionLiner2Gateway.LoadAllById(id, companyId);

            foreach (JlinerAddTDS.JunctionLiner2Row lfsJunctionLiner2Row in (JlinerAddTDS.JunctionLiner2DataTable)Table)
            {
                lfsJunctionLiner2Row.History = "---Loaded---";
            }

            Table.AcceptChanges();
        }