/// <summary>Get schedule record including identifiers and segments in displayable and updatable arrays</summary> /// <summary>Action log event inserted, exceptions logged</summary> /// <cardinality>One</cardinality> public FlightContract GetFlight( Guid flightId, Guid userId ) { Logging.ActionLog("SolutionNorSolutionPort.BusinessLogicLayer.FlightService.GetFlight", userId ); var flight = new FlightContract(); try { // flight flight.Flight = new CrudeFlightService().FetchByFlightId(flightId); // segments /* * flight.FlightSegments = * new ScheduleSearchService().FlightSegments(flight).ToArray(); */ flight.CrudeFlightSegments = new CrudeFlightSegmentService().FetchByFlightId(flightId).ToArray(); // flight identifier CrudeFlightIdentifierContract[] flightIdentifiers = new CrudeFlightIdentifierService().FetchByFlightId(flightId).ToArray(); // todo, can be more than one, use the one if existing, or make an empty one, should have room for more than one if (flightIdentifiers.Length > 0) { flight.FlightIdentifier = flightIdentifiers[0]; } else { flight.FlightIdentifier = new CrudeFlightIdentifierContract(); } } catch (Exception ex) { Logging.ErrorLog("Flight", "FlightService", "GetFlight", ex.Message, ex.StackTrace, userId ); throw ex; } return(flight); }
public void UpdateFlight( FlightContract flightContract, Guid userId ) { Logging.ActionLog("SolutionNorSolutionPort.BusinessLogicLayer.FlightService.UpdateFlight", userId ); // start transaction using (var connection = new SqlConnection(Conn.ConnectionString)) { connection.Open(); SqlTransaction transaction = connection.BeginTransaction(); try { // insert new flight var crudeNewFlightData = new CrudeFlightData(); CrudeFlightService.ContractToData( flightContract.Flight, crudeNewFlightData ); crudeNewFlightData.FlightId = Guid.NewGuid(); // binding flight id carries on forward crudeNewFlightData.BindingFlightId = flightContract.Flight.BindingFlightId; crudeNewFlightData.UserId = userId; crudeNewFlightData.DateTime = DateTime.UtcNow; crudeNewFlightData.Insert(connection, transaction); // todo, can be more than one if (!String.IsNullOrEmpty(flightContract.FlightIdentifier.FlightIdentifierCode)) { var crudeNewFlightIdentifierData = new CrudeFlightIdentifierData(); CrudeFlightIdentifierService.ContractToData( flightContract.FlightIdentifier, crudeNewFlightIdentifierData ); crudeNewFlightIdentifierData.FlightIdentifierId = Guid.NewGuid(); crudeNewFlightIdentifierData.FlightId = crudeNewFlightData.FlightId; crudeNewFlightIdentifierData.FlightIdentifierTypeRcd = FlightIdentifierTypeRef.FlightNumberThree; crudeNewFlightIdentifierData.DateTime = DateTime.UtcNow; crudeNewFlightIdentifierData.UserId = userId; crudeNewFlightIdentifierData.Insert(connection, transaction); } // update old flight schedule 'became' identifier var crudeOldFlightData = new CrudeFlightData(); crudeOldFlightData.FetchByFlightId(flightContract.Flight.FlightId); crudeOldFlightData.BecameFlightId = crudeNewFlightData.FlightId; crudeOldFlightData.Update(connection, transaction); // copy segments List <CrudeFlightSegmentData> crudeFlightSegmentsData = CrudeFlightSegmentData.FetchByFlightId( flightContract.Flight.FlightId ); foreach (CrudeFlightSegmentData crudeFlightSegmentData in crudeFlightSegmentsData) { crudeFlightSegmentData.FlightSegmentId = Guid.NewGuid(); crudeFlightSegmentData.FlightId = crudeNewFlightData.FlightId; crudeFlightSegmentData.DateTime = DateTime.UtcNow; crudeFlightSegmentData.UserId = userId; crudeFlightSegmentData.Insert(connection, transaction); } // commit transaction transaction.Commit(); } catch (Exception ex) { transaction.Rollback(); Logging.ErrorLog("Flight", "FlightService", "UpdateFlight", ex.Message, ex.StackTrace, userId ); throw ex; } } }