public async Task <ActionResult <dynamic> > PutTransOrder(long orderId, TransOrder transOrder)
        {
            if (orderId != transOrder.OrderId)
            {
                return(BadRequest());
            }

            IBusiness <TransOrder> orderBusiness = BusinessFactory <TransOrder> .Create();

            bool isUpdate = false, isProductUpdate = false;
            var  orderModel = await orderBusiness.SingleOrDefaultAsync(x => x.OrderId == orderId);

            IBusiness <MasterProduct> productBusiness = BusinessFactory <MasterProduct> .Create();

            var productModel = await productBusiness.SingleOrDefaultAsync(x => (bool)x.Status && x.ProductId == transOrder.ProductId);

            if (orderModel != null && productModel != null && productModel.Availablity && productModel.Quantity >= orderModel.OrderedQuantity)
            {
                orderModel.OrderedQuantity = transOrder.OrderedQuantity;
                orderModel.TotalAmount     = transOrder.OrderedQuantity > 0 ? transOrder.OrderedQuantity * productModel.Price : 0;
                orderModel.PaymentMode     = transOrder.PaymentMode;
                orderModel.DeliveryAddress = transOrder.DeliveryAddress;
                orderModel.IsCancelled     = transOrder.IsCancelled;
                orderModel.CancelledDate   = DateTime.Now;
                orderModel.IsShipped       = transOrder.IsShipped;
                orderModel.ShippedDate     = DateTime.Now;
                orderModel.IsDelivered     = transOrder.IsDelivered;
                orderModel.DeliveredDate   = DateTime.Now;
                orderModel.IsReturned      = transOrder.IsReturned;
                orderModel.ReturnedDate    = DateTime.Now;
                orderModel.OrderedBy       = transOrder.OrderedBy;
                orderModel.OrderedDate     = DateTime.Now;
                isUpdate = await orderBusiness.Update(orderModel, orderId);
            }
            if (orderModel != null && productModel != null && ((orderModel.IsCancelled != null && (bool)orderModel.IsCancelled) ||
                                                               (orderModel.IsReturned != null && (bool)orderModel.IsReturned)))
            {
                productModel.Quantity   += orderModel.OrderedQuantity;
                productModel.Availablity = productModel.Quantity > 0;
                isProductUpdate          = await productBusiness.Update(productModel, transOrder.ProductId);
            }

            dynamic saveResult = new { isUpdate, isProductUpdate };

            return(Ok(saveResult));
        }
        public async Task PostTransOrderTest()
        {
            var controller = new TransOrderController();
            var transOrder = new TransOrder()
            {
                ProductId       = 1,
                OrderedQuantity = 1,
                PaymentMode     = "COD",
                DeliveryAddress = "Chennai-600077",
                OrderedBy       = 1,
                OrderedDate     = DateTime.Now
            };

            var outputResult = await controller.PostTransOrder(transOrder);

            var  result = outputResult.Result;
            var  data   = result.TryGetPropertyValue <bool>("isInsert");
            Type type   = typeof(bool);

            Assert.IsNotNull(data);
        }
        public async Task PutMasterProductTest()
        {
            var controller = new TransOrderController();
            int pkid       = 1;
            var transOrder = new TransOrder()
            {
                ProductId       = 1,
                OrderedQuantity = 1,
                PaymentMode     = "COD",
                DeliveryAddress = "Delhi",
                OrderedBy       = 1,
                OrderedDate     = DateTime.Now
            };

            var outputResult = await controller.PutTransOrder(pkid, transOrder);

            var  result = outputResult.Result;
            var  data   = result.TryGetPropertyValue <bool>("isUpdate");
            Type type   = typeof(bool);

            Assert.IsNotNull(data);
        }
        public async Task <ActionResult <dynamic> > PostTransOrder(TransOrder transOrder)
        {
            IBusiness <TransOrder> orderBusiness = BusinessFactory <TransOrder> .Create();

            IBusiness <MasterProduct> productBusiness = BusinessFactory <MasterProduct> .Create();

            bool isOrderInsert = false, isProductUpdate = false;
            var  productModel = await productBusiness.SingleOrDefaultAsync(x => (bool)x.Status && x.ProductId == transOrder.ProductId && (bool)x.Availablity);

            if (productModel != null && productModel.Quantity >= transOrder.OrderedQuantity)
            {
                transOrder.ProductPrice = productModel.Price;
                transOrder.TotalAmount  = productModel.Price * transOrder.OrderedQuantity;
                isOrderInsert           = await orderBusiness.Insert(transOrder);

                productModel.Quantity   -= transOrder.OrderedQuantity;
                productModel.Availablity = productModel.Quantity > 0;
                isProductUpdate          = await productBusiness.Update(productModel, transOrder.ProductId);
            }

            dynamic result = new { isOrderInsert, isProductUpdate };

            return(Ok(result));
        }
예제 #5
0
        private void StartNewTrip(int trordID, int truckID)
        {
            int lastItemID = 0;
            int nextItemID = 0;
            int itemsCount = 0;

            using (CorporationDataContext cdc = new CorporationDataContext())
            {
                TransOrder nextTransOrder = cdc.TransOrders.Where(s => s.TransOrderID == trordID).FirstOrDefault();

                Truck nextFreeTruck = cdc.Trucks.Where(s => s.TruckID == truckID).FirstOrDefault();

                Thread.Sleep(1000);

                try
                {
                    nextFreeTruck.Status = "onTrip";
                    cdc.SubmitChanges();

                    nextTransOrder.Attribute = "onWay";
                    cdc.SubmitChanges();

                    nextTransOrder.Status = "inprocess";
                    cdc.SubmitChanges();
                }
                catch (Exception ex)
                {
                    //MessageBox.Show("Exception: " + ex.Message);
                }
                try
                {
                    itemsCount = cdc.TruckTrips.Count();

                    if (itemsCount == 0)
                    {
                        nextItemID = 770001;
                    }
                    else
                    {
                        lastItemID = cdc.TruckTrips.OrderByDescending(s => s.TruckTripID).Select(s => s.TruckTripID).First();
                        nextItemID = lastItemID + 1;
                    }

                    Boolean containsTransOrder = cdc.TruckTrips.Select(s => s.TransOrderID).Contains(trordID);

                    if (containsTransOrder == false)
                    {
                        try
                        {
                            cdc.TruckTrips.InsertOnSubmit(

                                new TruckTrip
                            {
                                TruckTripID  = nextItemID,
                                TransOrderID = trordID,
                                TruckID      = truckID,
                                Date         = DateTime.Now,
                                Status       = "open"
                            }
                                );

                            cdc.SubmitChanges();
                        }

                        catch (ChangeConflictException e)
                        {
                        }
                    }
                }
                catch
                {
                }
            }
        }
예제 #6
0
        private void Deliver(int trordID, int truckID)
        {
            using (var cdc = new CorporationDataContext())
            {
                //  mutex.WaitOne();

                TransOrder nextTransOrder = cdc.TransOrders.Where(s => s.TransOrderID == trordID).FirstOrDefault();
                Truck      nextTruck      = cdc.Trucks.Where(s => s.TruckID == truckID).FirstOrDefault();
                TruckTrip  currTrip       = cdc.TruckTrips.Where(s => s.TransOrderID == trordID).Single();

                int distance = (int)nextTransOrder.Distance;
                int dur      = distance * 1;
                Thread.Sleep(dur);

                try
                {
                    nextTransOrder.Status = "complete";

                    cdc.SubmitChanges();

                    currTrip.Status = "complete";

                    cdc.SubmitChanges();

                    nextTruck.Status = "free";

                    cdc.SubmitChanges();


                    if (nextTransOrder.Status != "complete")
                    {
                        MessageBox.Show(nextTransOrder.Status, "nextTransOrder.Status= ");
                    }

                    if (currTrip.Status != "complete")
                    {
                        MessageBox.Show(currTrip.Status, "currTrip.Status= ");
                    }

                    if (nextTruck.Status != "free")
                    {
                        MessageBox.Show(nextTruck.Status, "nextTruck.Status= ");
                    }
                }
                catch (ChangeConflictException e)
                {
                    /* foreach (ObjectChangeConflict occ in cdc.ChangeConflicts)
                     * {
                     *   occ.Resolve(RefreshMode.KeepChanges);
                     * }  */
                }

                /*   try
                 * {
                 *
                 *      cdc.SubmitChanges(ConflictMode.FailOnFirstConflict);
                 * }
                 * catch (Exception ex)
                 * {
                 *     MessageBox.Show("Exception: " + ex.Message);
                 * }*/

                // mutex.ReleaseMutex();
            }
        }