Esempio n. 1
0
        public IOrderedItem AddItemToOrder(int orderId, int itemId, IOrderedItem orderedItem)
        {
            using (var connection = Database.GetConnection())
            {
                connection.Open();
                var cmd = connection.CreateCommand();
                cmd.CommandText = OrderedItemSqlServer.ReqAddItemToOrder;

                cmd.Parameters.AddWithValue($"@{OrderedItemSqlServer.ColQuantity}", orderedItem.Quantity);
                cmd.Parameters.AddWithValue($"@{OrderedItemSqlServer.ColSize}", orderedItem.Size);
                cmd.Parameters.AddWithValue($"@{OrderedItemSqlServer.ColOrderId}", orderId);
                cmd.Parameters.AddWithValue($"@{OrderedItemSqlServer.ColItemId}", itemId);

                try
                {
                    orderedItem.Id = (int)cmd.ExecuteScalar();
                }
                catch (SqlException)
                {
                    throw new DuplicateSqlPrimaryException("Cet objet est déjà présent dans la commande");
                }
            }

            return(orderedItem);
        }
Esempio n. 2
0
            public bool TryOnNext(IOrderedItem <T> t)
            {
                if (done)
                {
                    return(false);
                }

                bool b;

                try
                {
                    b = predicate(t.Value);
                }
                catch (Exception ex)
                {
                    Fail(ex);
                    return(false);
                }

                if (b)
                {
                    actual.OnNext(t);
                    return(true);
                }
                return(false);
            }
Esempio n. 3
0
 public override void OnNext(IOrderedItem <T> t)
 {
     if (!TryOnNext(t))
     {
         s.Request(1);
     }
 }
        public void AddOrderedItem(IOrderedItem orderedItem)
        {
            if (OrderedItems.Contains(orderedItem))
            {
                throw new DuplicateItemException();
            }

            OrderedItems.Add(orderedItem);
        }
 public void OnNext(IOrderedItem <T> t)
 {
     if (fusionMode == FuseableHelper.NONE)
     {
         if (!queue.Offer(t))
         {
             OnError(BackpressureHelper.MissingBackpressureException("Queue full?!"));
             return;
         }
     }
     parent.Drain();
 }
Esempio n. 6
0
        public bool UpdateQuantity(int orderedItemId, IOrderedItem orderedItem)
        {
            using (var connection = Database.GetConnection())
            {
                connection.Open();
                var cmd = connection.CreateCommand();
                cmd.CommandText = OrderedItemSqlServer.ReqUpdateQuantity;

                cmd.Parameters.AddWithValue($"@{OrderedItemSqlServer.ColQuantity}", orderedItem.Quantity);
                cmd.Parameters.AddWithValue($"@{OrderedItemSqlServer.ColId}", orderedItemId);

                return(cmd.ExecuteNonQuery() > 0);
            }
        }
Esempio n. 7
0
            public override void OnNext(IOrderedItem <T> t)
            {
                if (done)
                {
                    return;
                }

                R v;

                try
                {
                    v = mapper(t.Value);
                }
                catch (Exception ex)
                {
                    Fail(ex);
                    return;
                }


                actual.OnNext(t.Replace(v));
            }
Esempio n. 8
0
            public override bool TryOnNext(IOrderedItem <T> t)
            {
                if (done)
                {
                    return(false);
                }

                R v;

                try
                {
                    v = mapper(t.Value);
                }
                catch (Exception ex)
                {
                    Fail(ex);
                    return(false);
                }


                return(actual.TryOnNext(t.Replace(v)));
            }
Esempio n. 9
0
 /// <inheritdoc/>
 public int CompareTo(IOrderedItem <T> other)
 {
     return(index < other.Index ? -1 : (index > other.Index ? 1 : 0));
 }
Esempio n. 10
0
 public IOrderedItem AddGiftWrapping(IOrderedItem mainItem) =>
 beethovenFactory.Generate <IOrderedItem>(
     new LinkedObjects(
         mainItem,
         new GiftWrapping(mainItem)
         ));
Esempio n. 11
0
 public GiftWrapping(IOrderedItem mainItem)
 {
     Price  = mainItem.Price + (mainItem.Price > 1000 ? 0 : 10); // Anything costing more than 1000 comes with free gift wrapping
     Weight = mainItem.Weight + 0.1;                             // Might be important for shipping cost estimation
 }
Esempio n. 12
0
 public void OnNext(IOrderedItem <T> t)
 {
     actual.OnNext(t.Value);
 }
            internal void Drain()
            {
                if (!QueueDrainHelper.Enter(ref wip))
                {
                    return;
                }

                var b      = actual;
                var vs     = peek;
                var a      = subscribers;
                int n      = a.Length;
                int missed = 1;

                long e = emitted;

                for (;;)
                {
                    long r = Volatile.Read(ref requested);

                    for (;;)
                    {
                        if (Volatile.Read(ref cancelled))
                        {
                            ClearAll();
                            return;
                        }

                        var ex = Volatile.Read(ref error);
                        if (ex != null)
                        {
                            ex = ExceptionHelper.Terminate(ref error);
                            CancelAll();
                            ClearAll();

                            b.OnError(ex);
                            return;
                        }

                        bool fullRow  = true;
                        int  finished = 0;

                        IOrderedItem <T> min = null;
                        int minIndex         = -1;

                        for (int i = 0; i < n; i++)
                        {
                            var inner = a[i];

                            bool d = Volatile.Read(ref inner.done);

                            var q = Volatile.Read(ref inner.queue);
                            if (q != null)
                            {
                                var vsi = vs[i];
                                if (vsi == null)
                                {
                                    bool hasValue;

                                    try
                                    {
                                        hasValue = q.Poll(out vsi);
                                    }
                                    catch (Exception exc)
                                    {
                                        ExceptionHelper.AddError(ref error, exc);
                                        ex = ExceptionHelper.Terminate(ref error);
                                        CancelAll();
                                        ClearAll();

                                        b.OnError(ex);
                                        return;
                                    }
                                    if (hasValue)
                                    {
                                        vs[i] = vsi;
                                        if (min == null || min.CompareTo(vsi) > 0)
                                        {
                                            min      = vsi;
                                            minIndex = i;
                                        }
                                    }
                                    else
                                    {
                                        if (d)
                                        {
                                            vs[i] = FINISHED;
                                            finished++;
                                        }
                                        else
                                        {
                                            fullRow = false;
                                        }
                                    }
                                }
                                else
                                {
                                    if (vsi == FINISHED)
                                    {
                                        finished++;
                                    }
                                    else
                                    if (min == null || min.CompareTo(vsi) > 0)
                                    {
                                        min      = vsi;
                                        minIndex = i;
                                    }
                                }
                            }
                            else
                            {
                                fullRow = false;
                            }
                        }

                        if (finished == n)
                        {
                            b.OnComplete();
                            return;
                        }

                        if (!fullRow || e == r || min == null)
                        {
                            break;
                        }

                        vs[minIndex] = null;

                        b.OnNext(min.Value);

                        e++;
                        a[minIndex].RequestOne();
                    }


                    emitted = e;
                    missed  = QueueDrainHelper.Leave(ref wip, missed);
                    if (missed == 0)
                    {
                        break;
                    }
                }
            }