//--------------------------------- 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); } }
public async Task<IActionResult> SendSMSWithDLR(SendSMSDTO sendSMSDTO) { return await AddItemResponseHandler(async () => await service.SendSMSWithDLR(sendSMSDTO)); }
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); } }