Example #1
0
        public IHttpActionResult AdminCompleteOrder(int id)
        {
            try
            {
                Order order    = orderService.GetOrder(id);
                User  traveler = order.Traveller;

                if (order != null)
                {
                    notificationService.CreateNotification(new Notification()
                    {
                        DateCreated = DateTime.UtcNow.AddHours(7),
                        IsActive    = true,
                        IsDelete    = false,
                        IsRead      = false,
                        Message     = "Bạn nhận được " + order.Total + " VNĐ từ đơn hàng hoàn tất",
                        Title       = "Hệ thống xác nhận đơn hàng hoàn tất",
                        UserId      = traveler.Id
                    });
                    notificationService.SaveNotification();
                    if (traveler.SignalConnect != null)
                    {
                        HubUtilities.GetHub().Clients.Client(traveler.SignalConnect).admincompleteorder(order.Total + " VNĐ", "1");
                    }
                }
            }
            catch (Exception)
            {
                return(Ok());
            }


            return(Ok());
        }
Example #2
0
        public IHttpActionResult CreateRating([FromBody] Rating request)
        {
            string username = Utilities.GetUserNameFromRequest(Request);

            if (username == null)
            {
                return(BadRequest("Access Denied"));
            }

            try
            {
                User user = userService.GetUsers().FirstOrDefault(u => u.UserName.Equals(username));
                if (user == null)
                {
                    return(Ok());
                }
                request.UserRateId  = user.Id;
                request.DateCreated = DateTime.Now;
                request.IsDelete    = false;
                ratingService.CreateRating(request);
                ratingService.SaveRating();

                IEnumerable <Rating> list = null;
                if (request.Type == (int)RateRole.Buyer)
                {
                    list            = ratingService.GetRatings().Where(r => r.UserRatedId.Equals(user.Id) && r.Type == (int)RateRole.Traveller);
                    user.BuyerScore = list.Average(r => r.Point);
                }
                else
                {
                    list = ratingService.GetRatings().Where(r => r.UserRatedId.Equals(user.Id) && r.Type == (int)RateRole.Buyer);
                    user.TravelerScore = list.Average(r => r.Point);
                }

                userService.UpdateUser(user);
                userService.SaveUser();
                string con = userService.GetUsers().FirstOrDefault(u => u.Id.Equals(request.UserRatedId))?.SignalConnect;
                if (con != null)
                {
                    Order order = orderService.GetOrder(request.OrderId);
                    notificationService.CreateNotification(new Notification
                    {
                        DateCreated = DateTime.UtcNow.AddHours(7),
                        IsRead      = false,
                        Message     = user.LastName + " đã cho bạn " + request.Point + " sao",
                        Title       = "Đơn hàng  " + order.Offer.Post.ProductName,
                        UserId      = request.UserRatedId
                    });
                    notificationService.SaveNotification();
                    HubUtilities.GetHub().Clients.Client(con).completeOrder(user.LastName + " đã cho bạn " + request.Point + " sao", order.Id);
                }
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.ToString()));
            }

            return(Ok());
        }
Example #3
0
        public IHttpActionResult BuyerMakeOffer(int tripId, int postId)
        {
            string username = Utilities.GetUserNameFromRequest(Request);

            if (username == null)
            {
                return(Unauthorized());
            }
            try
            {
                User user = userService.GetUsers().FirstOrDefault(u => u.UserName.Equals(username));
                Post post = postService.GetPost(postId);
                Trip trip = tripService.GetTrip(tripId);

                if (user == null || post == null || trip == null)
                {
                    return(BadRequest("Access Denied"));
                }

                Offer offer = new Offer()
                {
                    PostId       = postId,
                    DateCreated  = DateTime.UtcNow.AddHours(7),
                    IsActive     = true,
                    IsDelete     = false,
                    ShippingFee  = post.ShippingFee,
                    DeliveryDate = post.DeliveryDate,
                    TripId       = tripId,
                    TravellerId  = trip.UserId,
                    BuyerId      = post.UserId,
                    DateUpdated  = DateTime.UtcNow.AddHours(7),
                    Type         = (int)OfferType.BuyerOffer
                };
                offerService.CreateOffer(offer);
                offerService.SaveOffer();

                var con = userService.GetUsers().FirstOrDefault(u => u.Id.Equals(offer.TravellerId)).SignalConnect;
                if (con != null)
                {
                    notificationService.CreateNotification(new Notification
                    {
                        DateCreated = DateTime.UtcNow.AddHours(7),
                        IsRead      = false,
                        Message     = "Nhận được 1 đề nghị mới",
                        Title       = "Chuyến đi " + offer.Trip.FromCity.Name + ", " + offer.Trip.FromCity.Country.Name
                                      + offer.Trip.ToCity.Name + ", " + offer.Trip.ToCity.Country.Name,
                        UserId = offer.BuyerId
                    });
                    notificationService.SaveNotification();
                    HubUtilities.GetHub().Clients.Client(con).receivedOffer("Có 1 đề nghị mới cho chuyến đi ", tripId);
                }
            }
            catch (Exception)
            {
                return(BadRequest("Can't make offer"));
            }
            return(Ok());
        }
Example #4
0
        public IHttpActionResult UpdateOffer(OfferViewModel offerVM)
        {
            string username = Utilities.GetUserNameFromRequest(Request);

            if (username == null)
            {
                return(Unauthorized());
            }
            User user = userService.GetUsers().FirstOrDefault(u => u.UserName.Equals(username));

            if (user == null)
            {
                return(BadRequest("Access Denied"));
            }
            try
            {
                Offer offer = offerService.GetOffer(offerVM.OfferId);
                if (offer == null)
                {
                    return(BadRequest("Not found offer"));
                }
                offer.ShippingFee  = int.Parse(offerVM.ShippingFee);
                offer.DeliveryDate = DateTime.ParseExact(offerVM.DeliveryDate, "dd/MM/yyyy",
                                                         System.Globalization.CultureInfo.InvariantCulture);
                offer.Message     = offerVM.Message;
                offer.DateUpdated = DateTime.UtcNow.AddHours(7);
                offerService.UpdateOffer(offer);
                offerService.SaveOffer();
                offerVM.Id = offer.Id;

                var con = userService.GetUsers().FirstOrDefault(u => u.Id.Equals(offer.BuyerId)).SignalConnect;
                HubUtilities.GetHub().Clients.Client(con).receivedOffer("Nhận được 1 đề nghị mới " + offer.Post.ProductName, offerVM.PostId);
            }
            catch (Exception)
            {
                return(BadRequest("Can't make offer"));
            }

            return(Ok(offerVM));
        }
Example #5
0
        public void TestSingleSignalR()
        {
            var con = ApplicationUserManager.FindByEmail("*****@*****.**").SignalConnect;

            HubUtilities.GetHub().Clients.Client(con).helloFromServer("riêng mình mày đó");
        }
Example #6
0
        public IHttpActionResult CreateOrder(OfferViewModel offerViewModel)
        {
            try
            {
                string username = Utilities.GetUserNameFromRequest(Request);
                var    user     = userService.GetUsers().Where(u => u.UserName == username).FirstOrDefault();
                Post   post     = postService.GetPost(offerViewModel.PostId);
                Offer  offer    = offerService.GetOffer(offerViewModel.OfferId);
                if (post == null || offer == null)
                {
                    return(BadRequest("Not found data"));
                }

                CreatePostResponse response = new CreatePostResponse();
                if (offerViewModel.Deposit > 0)
                {
                    if (offerViewModel.Deposit > user.Current_Money)
                    {
                        response.Status_code = "E01";
                    }
                    else
                    {
                        transactionService.CreateTransaction(new Transaction()
                        {
                            DateCreated = DateTime.Now,
                            Description = "Nạp tiền vào đơn hàng " + post.ProductName,
                            IsSuccess   = true,
                            PostId      = post.Id,
                            Type        = Transaction.TypeTrans.PostIn,
                            IsDelete    = false,
                            Value       = offerViewModel.Deposit,
                            UserId      = user.Id,
                        });
                        user.Current_Money -= offerViewModel.Deposit;
                        post.Deposit       += offerViewModel.Deposit;
                        postService.UpdatePost(post);
                        userService.UpdateUser(user);
                        transactionService.SaveTransaction();
                    }
                }
                //update create
                Order order = new Order()
                {
                    IsActive     = true,
                    IsDelete     = false,
                    BuyerId      = user.Id,
                    TravellerId  = offerViewModel.TravelerId,
                    Total        = post.Price * post.Quantity + offer.ShippingFee,
                    ShippingFee  = offer.ShippingFee,
                    DateCreated  = DateTime.UtcNow.AddHours(7),
                    DeliveryDate = DateTime.UtcNow.AddHours(7),
                    DateUpdated  = DateTime.UtcNow.AddHours(7),
                    Status       = (int)OrderType.Transit,
                    OfferId      = offer.Id,
                };

                orderService.CreateOrder(order);
                orderService.SaveOrder();

                //update post
                post.Type = Post.PostType.Transit;
                //  post.Deposit = post.Deposit == null ? offerViewModel.Deposit : (offerViewModel.Deposit + post.Deposit);
                postService.UpdatePost(post);
                postService.SavePost();
                var traveler = userService.GetUsers().FirstOrDefault(t => t.Id.Equals(offerViewModel.TravelerId)).SignalConnect;
                if (traveler != null)
                {
                    notificationService.CreateNotification(new Notification
                    {
                        DateCreated = DateTime.UtcNow.AddHours(7),
                        IsRead      = false,
                        Message     = "Đề nghị cho đơn hàng " + post.ProductName + " đã được đồng ý",
                        Title       = "Chuyến đi " + order.TripId,
                        UserId      = offerViewModel.TravelerId
                    });
                    notificationService.SaveNotification();
                    HubUtilities.GetHub().Clients.Client(traveler).acceptOffer("Để nghị đã được đồng ý ", offerViewModel.OfferId);
                }
                //delete post on redis
                Utilities.DeleteonRedis(post, post.Id.ToString());
                response.Current_Money = user.Current_Money;
                return(Ok(response));
            }
            catch
            {
                return(BadRequest("Error"));
            }
        }
Example #7
0
        public IHttpActionResult CompleteOrder(PostViewModel model)
        {
            string username = Utilities.GetUserNameFromRequest(Request);

            if (String.IsNullOrEmpty(username))
            {
                return(Unauthorized());
            }
            CompleteOrderResponse response = new CompleteOrderResponse();

            try
            {
                var user = userService.GetUsers().Where(u => u.UserName.Equals(username)).FirstOrDefault();
                if (user == null)
                {
                    return(Unauthorized());
                }
                var    order      = orderService.GetOrders().Where(o => o.Offer.PostId == model.Id).FirstOrDefault();
                var    post       = order.Offer.Post;
                double amount     = order.Total - post.Deposit;
                bool   IsHasMoney = true;
                if (amount > 0) // nếu chưa thanh toán hết total => kiểm tra ví => tạo transaction => cập nhật post
                {
                    // 1. kiểm tra tiền trong ví
                    if (amount > user.Current_Money) // không đủ tiền
                    {
                        response.Status_code = "E01";
                        IsHasMoney           = false;
                    }
                    else // đủ tiền
                    {
                        // 2. tạo transaction
                        transactionService.CreateTransaction(new Transaction()
                        {
                            DateCreated = DateTime.Now,
                            IsActive    = true,
                            IsDelete    = false,
                            IsSuccess   = true,
                            Value       = order.Total - post.Deposit,
                            OrderId     = order.Id,
                            UserId      = user.Id,
                            PostId      = post.Id,
                            Type        = Transaction.TypeTrans.PostIn,
                            Description = "Hoàn tất đơn hàng " + order.Offer.Post.ProductName
                        });
                        user.Current_Money -= amount;
                        userService.UpdateUser(user);
                    }
                }
                // Chưa thanh toán hết:  đủ tiền => IsHasMoney = true / không đủ tiền => IsHasMoney = false
                // Đã thanh toán hết: IsHasMoney = true
                if (IsHasMoney)
                {
                    // cập nhật lại phần đã thanh toán. Complete => thanh toán hết
                    post.Deposit = order.Total;
                    post.Type    = Post.PostType.Completed;
                    postService.UpdatePost(post);

                    // cập nhật lại trạng thái order -> completed
                    order.Status      = (int)OrderType.WaitAdmin;
                    order.DateUpdated = DateTime.UtcNow.AddHours(7);
                    orderService.UpdateOrder(order);

                    //save to db
                    orderService.SaveOrder();

                    response.Status_code   = "E00";
                    response.Deposit       = post.Deposit;
                    response.OrderId       = order.Id;
                    response.Current_Money = user.Current_Money;

                    trackingOrderService.CreateTrackingOrder(new TrackingOrder()
                    {
                        Status   = (int)TrackingOrder.TrackingOrderType.Finished,
                        OrderId  = order.Id,
                        IsDelete = false,
                    });

                    trackingOrderService.SaveTrackingOrder();
                    // notify cho thằng traveler: buyer đã xác nhận
                    string con = order.Offer.Traveller.SignalConnect;
                    if (con != null)
                    {
                        notificationService.CreateNotification(new Notification
                        {
                            DateCreated = DateTime.UtcNow.AddHours(7),
                            IsRead      = false,
                            Message     = user.LastName + " đã xác nhận hoàn thành đơn hàng " + order.Offer.Post.ProductName,
                            Title       = "Chuyến đi " + order.TripId,
                            UserId      = order.Offer.TravellerId
                        });
                        notificationService.SaveNotification();
                        HubUtilities.GetHub().Clients.Client(con).completeOrder(user.LastName + " đã xác nhận hoàn thành đơn hàng " + order.Offer.Post.ProductName, order.Id);
                    }
                }
            }
            catch
            {
                return(BadRequest());
            }
            return(Ok(response));
        }
Example #8
0
 public void TestSR(string id)
 {
     HubUtilities.GetHub().Clients.All.receivedOffer("Nhận được 1 đề nghị mới", id);
     HubUtilities.GetHub().Clients.All.hello("connected");
 }
Example #9
0
        public IHttpActionResult UpdateTimeline(TrackingOrder model)
        {
            try
            {
                model.IsActive    = true;
                model.IsDelete    = false;
                model.DateCreated = DateTime.UtcNow.AddHours(7);
                trackingOrderService.CreateTrackingOrder(model);
                Order order = orderService.GetOrder(model.OrderId);
                if (order != null)
                {
                    User buyer = order.Buyer;
                    if (buyer != null)
                    {
                        if (model.Status == (int)TrackingOrderType.Cancel)
                        {
                            buyer.Current_Money += order.Offer.Post.Deposit;
                            Post post = order.Offer.Post;
                            transactionService.CreateTransaction(new Transaction()
                            {
                                PostId      = post.Id,
                                IsActive    = true,
                                IsDelete    = false,
                                IsSuccess   = true,
                                UserId      = buyer.Id,
                                DateCreated = DateTime.UtcNow.AddHours(7),
                                Value       = post.Deposit,
                                Type        = Transaction.TypeTrans.PostOut,
                            });
                            post.Deposit = 0;
                            userService.UpdateUser(buyer);
                            postService.UpdatePost(post);
                        }
                    }
                    if (buyer.SignalConnect != null)
                    {
                        string status = "Đang ở ";
                        switch (model.Status)
                        {
                        case (int)TrackingOrderType.Started:
                            status = "Đang ở " + model.Description;
                            break;

                        case (int)TrackingOrderType.Arrived:
                            status = "Đã mua được hàng";
                            break;

                        case (int)TrackingOrderType.Buyed:
                            status = "Có thể giao hàng";
                            break;

                        case (int)TrackingOrderType.CameBack:
                            status = "Không thể mua hàng";
                            break;

                        case (int)TrackingOrderType.CanShipping:
                            status = "Đơn hàng đã bị hủy";
                            break;

                        case (int)TrackingOrderType.Finished:
                            status = "Giao hàng thành công";
                            break;
                        }


                        notificationService.CreateNotification(new Notification()
                        {
                            DateCreated = DateTime.UtcNow.AddHours(7),
                            IsActive    = true,
                            IsDelete    = false,
                            IsRead      = true,
                            Message     = status,
                            Title       = "Đơn hàng " + order.Id,
                            UserId      = buyer.Id
                        });
                        notificationService.SaveNotification();
                        HubUtilities.GetHub().Clients.Client(buyer.SignalConnect).newTimeline(status, order.Id);
                    }
                }

                trackingOrderService.SaveTrackingOrder();
                TrackingOrderViewModel tracking = new TrackingOrderViewModel()
                {
                    DateCreated = model.DateCreated.GetValueOrDefault().ToString("HH:mm dd/MM/yyyy"),
                    Status      = model.Status,
                    Longitude   = model.Longitude,
                    Latitude    = model.Latitude,
                    OrderId     = model.OrderId,
                    Description = model.Description
                };
                return(Ok(tracking));
            }
            catch (Exception ex)
            {
                return(BadRequest(ex.ToString()));
            }
        }
Example #10
0
        public IHttpActionResult MakeOffer(OfferViewModel offerVM)
        {
            string username = Utilities.GetUserNameFromRequest(Request);

            if (username == null)
            {
                return(Unauthorized());
            }
            User user = userService.GetUsers().FirstOrDefault(u => u.UserName.Equals(username));

            if (user == null)
            {
                return(BadRequest("Access Denied"));
            }
            try
            {
                Offer offer = new Offer()
                {
                    PostId       = offerVM.PostId,
                    DateCreated  = DateTime.UtcNow.AddHours(7),
                    IsActive     = true,
                    IsDelete     = false,
                    ShippingFee  = int.Parse(offerVM.ShippingFee),
                    DeliveryDate = DateTime.ParseExact(offerVM.DeliveryDate, "dd/MM/yyyy",
                                                       System.Globalization.CultureInfo.InvariantCulture),
                    TripId      = offerVM.TripId,
                    TravellerId = user.Id,
                    BuyerId     = postService.GetPost(offerVM.PostId)?.UserId,
                    DateUpdated = DateTime.UtcNow.AddHours(7),
                    Message     = offerVM.Message,
                    Type        = (int)OfferType.TravelerOffer
                };
                offerService.CreateOffer(offer);
                offerService.SaveOffer();
                offerVM.Id = offer.Id;

                var con = userService.GetUsers().FirstOrDefault(u => u.Id.Equals(offer.BuyerId))?.SignalConnect;
                if (con != null)
                {
                    notificationService.CreateNotification(new Notification
                    {
                        DateCreated = DateTime.UtcNow.AddHours(7),
                        IsRead      = false,
                        Message     = "Nhận được 1 đề nghị mới",
                        Title       = "Đơn hàng " + offer.Post.ProductName,
                        UserId      = offer.BuyerId
                    });
                    notificationService.SaveNotification();
                    HubUtilities.GetHub().Clients.Client(con).receivedOffer("Nhận được 1 đề nghị mới", offerVM.PostId);
                }
                //update post on redis
                var post = postService.GetPost(offerVM.PostId);
                Utilities.updatePostRedis(post, true);
            }
            catch (Exception)
            {
                return(BadRequest("Can't make offer"));
            }

            return(Ok(offerVM));
        }