/// <summary>
        /// Publishes an <see cref="T:Tridion.ContentManager.IdentifiableObject" /> intelligently if and only if, <see cref="T:Tridion.ContentManager.IdentifiableObject" /> is not in
        /// "Waiting For Publish" state or "Scheduled For Publish" state within the scheduleDateFilter <see cref="T:System.DateTime" />
        /// </summary>
        /// <param name="identifiableObject">The <see cref="T:Tridion.ContentManager.IdentifiableObject" />.</param>
        /// <param name="startDateFilter">The start <see cref="T:System.DateTime"/> filter.</param>
        /// <param name="scheduleDateFilter">The schedule <see cref="T:System.DateTime"/> filter.</param>
        /// <param name="publishStartDate">The publish start <see cref="T:System.DateTime"/>.</param>
        public void PublishIntelligently(IdentifiableObject identifiableObject, DateTime startDateFilter, DateTime scheduleDateFilter, DateTime publishStartDate)
        {
            PublishTransactionsFilter filter = new PublishTransactionsFilter(Engine.GetSession())
            {
                StartDate         = startDateFilter,
                PublicationTarget = PublicationTarget,
                ForRepository     = GetObject <Repository>(Publication.Id)
            };

            PublishTransaction publishTransaction = PublishEngine.GetPublishTransactions(filter)
                                                    .FirstOrDefault(t => t.Items.Count > 0 &&
                                                                    t.Items.First().Id == identifiableObject.Id &&
                                                                    (t.State == PublishTransactionState.WaitingForPublish ||
                                                                     (t.State == PublishTransactionState.ScheduledForPublish && scheduleDateFilter >= t.Instruction.StartAt)));

            if (publishTransaction == null)
            {
                PublishItem(identifiableObject, publishStartDate);
            }
        }