Example #1
0
        public async Task <ApiResponse <string> > RemoveOrder(int orderId, int customerId)
        {
            //Cancel Order: set order status to cancelled, pop order from corresponding queue.

            ApiResponse <string> result = new ApiResponse <string>();

            try
            {
                var order = await unitOfWork.OrdersManager.GetAsync(b => b.Id == orderId, 0, 0, null, includeProperties : "OrderServices");

                Order OrderToUpdate = order.FirstOrDefault();
                if (OrderToUpdate != null)
                {
                    var barberQueue = await unitOfWork.BarbersQueuesManager.GetAsync(b => b.Id == OrderToUpdate.BarberQueueId, 0, 0, null, includeProperties : "Orders");

                    if (barberQueue != null)
                    {
                        BarberQueue QueueToUpdate = barberQueue.FirstOrDefault();
                        for (int i = 0; i < QueueToUpdate.Orders.Count; i++)
                        {
                            if (QueueToUpdate.Orders[i].Id == orderId)
                            {
                                QueueToUpdate.Orders.Remove(QueueToUpdate.Orders[i]);
                            }
                        }
                        if (QueueToUpdate.Orders.Count == 0)
                        {
                            QueueToUpdate.QueueStatus      = "idle";
                            QueueToUpdate.QueueWaitingTime = 0;
                        }

                        var queueUpdateRes = await unitOfWork.BarbersQueuesManager.UpdateAsync(QueueToUpdate);

                        if (queueUpdateRes)
                        {
                            var queueAdjustmentRes = await SetQueueWaitingTimes();

                            await unitOfWork.SaveChangesAsync();

                            if (queueAdjustmentRes.Succeeded)
                            {
                                result.Data      = "Order cancelled successfully.";
                                result.Succeeded = true;
                                return(result);
                            }
                            else
                            {
                                result.Errors.Add("Error adjusting queue times");
                                result.Succeeded = false;
                                return(result);
                            }
                        }
                        else
                        {
                            result.Errors.Add("Error updating barber queue !");
                            result.Succeeded = false;
                            return(result);
                        }
                    }
                    else
                    {
                        result.Data = "Error";
                        result.Errors.Add("Failed to fetch barber Queue !");
                        return(result);
                    }
                }
                else
                {
                    result.Data = "Error.";
                    result.Errors.Add("Error fetching customer details !");
                    result.Succeeded = false;
                    return(result);
                }
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
                return(result);
            }
        }
        public async Task <ApiResponse <BarberDTO> > CreateBarber(CreateBarberDTO model)
        {
            ApiResponse <BarberDTO> result = new ApiResponse <BarberDTO>();

            try
            {
                var barberPrintResult = await unitOfWork.BarbersManager.GetAsync(a => a.BarberFingerPrintId == model.BarberFingerprintId);

                var barber = barberPrintResult.FirstOrDefault();

                if (barber == null)
                {
                    var shops = await unitOfWork.ShopsManager.GetAsync();

                    Shop   shop        = shops.FirstOrDefault();
                    Barber barberToAdd = new Barber();
                    barberToAdd.NameAR = model.NameAR;
                    barberToAdd.NameEN = model.NameEN;
                    barberToAdd.ShopId = shop.Id;
                    barberToAdd.NumberOfCustomersHandled = 0;
                    barberToAdd.BarberFingerPrintId      = model.BarberFingerprintId;
                    barberToAdd.Status = "Unavailable";
                    var barberResult = await unitOfWork.BarbersManager.CreateAsync(barberToAdd);

                    await unitOfWork.SaveChangesAsync();

                    if (barberResult != null)
                    {
                        BarberProfilePhoto barberProfilePhoto = new BarberProfilePhoto();
                        barberProfilePhoto.BarberId  = barberResult.Id;
                        barberProfilePhoto.AdminPath = model.BarberProfilePhotoPathAdmin;
                        barberProfilePhoto.UserPath  = model.BarberProfilePhotoPathUser;

                        var barberProfilePhotoResult = await unitOfWork.BarberProfilePhotosManager.CreateAsync(barberProfilePhoto);

                        await unitOfWork.SaveChangesAsync();

                        if (barberProfilePhotoResult != null)
                        {
                            BarberQueue barberQueue = new BarberQueue();

                            barberQueue.BarberId = barberResult.Id;

                            barberQueue.QueueStatus = "idle";

                            barberQueue.QueueWaitingTime = 0;

                            var barberQueueResult = await unitOfWork.BarbersQueuesManager.CreateAsync(barberQueue);

                            await unitOfWork.SaveChangesAsync();

                            if (barberQueueResult != null)
                            {
                                var barbers = await unitOfWork.BarbersManager.GetAsync(b => b.Id == barberResult.Id, includeProperties : "BarberQueue,BarberProfilePhoto");

                                Barber barberToReturn = barbers.FirstOrDefault();

                                if (barberToReturn != null)
                                {
                                    result.Succeeded = true;
                                    result.Data      = mapper.Map <BarberDTO>(barberToReturn);
                                    result.Errors.Add("Failed to create barber !");
                                    return(result);
                                }
                                else
                                {
                                    result.Succeeded = false;
                                    result.Errors.Add("Error creating barber !");
                                    return(result);
                                }
                            }
                            else
                            {
                                result.Succeeded = false;
                                result.Errors.Add("Error creating barber queue !");
                                return(result);
                            }
                        }
                        else
                        {
                            result.Succeeded = false;
                            result.Errors.Add("Failed to create barber profile photo !");
                            return(result);
                        }
                    }
                    else
                    {
                        result.Succeeded = false;
                        result.Errors.Add("A barber already exists with the specified finger print id !");
                        return(result);
                    }
                }
                else
                {
                    result.Succeeded = false;
                    result.Errors.Add("Failed to create barber !");
                    return(result);
                }
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
                return(result);
            }
        }