public void Calculate_quantity_and_junk_cost()
        {
            var offerId = new OfferId(1, 1);
            var list    = new List <Tuple <IEnumerable <ClientRating>, IEnumerable <Offer> > > {
                Tuple.Create <IEnumerable <ClientRating>, IEnumerable <Offer> >(
                    new List <ClientRating> {
                    new ClientRating(2, 1, 0.5m),
                },
                    new List <Offer> {
                    new Offer(offerId, 1, 1, 100000, false, 10)
                }),
                Tuple.Create <IEnumerable <ClientRating>, IEnumerable <Offer> >(
                    new List <ClientRating> {
                    new ClientRating(3, 1, 0.7m)
                },
                    new List <Offer> {
                    new Offer(offerId, 1, 1, 800, true, 10, 1)
                })
            };
            var averageCosts = _calculator.Calculate(list);

            Assert.That(averageCosts.Count, Is.EqualTo(1));
            var costs = (Hashtable)averageCosts[offerId];

            Assert.That(costs.Count, Is.EqualTo(1));
            var aggregates = ((OfferAggregates)costs[new AggregateId(1, 1)]);

            Assert.That(aggregates.Quantity, Is.EqualTo(10));
            Assert.That(aggregates.Cost, Is.EqualTo(100000));
        }
Example #2
0
        protected NameValueCollection GetPostData()
        {
            var data = new NameValueCollection();

            data[Parameters.GlobalPostbackType] = GlobalPostbackType.ToString();
            data[Parameters.OfferId]            = OfferId.ToString();
            data[Parameters.OfferName]          = OfferName;
            data[Parameters.IpAddress]          = Ip;
            data[Parameters.CountryCode]        = CountryCode;
            data[Parameters.SubId]        = SubId;
            data[Parameters.Payout]       = Payout.ToClearString();
            data[Parameters.CurrencyCode] = CurrencyCode;

            if (Age != -1)
            {
                data[Parameters.Age] = Age.ToString();
            }

            data[Parameters.Gender] = Gender.ToString();
            if (!string.IsNullOrEmpty(SubId2))
            {
                data[Parameters.SubId2] = SubId2;
            }
            if (!string.IsNullOrEmpty(SubId3))
            {
                data[Parameters.SubId3] = SubId3;
            }

            return(data);
        }
Example #3
0
 public BookedEvent(BookedRecordId bookedRecordId, CustomerId customerId, FacilityId facilityId, OfferId offerId)
 {
     BookedRecordId = bookedRecordId;
     CustomerId     = customerId;
     FacilityId     = facilityId;
     OfferId        = offerId;
 }
        public void CalculateWithNoFullRating()
        {
            var offerId = new OfferId(1, 1);
            var list    = new List <Tuple <IEnumerable <ClientRating>, IEnumerable <Offer> > > {
                Tuple.Create <IEnumerable <ClientRating>, IEnumerable <Offer> >(
                    new List <ClientRating> {
                    new ClientRating(2, 1, 0.2m),
                },
                    new List <Offer> {
                    new Offer(offerId, 1, 1, 100, false, 10),
                    new Offer(offerId, 2, 1, 50, false, 10, 1),
                }),
                Tuple.Create <IEnumerable <ClientRating>, IEnumerable <Offer> >(
                    new List <ClientRating> {
                    new ClientRating(1, 1, 0.6m),
                },
                    new List <Offer> {
                    new Offer(offerId, 1, 1, 20, false, 10),
                    new Offer(offerId, 2, 1, 50, false, 10, 1),
                })
            };
            var averageCosts = _calculator.Calculate(list);
            var costs        = (Hashtable)averageCosts[offerId];
            var aggregates   = ((OfferAggregates)costs[new AggregateId(1, 1)]);

            Assert.That(aggregates.Cost, Is.EqualTo(40));
            Assert.That(aggregates.Quantity, Is.EqualTo(10));
            aggregates = ((OfferAggregates)costs[new AggregateId(2, 1)]);
            Assert.That(aggregates.Cost, Is.EqualTo(50));
            Assert.That(aggregates.Quantity, Is.EqualTo(10));
        }
 public override int GetHashCode()
 {
     unchecked
     {
         return(DevName.GetHashCode() * 397 ^ OfferId.GetHashCode());
     }
 }
        public void Ignore_cost_greater_than_threshold()
        {
            _calculator.CostThreshold = 90000;
            var offerId = new OfferId(1, 1);
            var list    = new List <Tuple <IEnumerable <ClientRating>, IEnumerable <Offer> > > {
                Tuple.Create <IEnumerable <ClientRating>, IEnumerable <Offer> >(
                    new List <ClientRating> {
                    new ClientRating(2, 1, 0.5m),
                },
                    new List <Offer> {
                    new Offer(offerId, 1, 1, 100000, false)
                }),
                Tuple.Create <IEnumerable <ClientRating>, IEnumerable <Offer> >(
                    new List <ClientRating> {
                    new ClientRating(3, 1, 0.7m)
                },
                    new List <Offer> {
                    new Offer(offerId, 1, 1, 800, false)
                })
            };

            var averageCosts = _calculator.Calculate(list);

            Assert.That(averageCosts.Count, Is.EqualTo(1));
            var costs = (Hashtable)averageCosts[offerId];

            Assert.That(costs.Count, Is.EqualTo(1));
            Assert.That(((OfferAggregates)costs[new AggregateId(1, 1)]).Cost, Is.EqualTo(800m));
        }
Example #7
0
 public BookedRecordData(EmployeeId employeeId, OfferId offerId, Money price, DateTime date, short durationInMinutes)
 {
     EmployeeId        = employeeId;
     OfferId           = offerId;
     Price             = price;
     Date              = date;
     DurationInMinutes = durationInMinutes;
 }
Example #8
0
 public Offer(OfferId id, FacilityId facilityId, string name, decimal price, string currency, short duration)
 {
     Id         = id;
     FacilityId = facilityId;
     Name       = name;
     Price      = price;
     Currency   = currency;
     Duration   = duration;
 }
Example #9
0
        internal BookedRecord(EmployeeId employeeId, OfferId offerId, Money price, DateTime date, short durationInMinutes)
        {
            CheckRule(new DateMustBeFromTheFutureRule(date));

            this.Id                = new BookedRecordId(Guid.NewGuid());
            this.employeeId        = employeeId;
            this.offerId           = offerId;
            this.price             = price;
            this.date              = date;
            this.durationInMinutes = durationInMinutes;
            this.status            = BookedRecordStatus.Booked;
        }
        public DraftId Choose(string offerIdString, string tenantIdString, DateTime from, DateTime to)
        {
            var offerId  = OfferId.From(offerIdString);
            var offer    = _offerRepository.Get(offerId);
            var tenantId = TenantId.From(tenantIdString);
            var period   = Period.From(from, to);

            var discount     = _discountService.CalculateDiscount(tenantIdString, offerIdString, from, to);
            var draftFactory = new DraftFactory(discount, new DefaultDraftNumberGenerator());
            var draft        = offer.Choose(tenantId, period, draftFactory);

            _draftRepository.Save(draft);

            return(draft.Id);
        }
Example #11
0
        public async Task InMemoryTestHarness_OfferCreatedPublished_OfferPersisted()
        {
            using (var scope = factory.Services.CreateScope())
            {
                var mediator        = scope.ServiceProvider.GetRequiredService <IMediator>();
                var ctx             = scope.ServiceProvider.GetRequiredService <BookingContext>();
                var harness         = new InMemoryTestHarness();
                var consumerHarness = harness.Consumer <OfferCreatedConsumer>(() => new OfferCreatedConsumer(mediator));

                var   offerId    = new OfferId(Guid.NewGuid());
                var   facilityId = new FacilityId(Guid.NewGuid());
                var   name       = "testowa oferta";
                var   price      = 50;
                var   currency   = "PLN";
                short duration   = 60;

                await harness.Start();

                try
                {
                    await harness.InputQueueSendEndpoint.Send <OfferCreated>(new
                    {
                        Id         = offerId.Value,
                        FacilityId = facilityId.Value,
                        Name       = name,
                        Price      = price,
                        Currency   = currency,
                        Duration   = duration
                    });

                    Assert.True(await harness.Consumed.Any <OfferCreated>());
                    Assert.True(await consumerHarness.Consumed.Any <OfferCreated>());
                    Assert.False(await harness.Published.Any <Fault <OfferCreated> >());

                    var persistedOffer = await ctx.Offers.FirstOrDefaultAsync(o => o.Id == offerId);

                    Assert.NotNull(persistedOffer);
                    Assert.Equal(facilityId, persistedOffer.FacilityId);
                    Assert.Equal(price, persistedOffer.Price);
                    Assert.Equal(currency, persistedOffer.Currency);
                    Assert.Equal(duration, persistedOffer.Duration);
                }
                finally
                {
                    await harness.Stop();
                }
            }
        }
Example #12
0
 /// <summary>
 /// Gets the hash code
 /// </summary>
 /// <returns>Hash code</returns>
 public override int GetHashCode()
 {
     unchecked // Overflow is fine, just wrap
     {
         var hashCode = 41;
         // Suitable nullity checks etc, of course :)
         if (OfferId != null)
         {
             hashCode = hashCode * 59 + OfferId.GetHashCode();
         }
         if (ProviderId != null)
         {
             hashCode = hashCode * 59 + ProviderId.GetHashCode();
         }
         return(hashCode);
     }
 }
Example #13
0
        public void Customize(IHtmlToPdfOptions options)
        {
            options.FooterHeaderReplace.Add("languageId", OffersLanguageHelpers.getCurrentUIlanguageID().ToString());
            options.FooterHeaderReplace.Add("languageCode", LanguageId);
            options.FooterHeaderReplace.Add("offerId", OfferId.ToString());

            // you may customize HTML to PDF converter (WKHTML) parameters here, e.g.
            //options.MarginLeft = "2cm";
            //options.MarginRight = "1cm";
            //options.MarginTop = "1cm";
            //options.MarginBottom = "1cm";
            var uriForProtocol = new Uri(options.Url.ToString()).GetLeftPart(UriPartial.Authority);

            options.CustomArgs.Add("--header-html");
            options.CustomArgs.Add(uriForProtocol + "/Offers/Offers/Header");
            options.CustomArgs.Add("--footer-html");
            options.CustomArgs.Add(uriForProtocol + "/Offers/Offers/Footer");

            // options.CustomArgs.Add("--disable-smart-shrinking");
        }
        private List <BookedRecordData> MappBookedRecords(CreateBookingRequestCommand request, IEnumerable <Offer> offers)
        {
            var bookedRecords = new List <BookedRecordData>();

            foreach (var record in request.BookedRecords)
            {
                var offerId    = new OfferId(record.OfferId);
                var employeeId = new EmployeeId(record.EmployeeId);
                var offer      = offers.First(o => o.Id == offerId);

                bookedRecords.Add(new BookedRecordData(
                                      employeeId,
                                      offerId,
                                      Money.Of(offer.Price, offer.Currency),
                                      record.Date,
                                      offer.Duration
                                      ));
            }

            return(bookedRecords);
        }
        public void CalculateWithSameProductInOtherPrice()
        {
            var offerId = new OfferId(1, 1);
            var list    = new List <Tuple <IEnumerable <ClientRating>, IEnumerable <Offer> > > {
                Tuple.Create <IEnumerable <ClientRating>, IEnumerable <Offer> >(
                    new List <ClientRating> {
                    new ClientRating(2, 1, 1m),
                },
                    new List <Offer> {
                    new Offer(offerId, 1, 1, 100, false, 10, 0, "Code"),
                    new Offer(offerId, 1, 1, 50, false, 10, 1, "Code"),
                    new Offer(offerId, 1, 1, 150, false, 10, 2, "Code", priceId: 1)
                })
            };
            var averageCosts = _calculator.Calculate(list);
            var costs        = (Hashtable)averageCosts[offerId];
            var aggregates   = ((OfferAggregates)costs[new AggregateId(1, 1)]);

            Assert.That(aggregates.Cost, Is.EqualTo(100));
            Assert.That(aggregates.Quantity, Is.EqualTo(20));
        }
        public void CalculateWithSameAssortment()
        {
            var offerId = new OfferId(1, 1);
            var list    = new List <Tuple <IEnumerable <ClientRating>, IEnumerable <Offer> > > {
                Tuple.Create <IEnumerable <ClientRating>, IEnumerable <Offer> >(
                    new List <ClientRating> {
                    new ClientRating(2, 1, 1m),
                },
                    new List <Offer> {
                    new Offer(offerId, 1, 1, 100, false, 10),
                    new Offer(offerId, 1, 1, 125, false, 10, 1),
                    new Offer(offerId, 1, 1, 150, false, 1, 2)
                })
            };
            var averageCosts = _calculator.Calculate(list);
            var costs        = (Hashtable)averageCosts[offerId];
            var aggregates   = ((OfferAggregates)costs[new AggregateId(1, 1)]);

            Assert.That(aggregates.Cost, Is.EqualTo(125));
            Assert.That(aggregates.Quantity, Is.EqualTo(21));
        }
        public void Get_max_quiantity_from_all_prices()
        {
            var offerId = new OfferId(1, 1);
            var offers  = new List <Offer>();
            var list    = new List <Tuple <IEnumerable <ClientRating>, IEnumerable <Offer> > > {
                Tuple.Create <IEnumerable <ClientRating>, IEnumerable <Offer> >(
                    new List <ClientRating> {
                    new ClientRating(2, 1, 1m),
                },
                    offers)
            };

            offers.Add(new Offer(offerId, 1, 1, 100, false, 50, priceId: 1));
            offers.Add(new Offer(offerId, 1, 1, 101, false, 200, priceId: 1));
            offers.Add(new Offer(offerId, 1, 1, 100, false, 50, priceId: 2));

            var averageCosts = _calculator.Calculate(list);
            var costs        = (Hashtable)averageCosts[offerId];
            var aggregates   = ((OfferAggregates)costs[new AggregateId(1, 1)]);

            Assert.That(aggregates.Quantity, Is.EqualTo(250));
        }
Example #18
0
        /// <summary>
        /// Returns true if Offer instances are equal
        /// </summary>
        /// <param name="other">Instance of Offer to be compared</param>
        /// <returns>Boolean</returns>
        public bool Equals(Offer other)
        {
            if (ReferenceEquals(null, other))
            {
                return(false);
            }
            if (ReferenceEquals(this, other))
            {
                return(true);
            }

            return
                ((
                     OfferId == other.OfferId ||
                     OfferId != null &&
                     OfferId.Equals(other.OfferId)
                     ) &&
                 (
                     ProviderId == other.ProviderId ||
                     ProviderId != null &&
                     ProviderId.Equals(other.ProviderId)
                 ));
        }
        public void SaveWithZeroCost()
        {
            var result     = new Hashtable();
            var offerId    = new OfferId(1, 1);
            var aggregator = new OfferAggregates(1)
            {
                Cost     = 0,
                Quantity = 1
            };
            var costs = new Hashtable();

            costs[new AggregateId(0, 0)] = aggregator;
            aggregator = new OfferAggregates(1)
            {
                Cost     = 2,
                Quantity = 1
            };
            costs[new AggregateId(1, 1)] = aggregator;
            result[offerId] = costs;
            var count = calculator.Save(DateTime.Today, result);

            Assert.That(count, Is.EqualTo(1));
        }
Example #20
0
 public BookedRecord(EmployeeId employeeId, OfferId offerId, DateTime date)
 {
     EmployeeId = employeeId;
     OfferId    = offerId;
     Date       = date;
 }
Example #21
0
 public override int GetHashCode()
 {
     return(OfferId.GetHashCode() + SkillId.GetHashCode());
 }
Example #22
0
 public BookedNotification(CustomerId customerId, FacilityId facilityId, OfferId offerId) : base(null)
 {
     CustomerId = customerId;
     FacilityId = facilityId;
     OfferId    = offerId;
 }
 public AgreementNumber GetNextAvailable(TenantId tenantId, OfferId offerId)
 {
     return(AgreementNumber.From($"{offerId}-{tenantId}"));
 }
Example #24
0
 public override int GetHashCode()
 {
     return(OfferId.GetHashCode() + FieldId.GetHashCode());
 }
Example #25
0
        public Draft Create(OwnerId ownerId, TenantId tenantId, Apartment apartment, Period period, Price pricePerDay, OfferId offerId, Price deposit)
        {
            var draftNumber     = _draftNumberGenerator.GetNextAvailable(tenantId, offerId);
            var discountedPrice = Price.From(pricePerDay.ToDecimal() * _discount.ToDecimal());

            return(new Draft(ownerId, tenantId, apartment, period, discountedPrice, draftNumber, deposit));
        }
Example #26
0
 public Offer Get(OfferId offerId)
 {
     return(Offers.SingleOrDefault(o => o.Id.Equals(offerId)));
 }