Пример #1
0
            public async Task <IEnumerable <PaymentDto> > GetAsync(PaymentsQuery query, CancellationToken token)
            {
                StudyRoomSession studyRoomSessionAlias = null;
                StudyRoom        studyRoomAlias        = null;

                Core.Entities.Tutor tutorAlias         = null;
                StudyRoomUser       studyRoomUserAlias = null;
                User studentAlias   = null;
                User tutorUserAlias = null;

                PaymentDto resultDto = null;

                var res = _session.QueryOver(() => studyRoomSessionAlias)
                          .JoinAlias(x => x.StudyRoom, () => studyRoomAlias)
                          .JoinEntityAlias(() => tutorAlias, () => studyRoomAlias.Tutor.Id == tutorAlias.Id)
                          .JoinEntityAlias(() => studyRoomUserAlias,
                                           () => studyRoomAlias.Id == studyRoomUserAlias.Room.Id &&
                                           tutorAlias.Id != studyRoomUserAlias.User.Id)
                          .JoinEntityAlias(() => studentAlias, () => studyRoomUserAlias.User.Id == studentAlias.Id)
                          .JoinEntityAlias(() => tutorUserAlias, () => tutorUserAlias.Id == tutorAlias.User.Id)
                          .Where(w => w.Receipt == null)
                          .Where(w => w.Duration.Value > TimeSpan.FromMinutes(10));

                if (!string.IsNullOrEmpty(query.Country))
                {
                    res = res.Where(w => studentAlias.Country == query.Country || tutorUserAlias.Country == query.Country);
                }

                return(await res.SelectList(sl =>
                                            sl.Select(s => s.Id).WithAlias(() => resultDto.StudyRoomSessionId)
                                            .Select(s => s.Price).WithAlias(() => resultDto.Price)
                                            .Select(Projections.Conditional(
                                                        Restrictions.IsNull(Projections.Property(() => tutorAlias.SellerKey)),
                                                        Projections.Constant(false),
                                                        Projections.Constant(true)
                                                        )).WithAlias(() => resultDto.IsSellerKeyExists)
                                            .Select(Projections.Conditional(
                                                        Restrictions.Eq(Projections.Property(() => studentAlias.PaymentExists), PaymentStatus.None),
                                                        Projections.Constant(false),
                                                        Projections.Constant(true)
                                                        )).WithAlias(() => resultDto.IsPaymentKeyExists)
                                            .Select(s => tutorAlias.Id).WithAlias(() => resultDto.TutorId)
                                            .Select(s => tutorUserAlias.Name).WithAlias(() => resultDto.TutorName)
                                            .Select(s => studentAlias.Id).WithAlias(() => resultDto.UserId)
                                            .Select(s => studentAlias.Name).WithAlias(() => resultDto.UserName)
                                            .Select(s => s.Created).WithAlias(() => resultDto.Created)
                                            .Select(s => s.Duration.Value).WithAlias(() => resultDto.Duration).WithAlias(() => resultDto.Duration)
                                            .Select(s => s.RealDuration.Value).WithAlias(() => resultDto.RealDuration).WithAlias(() => resultDto.RealDuration)
                                            //.Select(Projections.SqlFunction("COALESCE", NHibernateUtil.TimeSpan
                                            //               , Projections.Property<StudyRoomSession>(s => s.RealDuration.Value)
                                            //               , Projections.Property<StudyRoomSession>(s => s.Duration.Value))
                                            //).WithAlias(() => resultDto.Duration)
                                            .Select(Projections.Conditional(
                                                        Restrictions.IsNull(Projections.Property <StudyRoomSession>(s => s.RealDuration)),
                                                        Projections.Constant(false),
                                                        Projections.Constant(true)
                                                        )).WithAlias(() => resultDto.IsRealDurationExitsts)
                                            ).TransformUsing(Transformers.AliasToBean <PaymentDto>())
                       .ListAsync <PaymentDto>());
            }
Пример #2
0
        public async Task ExecuteAsync(CreateStudyRoomCommand message, CancellationToken token)
        {
            var userTutor = await _userRepository.LoadAsync(message.TutorId, token);

            if (userTutor.Tutor?.State != ItemState.Ok)
            {
                throw new InvalidOperationException("user is not a tutor");
            }

            var student = await _userRepository.LoadAsync(message.StudentId, token);

            var chatRoomIdentifier = ChatRoom.BuildChatRoomIdentifier(new[] { userTutor.Id, student.Id });
            var chatRoom           = await _chatRoomRepository.GetChatRoomAsync(chatRoomIdentifier, token);

            if (chatRoom.Messages.Count == 0)
            {
                throw new InvalidOperationException("no active conversation");
            }

            var url = await _googleDocument.CreateOnlineDocAsync(chatRoomIdentifier, token);

            userTutor.AddFollower(student);

            var studyRoom = new StudyRoom(userTutor.Tutor, student, url);
            await _studyRoomRepository.AddAsync(studyRoom, token);
        }
Пример #3
0
            public async Task <TutorActionsDto> GetAsync(TutorActionsQuery query, CancellationToken token)
            {
                var calendarFuture = _session.Query <GoogleTokens>()
                                     .Where(w => w.Id == query.UserId.ToString())
                                     .Take(1)
                                     .ToFutureValue();

                var hoursFuture = _session.Query <TutorHours>()
                                  .Where(w => w.Tutor.Id == query.UserId)
                                  .Take(1)
                                  .ToFutureValue();

                StudyRoom     studyRoomAlias     = null;
                StudyRoomUser studyRoomUserAlias = null;
                User          userAlias          = null;

                Core.Entities.Tutor tutorAlias      = null;
                AdminTutor          adminTutorAlias = null;



                var bookedSessionFuture = _session.QueryOver(() => studyRoomAlias)
                                          .JoinAlias(f => f.Users, () => studyRoomUserAlias)
                                          .JoinEntityAlias(() => userAlias, () => userAlias.Id == studyRoomUserAlias.User.Id)
                                          .JoinEntityAlias(() => tutorAlias, () => studyRoomAlias.Tutor.Id == tutorAlias.Id)
                                          .JoinEntityAlias(() => adminTutorAlias, () => tutorAlias.Id == adminTutorAlias.Tutor.Id)
                                          //.WhereRestrictionOn(() => studyRoomAlias.Tutor.Id).IsIn(adminList)
                                          .Where(w => userAlias.Id == query.UserId)
                                          .Where(w => adminTutorAlias.Id != null)
                                          .Select(s => s.Id)
                                          .Take(1)
                                          .FutureValue <Guid?>();

                var calendarShared = await calendarFuture.GetValueAsync(token) != null;

                var haveHours = await hoursFuture.GetValueAsync(token) != null;

                var bookedSession = await bookedSessionFuture.GetValueAsync(token) != null;

                var res = new TutorActionsDto()
                {
                    CalendarShared = calendarShared,
                    HaveHours      = haveHours,
                    BookedSession  = bookedSession
                };

                return(res);
            }
Пример #4
0
            public async Task <IEnumerable <UserStudyRoomDto> > GetAsync(UserStudyRoomQuery query, CancellationToken token)
            {
                StudyRoom studyRoomAlias = null;
                //StudyRoomSession studyRoomSessionAlias = null;
                StudyRoomUser studyRoomUserAlias = null;
                User          userAlias          = null;

                UserStudyRoomDto resultAlias = null;


                //_session.Query<StudyRoomUser>()
                //    .Fetch(f=>f.Room)
                //    .ThenFetch(f=>f.Users)
                var detachedQuery = QueryOver.Of <StudyRoomUser>()
                                    .Where(w => w.User.Id == query.UserId)
                                    .Select(s => s.Room.Id);

                return(await _session.QueryOver(() => studyRoomAlias)
                       .JoinAlias(x => x.Users, () => studyRoomUserAlias)
                       .JoinEntityAlias(() => userAlias,
                                        () => userAlias.Id == studyRoomUserAlias.User.Id && userAlias.Id != query.UserId)
                       .WithSubquery.WhereProperty(x => x.Id).In(detachedQuery)
                       .SelectList(sl =>
                                   sl.Select(s => userAlias.Name).WithAlias(() => resultAlias.Name)
                                   .Select(s => userAlias.ImageName).WithAlias(() => resultAlias.Image)
                                   .Select(s => userAlias.Online).WithAlias(() => resultAlias.Online)
                                   .Select(s => userAlias.Id).WithAlias(() => resultAlias.UserId)
                                   .Select(s => s.Id).WithAlias(() => resultAlias.Id)
                                   .Select(s => s.DateTime.CreationTime).WithAlias(() => resultAlias.DateTime)
                                   .Select(s => s.Identifier).WithAlias(() => resultAlias.ConversationId)
                                   .Select(Projections.SqlFunction("coalesce", NHibernateUtil.DateTime,
                                                                   Projections.Property(() => studyRoomAlias.DateTime.UpdateTime),
                                                                   Projections.Property(() => studyRoomAlias.DateTime.CreationTime)))
                                   .WithAlias(() => resultAlias.LastSession)
                                   )
                       .OrderBy(Projections.SqlFunction("COALESCE", NHibernateUtil.Object,
                                                        Projections.Property(() => studyRoomAlias.DateTime.UpdateTime),
                                                        Projections.Property(() => studyRoomAlias.DateTime.CreationTime))).Desc
                       //TODO on nhibernate 5.3 need to fix.
                       .TransformUsing(Transformers.AliasToBean <UserStudyRoomDto>())
                       .ListAsync <UserStudyRoomDto>(token));/*.OrderByDescending(o => o.LastActive > o.DateTime ? o.LastActive : o.DateTime)*/
            }
Пример #5
0
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            if (_select == "StudyRoom")
            {
                gbSeatNumber.Enabled = false;
            }
            else
            {
                gbStudyRoomNumber.Enabled = false;
            }

            List <Seat> seats = Dao.Seat.GetAll();

            for (int i = 0; i < 24; i++)
            {
                if (seats[i].UserID != null)
                {
                    Seat seat = Dao.Seat.GetByUserID((int)(seats[i].UserID));

                    gbSeatNumber.Controls[int.Parse(seat.Name) - 1].Enabled = false;
                }
            }

            List <StudyRoom> studyRooms = Dao.StudyRoom.GetAll();

            for (int i = 0; i < 4; i++)
            {
                if (studyRooms[i].UserID != null)
                {
                    StudyRoom studyRoom = Dao.StudyRoom.GetByUserID((int)(studyRooms[i].UserID));

                    gbStudyRoomNumber.Controls[int.Parse(studyRoom.Name) - 1].Enabled = false;
                }
            }
        }
Пример #6
0
    public void UpgradeStudy()
    {
        StudyRoom study = PlayerRooms.GetStudyRoom();

        if (study.CanBeUpgraded())
        {
            int currentTier = PlayerRooms.GetStudyRoomTier();

            if (study.GetDevResourceQuantityAtTier(currentTier + 1).HasInInventory())
            {
                PlayerRooms.SetStudyRoomTier(currentTier + 1);
                study.GetDevResourceQuantityAtTier(currentTier + 1).SubtractFromInventory();
                ShopCanvas.TriggerRoomsInfoUpdate();
            }
            else
            {
                Debug.Log("Insufficient Resources:" + study.GetDevResourceQuantityAtTier(currentTier + 1));
            }
        }
        else
        {
            Debug.Log("Max Tier Reached: STUDY ");
        }
    }
Пример #7
0
 public static void SetStudyRoom(StudyRoom room)
 {
     studyRoom = room;
 }
Пример #8
0
 public StudyRoomCreatedEvent(StudyRoom studyRoom)
 {
     StudyRoom = studyRoom;
 }
Пример #9
0
        private void btnPayment_Click(object sender, EventArgs e)
        {
            Invoice invoice = new Invoice()
            {
                InvoiceDatetime = DateTime.Now,
                UserID          = Credential.Instance.User.UserID,
                InvoicePlace    = "1"
            };

            Dao.Invoice.Insert(invoice);

            int maxInvoiceKey = Dao.Invoice.GetMaxKey();

            if (_items.Count == 0)
            {
                MessageBox.Show("결제할 품목이 없습니다.");
            }

            else if (MessageBox.Show($"{int.Parse(txbTotalPrice.Text):c0}을 결제 하시겠습니까?", "YesOrNo", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                int totalPrice = 0;
                foreach (var itemNumber in _items)
                {
                    int userId = Credential.Instance.User.UserID;

                    if (itemNumber.Kind == "Seat")
                    {
                        int seatTime = Credential.Instance.User.RemainSeatTime += itemNumber.Time;
                        MessageBox.Show($"{Credential.Instance.User.RemainSeatTime}");
                        User user = Dao.User.GetByPK(userId);
                        user.RemainSeatTime = seatTime;
                        Dao.User.Update(user);
                        totalPrice += itemNumber.Price;
                    }

                    else if (itemNumber.Kind == "StudyRoom")
                    {
                        int strudyRoomTime = Credential.Instance.User.RemainStudyRoomTime += itemNumber.Time;
                        MessageBox.Show($"{Credential.Instance.User.RemainStudyRoomTime}");
                        User user = Dao.User.GetByPK(userId);
                        user.RemainStudyRoomTime = strudyRoomTime;
                        Dao.User.Update(user);
                        StudyRoom studyRoom = Dao.StudyRoom.GetByPK(int.Parse(_studyRoomNumber));
                        studyRoom.UserID = userId;
                        Dao.StudyRoom.Update(studyRoom);
                        totalPrice += itemNumber.Price;
                    }

                    else
                    {
                        if (_lockerNumber != null)
                        {
                            int lockerTime = Credential.Instance.User.RemainLockerTime += itemNumber.Time;
                            MessageBox.Show($"{Credential.Instance.User.RemainLockerTime}");

                            User user = Dao.User.GetByPK(userId);
                            user.RemainLockerTime = lockerTime;
                            Dao.User.Update(user);

                            Locker locker = Dao.Locker.GetByPK(int.Parse(_lockerNumber));
                            locker.UserID = userId;
                            Dao.Locker.Update(locker);
                            totalPrice += itemNumber.Price;
                        }

                        else
                        {
                            int lockerTime = Credential.Instance.User.RemainLockerTime += itemNumber.Time;
                            MessageBox.Show($"{Credential.Instance.User.RemainLockerTime}");

                            User user = Dao.User.GetByPK(userId);
                            user.RemainLockerTime = lockerTime;
                            Dao.User.Update(user);
                            totalPrice += itemNumber.Price;
                        }
                    }

                    InvoiceLine invoiceLine = new InvoiceLine()
                    {
                        InvoiceID    = maxInvoiceKey,
                        ItemID       = itemNumber.ItemID,
                        ItemPrice    = totalPrice,
                        NumberOfItem = 1
                    };

                    Dao.InvoiceLine.Insert(invoiceLine);

                    //InvoiceLine invoiceLine1 = Dao.InvoiceLine.GetByPK(maxInvoiceKey, itemNumber.ItemID);
                    //if (invoiceLine1.ItemID == itemNumber.ItemID && invoiceLine1.InvoiceID == maxInvoiceKey)
                    //{
                    //    invoiceLine.NumberOfItem += 1;
                    //    Dao.InvoiceLine.Update(invoiceLine);
                    //}

                    //else
                    //    Dao.InvoiceLine.Insert(invoiceLine);
                }
                dgvItem.Rows.Clear();
                _items.Clear();
                txbTotalPrice.Clear();
            }
        }
        //--------------------------------------------------------Constructor:----------------------------------------------------------------\\
        #region --Constructors--


        #endregion
        //--------------------------------------------------------Set-, Get- Methods:---------------------------------------------------------\\
        #region --Set-, Get- Methods--


        #endregion
        //--------------------------------------------------------Misc Methods:---------------------------------------------------------------\\
        #region --Misc Methods (Public)--
        public void UpdateView(StudyRoom room, DelegateCommand <object> command)
        {
            if (!(room is null))
            {
                MODEL.ATTRIBUTES.Replace(room.Attributes.Select(a =>
                {
                    MetadataItem item = new MetadataItem {
                        Label = a.Name
                    };
                    if (!string.IsNullOrEmpty(a.Details))
                    {
                        item.Command          = command;
                        item.CommandParameter = a;
                    }
                    return(item);
                }));
                if (room.Status == StudyRoomStatus.OCCUPIED || room.IsSoonOccupied())
                {
                    string occupiedInfo = "Occupied";
                    if (room.IsSoonOccupied())
                    {
                        if (room.BookedIn < 120 * 60)
                        {
                            occupiedInfo += $" in {room.BookedIn / 60} minutes";
                        }
                        else if (room.BookedIn / 3600 == 0)
                        {
                            occupiedInfo += $" in {room.BookedIn / 3600} hours";
                        }
                        else
                        {
                            occupiedInfo += $" in {room.BookedIn / 3600} hours and {room.BookedIn / 60 % 60} minutes";
                        }
                    }

                    if (room.BookedFor <= 60)
                    {
                    }
                    else if (room.BookedFor < 120 * 60)
                    {
                        occupiedInfo += $" for {room.BookedFor / 60} minutes";
                    }
                    else if (room.BookedFor / 3600 == 0)
                    {
                        occupiedInfo += $" for {room.BookedFor / 3600} hours";
                    }
                    else
                    {
                        occupiedInfo += $" for {room.BookedFor / 3600} hours and {room.BookedFor / 60 % 60} minutes";
                    }

                    if (room.BookedUntil == DateTime.MinValue)
                    {
                    }
                    else if (room.BookedUntil <= DateTime.Now)
                    {
                        occupiedInfo += $" until NOW";
                    }
                    else if (room.BookedUntil.Date == DateTime.Now.Date)
                    {
                        occupiedInfo += $" until {room.BookedUntil.ToString("HH:mm")}";
                    }
                    else
                    {
                        occupiedInfo += $" until {room.BookedUntil.ToString("d HH:mm")}";
                    }

                    if (string.IsNullOrEmpty(room.OccupiedBy))
                    {
                        occupiedInfo += '.';
                    }
                    else
                    {
                        occupiedInfo += $" by {room.OccupiedBy}.";
                    }
                    MODEL.OccupiedInfo = occupiedInfo;
                }
                else
                {
                    MODEL.OccupiedInfo = "";
                }
            }