public void doEnableDisableSegment(string segment_id, E_PORT_STATUS port_status, string laneCutType)
        {
            ASEGMENT segment = null;

            try
            {
                List <APORTSTATION> port_stations = PortStationBLL.OperateCatch.loadAllPortBySegmentID(segment_id, SectionBLL);

                using (TransactionScope tx = SCUtility.getTransactionScope())
                {
                    using (DBConnection_EF con = DBConnection_EF.GetUContext())
                    {
                        switch (port_status)
                        {
                        case E_PORT_STATUS.InService:
                            segment = RouteGuide.OpenSegment(segment_id);
                            break;

                        case E_PORT_STATUS.OutOfService:
                            segment = RouteGuide.CloseSegment(segment_id);
                            break;
                        }
                        foreach (APORTSTATION port_station in port_stations)
                        {
                            PortStationBLL.OperateDB.updatePortStationStatus(port_station.PORT_ID, port_status);
                            PortStationBLL.OperateCatch.updatePortStationStatus(port_station.PORT_ID, port_status);
                        }
                        tx.Complete();
                    }
                }
                List <AMCSREPORTQUEUE> reportqueues = new List <AMCSREPORTQUEUE>();
                List <ASECTION>        sections     = SectionBLL.cache.loadSectionsBySegmentID(segment_id);
                string segment_start_adr            = sections.First().FROM_ADR_ID;
                string segment_end_adr = sections.Last().TO_ADR_ID;
                switch (port_status)
                {
                case E_PORT_STATUS.InService:
                    ReportBLL.newReportLaneInService(segment_start_adr, segment_end_adr, laneCutType, reportqueues);
                    break;

                case E_PORT_STATUS.OutOfService:
                    ReportBLL.newReportLaneOutOfService(segment_start_adr, segment_end_adr, laneCutType, reportqueues);
                    break;
                }
                foreach (APORTSTATION port_station in port_stations)
                {
                    switch (port_status)
                    {
                    case E_PORT_STATUS.InService:
                        ReportBLL.newReportPortInServeice(port_station.PORT_ID, reportqueues);
                        break;

                    case E_PORT_STATUS.OutOfService:
                        ReportBLL.newReportPortOutOfService(port_station.PORT_ID, reportqueues);
                        break;
                    }
                }
                ReportBLL.newSendMCSMessage(reportqueues);
            }
            catch (Exception ex)
            {
                segment = null;
                logger.Error(ex, "Exception:");
            }
            //return segment;
        }