예제 #1
0
 public static void Update(this Spot spot, CreateSpot createSpot)
 {
     spot.ExternalCampaignNumber = createSpot.ExternalCampaignNumber;
     spot.SalesArea                = createSpot.SalesArea;
     spot.GroupCode                = createSpot.GroupCode;
     spot.ExternalSpotRef          = createSpot.ExternalSpotRef;
     spot.StartDateTime            = createSpot.StartDateTime;
     spot.EndDateTime              = createSpot.EndDateTime;
     spot.SpotLength               = createSpot.SpotLength;
     spot.BreakType                = createSpot.BreakType;
     spot.Product                  = createSpot.Product;
     spot.Demographic              = createSpot.Demographic;
     spot.ClientPicked             = createSpot.ClientPicked;
     spot.MultipartSpot            = createSpot.MultipartSpot;
     spot.MultipartSpotPosition    = createSpot.MultipartSpotPosition;
     spot.MultipartSpotRef         = createSpot.MultipartSpotRef;
     spot.RequestedPositioninBreak = createSpot.RequestedPositioninBreak;
     spot.ActualPositioninBreak    = createSpot.ActualPositioninBreak;
     spot.BreakRequest             = createSpot.BreakRequest;
     spot.ExternalBreakNo          = createSpot.ExternalBreakNo;
     spot.Sponsored                = createSpot.Sponsored;
     spot.Preemptable              = createSpot.Preemptable;
     spot.Preemptlevel             = createSpot.Preemptlevel;
     spot.IndustryCode             = createSpot.IndustryCode;
     spot.ClearanceCode            = createSpot.ClearanceCode;
 }
예제 #2
0
        public IHttpActionResult Put(Guid id, [FromBody] CreateSpot spot)
        {
            if (id == default(Guid) || !ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var existingSpot = _repository.Find(id);

            if (existingSpot is null)
            {
                return(this.Error().ResourceNotFound("Spot not found"));
            }

            try
            {
                spot.Validate();
            }
            catch (BreakTypeException ex)
            {
                ModelState.AddModelError(
                    nameof(CreateSpot.BreakType), BreakTypeValueErrorMessage(ex)
                    );

                return(BadRequest(ModelState));
            }

            existingSpot.Update(spot);
            _repository.Update(existingSpot);

            _repository.SaveChanges();

            return(Ok(existingSpot));
        }
예제 #3
0
 private Break CreateDummyBreak(string externalReference, CreateSpot spot)
 {
     return(_fixture.Build <Break>()
            .With(b => b.ExternalBreakRef, externalReference)
            .With(b => b.SalesArea, spot.SalesArea)
            .With(b => b.ScheduledDate, spot.StartDateTime)
            .Create());
 }
예제 #4
0
        public IHttpActionResult Put(string externalId, [FromBody] CreateSpot newSpot)
        {
            if (newSpot != null && (string.IsNullOrWhiteSpace(externalId) || externalId != newSpot.ExternalSpotRef))
            {
                ModelState.AddModelError(nameof(Spot.ExternalSpotRef), "External Id does not match");
            }

            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            try
            {
                newSpot.Validate();
            }
            catch (BreakTypeException ex)
            {
                ModelState.AddModelError(
                    nameof(CreateSpot.BreakType), BreakTypeValueErrorMessage(ex)
                    );

                return(BadRequest(ModelState));
            }

            var existingSpot = _repository.FindByExternalSpotRef(externalId);
            var reviseResult = ReviseAndModifySpotChanges(newSpot, existingSpot);

            if (!reviseResult.Success)
            {
                ModelState.AddModelError(reviseResult.Error.ErrorField, reviseResult.Error.ErrorMessage);
                return(BadRequest(ModelState));
            }

            if (existingSpot is null)
            {
                existingSpot = CreateSpots(new List <CreateSpot> {
                    newSpot
                }).First();
            }
            else
            {
                existingSpot.Update(newSpot);
                _repository.Update(existingSpot);
            }

            // Do not remove this, need to persist changes now so that we can
            // return model
            _repository.SaveChanges();

            return(Ok(_spotModelCreator.Create(new[] { existingSpot }).FirstOrDefault()));
        }
        /// <summary>
        /// Method checks Spot ExternalBreakNo/StartDateTime/EndDateTime to validate Spot move to the new Break
        /// </summary>
        /// <param name="newSpot" cref="Model.CreateSpot">New entity</param>
        /// <param name="existingSpot" cref="Spot">Existing entity, used in update mode</param>
        /// <returns>Returns result with Success flag and optional ErrorModel if there were some errors</returns>
        private (bool Success, ErrorModel Error) ReviseAndModifySpotChanges(CreateSpot newSpot, Spot existingSpot)
        {
            if (newSpot is null)
            {
                return(Failed("", "Entity cannot be null."));
            }

            if (newSpot.EndDateTime != default && newSpot.EndDateTime < newSpot.StartDateTime)
            {
                return(Failed(nameof(Spot.EndDateTime), "Spot EndDateTime cannot be less than StartDateTime"));
            }

            var spotIsMoved = !newSpot.IsUnplaced && (existingSpot == null ||
                                                      existingSpot.ExternalBreakNo != newSpot.ExternalBreakNo ||
                                                      existingSpot.StartDateTime.Date != newSpot.StartDateTime.Date ||
                                                      existingSpot.SalesArea != newSpot.SalesArea);

            return(spotIsMoved ? TryMoveSpotToDifferentBreak(newSpot) : Success());
        }
        private (bool Success, ErrorModel Error) TryMoveSpotToDifferentBreak(CreateSpot newSpot)
        {
            var newBreak = _breakRepository.FindByExternal(newSpot.ExternalBreakNo).FirstOrDefault();

            if (newBreak is null)
            {
                return(Failed(nameof(Spot.ExternalBreakNo), $"Break with reference number {newSpot.ExternalBreakNo} could not be found"));
            }

            if (newSpot.SalesArea != newBreak.SalesArea)
            {
                return(Failed(nameof(Spot.SalesArea), "Spot SalesArea does not match Break SalesArea"));
            }

            if (newSpot.StartDateTime.Date != newBreak.ScheduledDate.Date)
            {
                return(Failed(nameof(Spot.StartDateTime), "Spot StartDateTime date does not match Break ScheduledDate date"));
            }

            return(Success());
        }