Пример #1
0
        //--------------------------------- Finalize Order ------------------------------------------------//
        public async Task <ApiResponse <string> > FinalizeOrder(int orderId)
        {
            ApiResponse <string> result = new ApiResponse <string>();

            try
            {
                var orderToFetch = await unitOfWork.OrdersManager.GetAsync(o => o.Id == orderId, includeProperties : "OrderServices");

                var        order                = orderToFetch.FirstOrDefault();
                var        orderToFinalize      = new Order();
                var        orderToExcelExtract  = order;
                float      totalAmountToExtract = 0;
                var        SMS     = new SmsService(unitOfWork, config);
                SendSMSDTO sendSMS = new SendSMSDTO();
                sendSMS.CustomerNumber = order.CustomerMobile;
                sendSMS.orderId        = orderId;
                if (sendSMS.CustomerNumber != null)
                {
                    //      var SendSMS = await SMS.SendSMS(sendSMS);
                }

                if (order != null)
                {
                    CompleteOrder completeOrder = new CompleteOrder();

                    completeOrder.OrderServicesList = "";


                    orderToFinalize.OrderServices = order.OrderServices.Where(o => o.IsConfirmed == true).ToList(); // Filter confirmed services.

                    //Fetch customer and barber from order.
                    var customer = await unitOfWork.CustomersManager.GetByIdAsync(order.CustomerId);

                    var barberQueue = await unitOfWork.BarbersQueuesManager.GetByIdAsync(order.BarberQueueId);

                    var barber = await unitOfWork.BarbersManager.GetByIdAsync(barberQueue.BarberId);

                    //Create complete Order

                    completeOrder.OrderTotalAmount = 0;

                    for (int i = 0; i < orderToFinalize.OrderServices.Count; i++)
                    {
                        completeOrder.OrderTotalAmount += orderToFinalize.OrderServices[i].Price;
                    }

                    totalAmountToExtract = (float)completeOrder.OrderTotalAmount;

                    completeOrder.OrderTotalAmount = completeOrder.OrderTotalAmount - (completeOrder.OrderTotalAmount * (order.DiscountRate / 100));

                    completeOrder.BarberId        = barber.Id;
                    completeOrder.OrderDateTime   = order.OrderDate;
                    completeOrder.OrderFinishTime = order.FinishTime;
                    completeOrder.CustomerId      = customer.Id;
                    completeOrder.CustomerNameEN  = customer.Name;
                    completeOrder.CustomerNameAR  = customer.Name;
                    completeOrder.BarberNameAR    = barber.NameAR;
                    completeOrder.BarberNameEN    = barber.NameEN;
                    completeOrder.CustomerWaitingTimeInMinutes = order.WaitingTimeInMinutes;
                    completeOrder.Status         = "Finalized";
                    completeOrder.TotalTimeSpent = order.TotalServicesWaitingTime;


                    //Fill complete order services list

                    List <OrderService> orderServicesHistory = new List <OrderService>();
                    orderServicesHistory = orderToFinalize.OrderServices;

                    List <ServicesToRecord> GoogleSheetServiceList = new List <ServicesToRecord>();

                    for (int i = 0; i < order.OrderServices.Count; i++)
                    {
                        completeOrder.OrderServicesList = completeOrder.OrderServicesList + order.OrderServices[i].ServiceId + ",";
                    }

                    //construct the list of the excel
                    for (int i = 0; i < orderToExcelExtract.OrderServices.Count; i++)
                    {
                        ServicesToRecord GoogleSheetServiceItem = new ServicesToRecord();
                        GoogleSheetServiceItem.ServiceNameAR = orderToExcelExtract.OrderServices[i].NameAR;
                        GoogleSheetServiceItem.ServiceNameEN = orderToExcelExtract.OrderServices[i].NameEN;
                        GoogleSheetServiceItem.ServiceTime   = orderToExcelExtract.OrderServices[i].Time;
                        GoogleSheetServiceItem.ServicePrice  = orderToExcelExtract.OrderServices[i].Price;
                        GoogleSheetServiceItem.ServiceStatus = orderToExcelExtract.OrderServices[i].IsConfirmed;
                        GoogleSheetServiceList.Add(GoogleSheetServiceItem);
                    }

                    //Create complete order
                    var completeOrderCreationResult = await unitOfWork.CompleteOrdersManager.CreateAsync(completeOrder);

                    barber.NumberOfCustomersHandled++;                 // Increase barber # of customers handled counter

                    await unitOfWork.OrdersManager.RemoveAsync(order); // Remove order record.

                    await unitOfWork.SaveChangesAsync();

                    // Update upcoming orders

                    var queueResult = await unitOfWork.BarbersQueuesManager.GetAsync(q => q.Id == order.BarberQueueId, includeProperties : "Orders");

                    var queue = queueResult.FirstOrDefault();

                    for (int i = 0; i < queue.Orders.Count; i++)
                    {
                        if (i == 0)
                        {
                            queue.Orders[i].OrderDate  = DateTime.Now;
                            queue.Orders[i].FinishTime = queue.Orders[i].OrderDate.Value.AddMinutes(Convert.ToDouble(queue.Orders[i].TotalServicesWaitingTime));
                        }
                        else
                        {
                            queue.Orders[i].OrderDate  = queue.Orders[i - 1].FinishTime;
                            queue.Orders[i].FinishTime = queue.Orders[i].OrderDate.Value.AddMinutes(Convert.ToDouble(queue.Orders[i].TotalServicesWaitingTime));
                        }
                    }

                    await unitOfWork.SaveChangesAsync();



                    //Create order feedback
                    OrderFeedback orderFeedback = new OrderFeedback();
                    orderFeedback.IsSubmitted     = false;
                    orderFeedback.CompleteOrderId = completeOrderCreationResult.Id;

                    var orderFeedbackCreationResult = await unitOfWork.OrderFeedBacksManager.CreateAsync(orderFeedback);

                    await unitOfWork.SaveChangesAsync();



                    //Create Orderfeedback questions

                    for (int i = 0; i < orderServicesHistory.Count; i++)
                    {
                        var serviceFeedbackQuestionsResult = await unitOfWork.ServiceFeedBackQuestionsManager.GetAsync(s => s.ServiceId == orderServicesHistory[i].ServiceId);

                        var serviceFeedbackQuestionsList = serviceFeedbackQuestionsResult.ToList();
                        for (int j = 0; j < serviceFeedbackQuestionsList.Count; j++)
                        {
                            OrderFeedbackQuestion orderFeedbackQuestionToCreate = new OrderFeedbackQuestion();
                            orderFeedbackQuestionToCreate.OrderFeedbackId = orderFeedbackCreationResult.Id;
                            orderFeedbackQuestionToCreate.QuestionAR      = serviceFeedbackQuestionsList[j].QuestionAR;
                            orderFeedbackQuestionToCreate.QuestionEN      = serviceFeedbackQuestionsList[j].QuestionEN;
                            orderFeedbackQuestionToCreate.Rating          = 0;
                            var FeedbackQuestionCreationResult = await unitOfWork.OrderFeedBackQuestionsManager.CreateAsync(orderFeedbackQuestionToCreate);

                            await unitOfWork.SaveChangesAsync();
                        }
                    }

                    //gets the egypt time to get the final time
                    var            info            = TimeZoneInfo.FindSystemTimeZoneById("Egypt Standard Time");
                    DateTimeOffset localServerTime = DateTimeOffset.Now;
                    DateTimeOffset localTime       = TimeZoneInfo.ConvertTime(localServerTime, info);



                    //var googleSheetsRecordResult = await AddOrderToGoogleSheets(completeOrder);
                    OrderToRecord GoogleSheetOrder = new OrderToRecord();
                    GoogleSheetOrder.BarberNameAR     = completeOrder.BarberNameAR;
                    GoogleSheetOrder.BarberNameEN     = completeOrder.BarberNameEN;
                    GoogleSheetOrder.CustomerNameAR   = completeOrder.CustomerNameAR;
                    GoogleSheetOrder.CustomerNameEN   = completeOrder.CustomerNameEN;
                    GoogleSheetOrder.DiscountRate     = orderToExcelExtract.DiscountRate;
                    GoogleSheetOrder.OrderTotalAmount = totalAmountToExtract;
                    GoogleSheetOrder.OrderEndTime     = localTime.DateTime;
                    GoogleSheetOrder.OrderStartTime   = orderToExcelExtract.OrderDate;
                    GoogleSheetOrder.DiscountPrice    = totalAmountToExtract - completeOrder.OrderTotalAmount;

                    GoogleSheetOrder.Services = GoogleSheetServiceList;
                    AddOrderToGoogleSheets(GoogleSheetOrder); // Save order history in google spreadsheet
                    result.Succeeded = true;
                    result.Data      = "Finalized successfully";
                    return(result);
                }
                else
                {
                    result.Errors.Add("Failed to fetch order");
                    result.Succeeded = false;
                    return(result);
                }
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
                return(result);
            }
        }
Пример #2
0
 public async Task<IActionResult> SendSMSWithDLR(SendSMSDTO sendSMSDTO)
 {
     return await AddItemResponseHandler(async () => await service.SendSMSWithDLR(sendSMSDTO));
 }
Пример #3
0
        public async Task <ApiResponse <int> > SendSMSWithDLR(SendSMSDTO sendSMS)
        {
            ApiResponse <int> result = new ApiResponse <int>();

            try
            {
                var binding  = new BasicHttpBinding();                                                              //Communicate with asp.net web service
                var endpoint = new EndpointAddress(new Uri("http://smsvas.vlserv.com/KannelSending/service.asmx")); // to locate and find what api would like to call

                if (endpoint != null)                                                                               // check if no end point address with that link
                {
                    var channelFactory = new ServiceSoapClient(binding, endpoint);                                  // call servicesoapClient (you should find it with KannelSendingService / reference.cs)
                    if (channelFactory != null)
                    {
                        var GetMsg = await unitOfWork.SMSManager.GetAsync();

                        var SingleSMS = GetMsg.FirstOrDefault();
                        if (SingleSMS != null)
                        {
                            // call method you want with Parameters
                            var feedbackLink = "CustomeLink.com";
                            var SMSFullText  = SingleSMS.Body + " " + feedbackLink + "?orderId=" + sendSMS.orderId;

                            var serviceClient = await channelFactory.SendSMSWithDLRAsync("Topsalon", "999Bh0JkC9", SMSFullText, "e", "Top S Elite", sendSMS.CustomerNumber);

                            if (serviceClient != null)
                            {
                                result.Data      = serviceClient; //assign data with result
                                result.Succeeded = true;
                                return(result);
                            }
                            else
                            {
                                result.Succeeded = false;
                                result.Errors.Add("Can not Get Result of CheckCredit ");
                                return(result);
                            }
                        }
                        else
                        {
                            result.Succeeded = false;
                            result.Errors.Add("Can not Get Msg ");
                            return(result);
                        }
                    }
                    else
                    {
                        result.Succeeded = false;
                        result.Errors.Add("Can not bind Endpoint with http Binding ");
                        return(result);
                    }
                }
                else
                {
                    result.Succeeded = false;
                    result.Errors.Add("Can not Get End Point ");
                    return(result);
                }
            }
            catch (Exception ex)
            {
                result.Succeeded = false;
                result.Errors.Add(ex.Message);
                return(result);
            }
        }