예제 #1
0
        public int Activate(int sampleId, Guid offerId, out int suspendedCode)
        {
            LoggingUtility log = LoggerFactory.GetLogger();
            OfferRepository offerRep = new OfferRepository();
            var newStatus = (int)OfferStatus.Active;
            suspendedCode = 0;

            try
            {
                OpenSampleObject sample = GetOpenSampleObject(sampleId);
                //If the sample was mainstream enabled
                if (sample != null)
                {
                    // update offer attributes in local database based on attributes from SAM
                    new RespondentAttributeRepository().UpdateOrRemove(offerId, sample.Attributes);

                    // update sample quota remaining in local database from SAM
                    offerRep.UpdateQuotaRemaining(sampleId, sample.MainstreamQuotaRemaining);

                    // collect quota cell attributes, and quota cell quota remaining and store in database
                    var QuotaCellRequestSuccess = new QuotaCellManager().InitializeQuotaCells(offerId);

                    // Set the offer as pending if it failed in getting the quota cells
                    if (!QuotaCellRequestSuccess)
                    {
                        //newStatus = (int)OfferStatus.Suspended;
                        suspendedCode = 22;
                        newStatus = (int)OfferStatus.Suspended;
                        log.Info("Suspending the sample " + sample.SampleId + " as the QuotaCell could not be initialized.");
                    }
                }
                //If the sample was not mainstream enabled
                else
                {
                    var ErrorList = this.openSampleAttribute.ServiceErrorList.ToList();
                    //If SAM returned error message in it's response
                    if (ErrorList.Count > 0)
                    {
                        // If error code is for a TimeOut or an unexpected sql error (SAM side)
                        // => Make the offer as pending
                        if (ErrorList.Exists(i => Convert.ToInt32(i.code) == TimeoutErrorCode) || ErrorList.Exists(i => Convert.ToInt32(i.code) == UnexpectedSqlErrorCode))
                        {
                            newStatus = (int)OfferStatus.Pending;
                            log.Info("Making the sample " + sampleId + " as pending as SAM returned an error.");
                        }
                        // If error code is for Sample not mainstream enabled
                        // => Make the offer as suspended
                        else if (ErrorList.Exists(i => Convert.ToInt32(i.code) == SampleNotMainstreamEnabledErrorCode))
                        {
                            //newStatus = (int)OfferStatus.Suspended;
                            suspendedCode = 21;
                            newStatus = (int)OfferStatus.Suspended;
                            log.Info("Suspending the sample " + sampleId + " as it was not found as mainstream enabled.");
                        }

                    }
                    // SAM response doesn't contain an error message, SampleId not found in response
                    // => Suspend the offer
                    else
                    {
                        //newStatus = (int)OfferStatus.Suspended;
                        suspendedCode = 21;
                        newStatus = (int)OfferStatus.Suspended;
                        log.Info("Suspending the sample " + sampleId + " as it was not found as mainstream enabled.");
                    }
                }
            }
            catch (Exception e)
            {
                if (e is ThreadAbortException)
                    newStatus = (int)OfferStatus.Inactive;
                else
                    newStatus = (int)OfferStatus.Pending;

                log.Error(@"A problem occurred while trying to activate the offer: " + offerId.ToString() + " Sample Id: " + sampleId + ".", e);
            }
            finally
            {
                offerRep.UpdateOfferStatus(sampleId, newStatus);
            }
            return newStatus;
        }