Пример #1
0
        public static Data.Drive MapActive(Drive drive)
        {
            if (drive == null)
            {
                return(null);
            }
            if (drive.IsPast())
            {
                throw new ArgumentOutOfRangeException("drive", "Drive should be archived.");
            }
            var d = new Data.Drive
            {
                DestinationId = drive.Dest.Id,
                DriverId      = drive.Driver.DriverId,
                Dtime         = drive.Time
            };

            if (drive.IsPickup)
            {
                d.Dtype = "Pickup";
            }
            else
            {
                d.Dtype = "Join";
            }
            if (drive.Id > -1)
            {
                d.Id = drive.Id;
            }
            return(d);
        }
Пример #2
0
        public void TestDataDrivePickup()
        {
            Data.Drive drive = new Data.Drive()
            {
                Dtype  = "Pickup",
                Driver = new Data.Driver()
                {
                    Id      = 0,
                    MeetLoc = "Garage",
                    Seats   = 4,
                    UserId  = 1,
                    Rating  = 0,
                    User    = new Data.Usr
                    {
                        UserName     = "******",
                        EmailAddress = "*****@*****.**",
                        Pass         = "******",
                        Company      = "Revature"
                    }
                },
                Destination = new Data.Destination()
                {
                    Title         = "Taco Bell",
                    StreetAddress = "101 Street"
                },
                Dtime = DateTime.Now
            };
            var expected = Mapper.Map(drive);

            Assert.NotNull(expected);
        }
Пример #3
0
 public static Drive Map(Data.Drive drive)
 {
     if (drive == null)
     {
         return(null);
     }
     if (drive.Dtype == "Pickup")//Pickup
     {
         var d = new PickupDrive(Map(drive.Driver), Map(drive.Destination), drive.Dtime.Value, drive.Id);
         foreach (Data.UserPickup pickup in drive.UserPickup)//adds users and items
         {
             User u = Map(pickup.User);
             d.AddUser(u);
             foreach (Data.OrderItem item in pickup.OrderItem)
             {
                 d.AddItem(u, Map(item));
             }
         }
         return(d);
     }
     else//Join
     {
         var d = new JoinDrive(Map(drive.Driver), Map(drive.Destination), drive.Dtime.Value, drive.Id);
         foreach (Data.UserJoin join in drive.UserJoin)//adds users
         {
             d.AddUser(Map(join.User));
         }
         return(d);
     }
 }
Пример #4
0
        /// <summary>
        /// Archives the drive with given and its sub values. Removes itself and all subvalues
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        private async Task ArchiveDrive(int id)
        //order: arch drive, arch orders, arch items, remove items, remove orders, remove drive
        {
            //arch drive
            Data.Drive drive = await bbBContext.Drive
                               .Where(d => d.Id == id).AsNoTracking().FirstAsync();

            bbBContext.ArchiveDrive.Add(new ArchiveDrive()
            {
                DestinationId = drive.DestinationId,
                DriverId      = drive.DriverId,
                Dtime         = drive.Dtime,
                Dtype         = drive.Dtype
            });
            await(bbBContext.SaveChangesAsync());
            int archiveId = (await bbBContext.ArchiveDrive
                             .Where(d => (d.Dtime == drive.Dtime && d.DriverId == drive.DriverId))
                             .AsNoTracking().FirstAsync()).Id;

            if (drive.Dtype == "Join")
            {
                //arch orders
                var joins = await bbBContext.UserJoin.Where(j => j.DriveId == drive.Id).AsNoTracking().ToListAsync();

                foreach (UserJoin j in joins)
                {
                    bbBContext.ArchiveUserJoin.Add(
                        new ArchiveUserJoin()
                    {
                        ArchiveDriveId = archiveId, UserId = j.UserId
                    });
                }
                //remove orders
                bbBContext.UserJoin.RemoveRange(joins);
                await bbBContext.SaveChangesAsync();
            }
            else
            {
                var pickups = await bbBContext.UserPickup.Include(p => p.OrderItem)
                              .Where(j => j.DriveId == drive.Id).AsNoTracking().ToListAsync();

                foreach (UserPickup p in pickups)
                {
                    //arch order
                    bbBContext.ArchiveOrder.Add(new ArchiveOrder()
                    {
                        ArchiveDriveId = archiveId, UserId = p.UserId
                    });
                    await bbBContext.SaveChangesAsync();

                    int orderId = (await bbBContext.ArchiveOrder
                                   .Where(o => o.ArchiveDriveId == archiveId && o.UserId == p.UserId)
                                   .AsNoTracking().FirstAsync()).Id;
                    foreach (Data.OrderItem i in p.OrderItem)
                    {
                        //arch items
                        bbBContext.ArchiveItem.Add(new ArchiveItem()
                        {
                            ArchiveOrderId = orderId,
                            Cost           = i.Item.Cost,
                            ItemName       = i.Item.ItemName,
                            Msg            = i.Msg,
                            Quantity       = i.Quantity
                        });
                    }
                    //remove items
                    bbBContext.OrderItem.RemoveRange(p.OrderItem);
                }
                //remove orders
                bbBContext.UserPickup.RemoveRange(pickups);
                await bbBContext.SaveChangesAsync();
            }
            //Remove drive
            bbBContext.Drive.Remove(drive);
            await bbBContext.SaveChangesAsync();
        }