/// <summary>
        /// Add a new contract to the database from an EveDataContract.
        /// </summary>
        /// <param name="eveDataContract">An EveDataContract object.</param>
        /// <param name="salesAgent">A SalesAgent object representing the contract owner.</param>
        /// <param name="batch">Optional parameter with a default of false. Is this addition part of a batch? If so, do not commit.</param>
        internal Contract AddContract(IEveDataContract eveDataContract, SalesAgent salesAgent, bool batch = false)
        {
            Contract newContract = new Contract();

            newContract.ContractId     = eveDataContract.ContractId;
            newContract.AssigneeId     = eveDataContract.AssigneeId;
            newContract.StartStationId = eveDataContract.StartStationId;
            newContract.Status         = Conversion.StringToEnum <ContractStatus>(eveDataContract.Status.ToString(), ContractStatus.Deleted);
            newContract.Type           = Conversion.StringToEnum <ContractType>(eveDataContract.Type.ToString(), ContractType.ItemExchange);
            newContract.Availability   = Conversion.StringToEnum <ContractAvailability>(eveDataContract.Availability.ToString(), ContractAvailability.Private);
            newContract.Price          = eveDataContract.Price;
            newContract.Volume         = eveDataContract.Volume;
            newContract.DateIssued     = eveDataContract.DateIssued;
            newContract.DateExpired    = eveDataContract.DateExpired;
            newContract.IssuerCorpId   = eveDataContract.IssuerCorpId;
            newContract.IssuerId       = eveDataContract.IssuerId;
            newContract.ForCorp        = eveDataContract.ForCorp;
            newContract.IsValid        = false;

            // Populate the contract title/description field.
            if (eveDataContract.Title == string.Empty)
            {
                newContract.Title = "None";
            }
            else
            {
                newContract.Title = eveDataContract.Title;
            }

            // Populate the remaining contract details. These calls are cached.
            newContract.SolarSystemId    = this.eveDataSource.GetStationSolarSystemId(newContract.StartStationId);
            newContract.SolarSystemName  = this.eveDataSource.GetSolarSystemName(newContract.SolarSystemId);
            newContract.StartStationName = this.eveDataSource.GetStationName(newContract.StartStationId);

            // Attempt to match the contract contents to a ship fit id.
            newContract.ShipFitId = this.ContractShipFitMatch(newContract.ContractId, salesAgent);

            // If the ship fit was matched, set the contract as valid.
            if (newContract.ShipFitId != 0)
            {
                newContract.IsValid = true;
            }

            // Validate the new contract.
            if (this.doctrineShipsValidation.Contract(newContract).IsValid == true)
            {
                // Add the populated contract object to the database.
                this.doctrineShipsRepository.CreateContract(newContract);

                // If this addition is not part of a batch, commit changes to the database.
                if (batch == false)
                {
                    this.doctrineShipsRepository.Save();
                }
            }

            return(newContract);
        }
        /// <summary>
        /// Add a new contract to the database from an EveDataContract.
        /// </summary>
        /// <param name="eveDataContract">An EveDataContract object.</param>
        /// <param name="salesAgent">A SalesAgent object representing the contract owner.</param>
        /// <param name="batch">Optional parameter with a default of false. Is this addition part of a batch? If so, do not commit.</param>
        internal Contract AddContract(IEveDataContract eveDataContract, SalesAgent salesAgent, bool batch = false)
        {
            Contract newContract = new Contract();

            newContract.ContractId = eveDataContract.ContractId;
            newContract.AssigneeId = eveDataContract.AssigneeId;
            newContract.StartStationId = eveDataContract.StartStationId;
            newContract.Status = Conversion.StringToEnum<ContractStatus>(eveDataContract.Status.ToString(), ContractStatus.Deleted);
            newContract.Type = Conversion.StringToEnum<ContractType>(eveDataContract.Type.ToString(), ContractType.ItemExchange);
            newContract.Availability = Conversion.StringToEnum<ContractAvailability>(eveDataContract.Availability.ToString(), ContractAvailability.Private);
            newContract.Price = eveDataContract.Price;
            newContract.Volume = eveDataContract.Volume;
            newContract.DateIssued = eveDataContract.DateIssued;
            newContract.DateExpired = eveDataContract.DateExpired;
            newContract.IssuerCorpId = eveDataContract.IssuerCorpId;
            newContract.IssuerId = eveDataContract.IssuerId;
            newContract.ForCorp = eveDataContract.ForCorp;
            newContract.IsValid = false;

            // Populate the contract title/description field.
            if (eveDataContract.Title == string.Empty)
            {
                newContract.Title = "None";
            }
            else
            {
                newContract.Title = eveDataContract.Title;
            }

            // Populate the remaining contract details. These calls are cached.
            newContract.SolarSystemId = this.eveDataSource.GetStationSolarSystemId(newContract.StartStationId);
            newContract.SolarSystemName = this.eveDataSource.GetSolarSystemName(newContract.SolarSystemId);
            newContract.StartStationName = this.eveDataSource.GetStationName(newContract.StartStationId);

            // Attempt to match the contract contents to a ship fit id.
            newContract.ShipFitId = this.ContractShipFitMatch(newContract.ContractId, salesAgent);

            // If the ship fit was matched, set the contract as valid.
            if (newContract.ShipFitId != 0)
            {
                newContract.IsValid = true;
            }

            // Validate the new contract.
            if (this.doctrineShipsValidation.Contract(newContract).IsValid == true)
            {
                // Add the populated contract object to the database.
                this.doctrineShipsRepository.CreateContract(newContract);

                // If this addition is not part of a batch, commit changes to the database.
                if (batch == false)
                {
                    this.doctrineShipsRepository.Save();
                }
            }

            return newContract;
        }