/// <summary>
        /// Creates a transport assignment
        /// </summary>
        public static void SubmitTransportAssignment(Character character, long wrapperContainerEid, long reward, long collateral, long sourceBaseEid, long targetBaseEid, int durationDays)
        {
            if (durationDays <= 0)
            {
                durationDays = 1;
            }

            reward.ThrowIfLessOrEqual(0, ErrorCodes.IllegalTransportAssignmentReward);
            collateral.ThrowIfLess(0, ErrorCodes.IllegalTransportAssignmentCollateral);

            targetBaseEid.ThrowIfEqual(sourceBaseEid, ErrorCodes.WTFErrorMedicalAttentionSuggested);
            DockingBase.Exists(targetBaseEid).ThrowIfFalse(ErrorCodes.TargetDockingBaseWasNotFound);

            var publicContainer = Container.GetFromStructure(sourceBaseEid);

            publicContainer.ReloadItems(character);
            var wrapperContainer = (VolumeWrapperContainer)publicContainer.GetItemOrThrow(wrapperContainerEid);

            wrapperContainer.CheckSubmitConditionsAndThrowIfFailed();

            var transportAssignmentInfo = new TransportAssignment
            {
                reward         = reward,
                ownercharacter = character,
                collateral     = collateral,
                containereid   = wrapperContainerEid,
                sourcebaseeid  = sourceBaseEid,
                targetbaseeid  = targetBaseEid,
                volume         = wrapperContainer.Volume,
                expiry         = DateTime.Now.AddDays(durationDays),
                containername  = wrapperContainer.Name,
            };

            transportAssignmentInfo.CashInOnSubmit();
            transportAssignmentInfo.InsertToDb();

            wrapperContainer.Parent       = GetTransportStorageEid(sourceBaseEid).ThrowIfLessOrEqual(0, ErrorCodes.ServerError);
            wrapperContainer.AssignmentId = transportAssignmentInfo.id;

            wrapperContainer.Save();

            transportAssignmentInfo.WriteLog(TransportAssignmentEvent.submit, sourceBaseEid);
            SendCommandWithTransportAssignmentsAndContainer(Commands.TransportAssignmentSubmit, publicContainer, character);
        }
        private static void AdministerDelivery(TransportAssignment transportAssignmentInfo, VolumeWrapperContainer volumeWrapperContainer, PublicContainer container)
        {
            //normal procedure
            //successful delivery

            transportAssignmentInfo.PayOutReward();

            volumeWrapperContainer.ReloadItems(transportAssignmentInfo.volunteercharacter);
            volumeWrapperContainer.PrintDebug();

            container.AddItem(volumeWrapperContainer, transportAssignmentInfo.ownercharacter.Eid, false);

            volumeWrapperContainer.Owner = transportAssignmentInfo.ownercharacter.Eid;
            volumeWrapperContainer.ClearAssignmentId();
            volumeWrapperContainer.Save();

            volumeWrapperContainer.PrintDebug();

            //owner
            transportAssignmentInfo.WriteLog(TransportAssignmentEvent.deliver, container.Parent);
            transportAssignmentInfo.DeleteFromDb();
            transportAssignmentInfo.SendDeliveryMessage(container);
        }