public void Cancel(IDictionary<string, string> attributes, string comment, DateTime timestamp)
        {
            IScorpionDataProvider dataSession = null;

            try
            {
                string identifier = GetNewIdentifier(progressIdentifierSync);

                dataSession = DataProviderFactory.GetSession();

                dataSession.BeginTransaction();

                dataSession.InsertFulfillmentProgress(info.Identifier, identifier, timestamp, "Cancellation", string.Empty, comment, timestamp, SecurityManager.CurrentUser.Identity.Identifier);

                foreach (KeyValuePair<string, string> attribute in attributes)
                    dataSession.InsertFulfillmentProgressAttribute(info.Identifier, identifier, attribute.Key, attribute.Value, SecurityManager.CurrentUser.Identity.Identifier);

                dataSession.SetOrderStatus(info.Identifier, "CANCELLED", comment, SecurityManager.CurrentUser.Identity.Identifier);

                dataSession.CommitTransaction();

                info = dataSession.GetFulfillmentProcess(info.Identifier);
            }
            catch
            {
                dataSession.RollbackTransaction();

                throw;
            }
            finally
            {
                if (dataSession != null)
                    dataSession.Dispose();
            }
        }
        public override void Refresh()
        {
            IScorpionDataProvider dataSession = null;

            try
            {
                dataSession = DataProviderFactory.GetSession();

                info = dataSession.GetFulfillmentProcess(info.Identifier);
            }
            catch
            {
                throw;
            }
            finally
            {
                if (dataSession != null)
                    dataSession.Dispose();
            }
        }
        public void RegisterProgress(ref string identifier, string assignee, IDictionary<string, string> attributes, string comment, DateTime timestamp, string status, DateTime expectedCompletionTimestamp)
        {
            IScorpionDataProvider dataSession = null;

            try
            {
                dataSession = DataProviderFactory.GetSession();

                dataSession.BeginTransaction();

                if (string.IsNullOrEmpty(identifier))
                    identifier = GetNewIdentifier(progressIdentifierSync);
                else
                    if (dataSession.OrderExists(identifier))
                        throw new OrderExists();

                dataSession.InsertFulfillmentProgress(info.Identifier, identifier, timestamp, status, assignee, comment, expectedCompletionTimestamp, SecurityManager.CurrentUser.Identity.Identifier);

                foreach(KeyValuePair<string, string> attribute in attributes)
                    dataSession.InsertFulfillmentProgressAttribute(info.Identifier, identifier, attribute.Key, attribute.Value, SecurityManager.CurrentUser.Identity.Identifier);

                dataSession.CommitTransaction();

                info = dataSession.GetFulfillmentProcess(info.Identifier);
            }
            catch
            {
                dataSession.RollbackTransaction();

                throw;
            }
            finally
            {
                if (dataSession != null)
                    dataSession.Dispose();
            }
        }
 public OrderFulfillmentProcess(IFulfillmentProcessInfo info, IApplicationData<IScorpionDataProvider> dataProviderFactory, ISecurityManager securityManager)
     : base(dataProviderFactory, securityManager)
 {
     this.info = info;
 }