public void UpdateOrderDetails(OrderDetailsView orderDetails) { try { using (Entities context = new Entities()) { var ordert = context.Set <OrdersTbl>().Find(orderDetails.OrderNumber); //ניתן לשנות הזמנה בסטטוס חדש בלבד if (ordert.OrderStatus != 11) { throw new Exception("לא ניתן לשנות את ההזמנה. אנא פנה למנהל הכלביה"); } context.Entry(ordert).CurrentValues.SetValues(orderDetails); context.SaveChanges(); if (orderDetails.UserEmail != string.Empty) { //שליחת מייל למשתמש SendMailService sendMailService = new SendMailService(); SendMailRequest mailRequest = new SendMailRequest(); mailRequest.recipient = orderDetails.UserEmail; mailRequest.subject = "מצב הזמנה - " + orderDetails.OrderNumber + "מקום טוב- יוסף טוויטו"; } } } catch (SqlException ex) { throw ex; } finally { } }
//public decimal CalculateOrderPrice() //{ // OrderDetailsView order = new OrderDetailsView(); // order.mDogs = new List<DogsInOrderView>(); // order.mDogs.Add(new DogsInOrderView()); // order.mDogs.Add(new DogsInOrderView()); // order.mDogs[0].FromDate = new DateTime(2018, 1, 1); // order.mDogs[0].ToDate = new DateTime(2018, 1, 15); // order.mDogs[1].FromDate = new DateTime(2018, 1, 20); // order.mDogs[1].ToDate = new DateTime(2018, 2, 20); // Entities context = new Entities(); // Decimal price = 0; // var prices = context.PricesTbl // .OrderBy(p => p.Days).Select(np => new PricesView // { // Days = np.Days, // Dogs = np.Dogs, // Price = np.Price // }); // int days = 0; // if ((order.mDogs.Count == 2 && order.mDogs[0].FromDate == order.mDogs[1].FromDate && order.mDogs[0].ToDate == order.mDogs[1].ToDate) || order.mDogs.Count == 1) // { // days = order.mDogs[0].ToDate.Subtract(order.mDogs[0].FromDate).Days; // if (order.mDogs[0].ShiftNumberTo == 2) // days++; // List<PricesView> p = prices.Where(o => o.Dogs == order.mDogs.Count).ToList(); // price = Calculte(days, p); // } // //לטפל ב 2 כלבים עם תאריכים שונים // else // { // DateTime dateTimeFrom, dateTimeTo; // if (order.mDogs[0].FromDate.CompareTo(order.mDogs[1].FromDate) < 0) // { // dateTimeFrom = order.mDogs[0].FromDate; // } // else // { // dateTimeFrom = order.mDogs[1].FromDate; // } // if (order.mDogs[0].ToDate.CompareTo(order.mDogs[1].ToDate) < 0) // { // dateTimeTo = order.mDogs[1].ToDate; // } // else //{ // dateTimeTo = order.mDogs[0].ToDate; //} //days = dateTimeTo.Subtract(dateTimeFrom).Days; //if (order.mDogs[0].ShiftNumberTo == 2) // days++; //int[] arr = new int[days]; //for (int i = 0; i < arr.Length; i++) //{ // arr[i] = -1; //} //DateTime date = order.mDogs[0].ToDate; ////טיפול בהחזרה במשמרת בוקר- לא מחשיבים את היום לתשלום //if (order.mDogs[0].ShiftNumberTo == 1) // date.AddDays(-1); //changeArr(arr, order.mDogs[0].FromDate, date, dateTimeFrom); //if (order.mDogs[1].ShiftNumberTo == 1) // date.AddDays(-1); //changeArr(arr, order.mDogs[1].FromDate, date, dateTimeFrom); //int dogs2 = 0; //for (int i = 0; i < arr.Length; i++) //{ // dogs2 += arr[i]; //} //List<PricesView> p; //if (dogs2 > 0) //פתרון הבעיה שיש בהזמנה 2 כלבים אבל התאריכים לא חופפים ולכן יש בעצם פעמיים כלב 1 //{ // //חישוב מספר הימים ל 2 כלבים // p = prices.Where(o => o.Dogs == 2).ToList(); // price += Calculte(dogs2, p); //} //else // dogs2 *= -1; //int dogs1 = arr.Length - dogs2; ////חישוב מספר הימים לכלב 1 //p = prices.Where(o => o.Dogs == 1).ToList(); //price = Calculte(dogs1, p); //} //return price; //} //private void changeArr(int[] arr, DateTime min, DateTime max, DateTime first) //{ // int i = 0; // for (DateTime d = min; d <= max; d = d.AddDays(1)) // { // i = d.Subtract(first).Days; // arr[i]++; // } //} //חישוב ההזמנה // public decimal CalculateOrderPrice(OrderDetailsView order) public decimal CalculateOrderPrice(OrderDetailsView order) { // חישוב ההזמנה ללא הזמנות אחרות חופפות //OrderDetailsView order = new OrderDetailsView(); //order.mDogs = new List<DogsInOrderView>(); //order.mDogs.Add(new DogsInOrderView()); //order.mDogs.Add(new DogsInOrderView()); //order.mDogs[0].FromDate = new DateTime(2018, 1, 1); //order.mDogs[0].ToDate = new DateTime(2018, 1, 15); //order.mDogs[1].FromDate = new DateTime(2018, 1, 20); //order.mDogs[1].ToDate = new DateTime(2018, 2, 20); Entities context = new Entities(); Decimal price = 0; var prices = context.PricesTbl .OrderBy(px => px.Days).Select(np => new PricesView { Days = np.Days, Dogs = np.Dogs, Price = np.Price }); int days = 0; // if ((order.mDogs.Count == 2 && order.mDogs[0].FromDate == order.mDogs[1].FromDate && order.mDogs[0].ToDate == order.mDogs[1].ToDate) || order.mDogs.Count == 1) //if ((order.mDogs.Count == 2 || order.mDogs.Count == 1) //{ days = order.ToDate.Subtract(order.FromDate).Days; if (order.ShiftNumberTo == 2) //אם לוקח את הכלבים בערב - מחושב יום נוסף בתשלום { days++; } List <PricesView> p = prices.Where(o => o.Dogs == order.mDogs.Count).ToList(); price = Calculte(days, p); //} return(price); }
public decimal CalculateOrderPriceParallel(OrderDetailsView order, List <OrderDetailsView> orderDetailsViewDBList) {// חישוב עבור הזמנות חופפות int days = 0; decimal price = 0; days = order.ToDate.Subtract(order.FromDate).Days; if (order.ShiftNumberTo == 2) //אם לוקח את הכלבים בערב - מחושב יום נוסף בתשלום { days++; } int orderShift = order.ShiftNumberTo - 1; int[] arr = new int[days]; for (int i = 0; i < arr.Length; i++) { arr[i] = 1; } int dbshift; for (int i = 0; i < orderDetailsViewDBList.Count; i++) { dbshift = orderDetailsViewDBList[i].ShiftNumberTo - 1; if (orderDetailsViewDBList[i].FromDate.CompareTo(order.FromDate) >= 0 && orderDetailsViewDBList[i].FromDate.CompareTo(order.ToDate.AddDays(orderShift)) <= 0 && orderDetailsViewDBList[i].ToDate.AddDays(dbshift).CompareTo(order.FromDate) >= 0 && orderDetailsViewDBList[i].ToDate.AddDays(dbshift).CompareTo(order.ToDate.AddDays(orderShift)) <= 0) // תאריך תחילת ההזמנה בבסיס הנתונים נופל בתוך תאריך ההזמנה החדשה { changeArr(arr, orderDetailsViewDBList[i].FromDate, orderDetailsViewDBList[i].ToDate.AddDays(dbshift), order.FromDate, orderDetailsViewDBList[i].mDogs.Count); } else if (order.FromDate.CompareTo(orderDetailsViewDBList[i].FromDate) >= 0 && order.FromDate.CompareTo(orderDetailsViewDBList[i].ToDate.AddDays(dbshift)) <= 0 && order.ToDate.AddDays(orderShift).CompareTo(orderDetailsViewDBList[i].FromDate) >= 0 && order.ToDate.AddDays(orderShift).CompareTo(orderDetailsViewDBList[i].ToDate.AddDays(dbshift)) <= 0) { changeArr(arr, order.FromDate, order.ToDate.AddDays(orderShift), order.FromDate, orderDetailsViewDBList[i].mDogs.Count); } else if (orderDetailsViewDBList[i].FromDate.CompareTo(order.FromDate) >= 0 && orderDetailsViewDBList[i].FromDate.CompareTo(order.ToDate.AddDays(orderShift)) <= 0) { changeArr(arr, orderDetailsViewDBList[i].FromDate, order.ToDate.AddDays(orderShift), order.FromDate, orderDetailsViewDBList[i].mDogs.Count); } else if (orderDetailsViewDBList[i].ToDate.AddDays(dbshift).CompareTo(order.FromDate) >= 0 && orderDetailsViewDBList[i].ToDate.AddDays(dbshift).CompareTo(order.ToDate.AddDays(orderShift)) <= 0) { changeArr(arr, order.FromDate, orderDetailsViewDBList[i].ToDate.AddDays(dbshift), order.FromDate, orderDetailsViewDBList[i].mDogs.Count); } } for (int i = 0; i < arr.Length; i++) { if (arr[i] > 2) { return(-997); //הזמנה נוכחית + קודמות- יותר מ 2 כלבים } } int dog1 = 0; for (int i = 0; i < arr.Length; i++) { if (arr[i] == 1) { dog1++; } } Entities context = new Entities(); var prices = context.PricesTbl .OrderBy(px => px.Days).Select(np => new PricesView { Days = np.Days, Dogs = np.Dogs, Price = np.Price }); List <PricesView> p = prices.Where(o => o.Dogs == 1).ToList(); price += Calculte(dog1, p); p = prices.Where(o => o.Dogs == 2).ToList(); for (int i = 0; i < p.Count(); i++) { p[i].Price = p[i].Price / 2; } price += Calculte(arr.Length - dog1, p); return(price); //DateTime dateTimeFrom, dateTimeTo; //if (order.mDogs[0].FromDate.CompareTo(order.mDogs[1].FromDate) < 0) //{ // dateTimeFrom = order.mDogs[0].FromDate; //} //else //{ // dateTimeFrom = order.mDogs[1].FromDate; //} //if (order.mDogs[0].ToDate.CompareTo(order.mDogs[1].ToDate) < 0) //{ // dateTimeTo = order.mDogs[1].ToDate; //} //else //{ // dateTimeTo = order.mDogs[0].ToDate; //} // days = dateTimeTo.Subtract(dateTimeFrom).Days; //if (order.mDogs[0].ShiftNumberTo == 2) // days++; //DateTime date = order.mDogs[0].ToDate; //טיפול בהחזרה במשמרת בוקר- לא מחשיבים את היום לתשלום //if (order.mDogs[0].ShiftNumberTo == 1) // date.AddDays(-1); //changeArr(arr, order.mDogs[0].FromDate, date, dateTimeFrom); //if (order.mDogs[1].ShiftNumberTo == 1) // date.AddDays(-1); //changeArr(arr, order.mDogs[1].FromDate, date, dateTimeFrom); //int dogs2 = 0; //for (int i = 0; i < arr.Length; i++) //{ // dogs2 += arr[i]; //} //if (dogs2 > 0) //פתרון הבעיה שיש בהזמנה 2 כלבים אבל התאריכים לא חופפים ולכן יש בעצם פעמיים כלב 1 //{ // //חישוב מספר הימים ל 2 כלבים // p = prices.Where(o => o.Dogs == 2).ToList(); // price += Calculte(dogs2, p); //} //else // dogs2 *= -1; //int dogs1 = arr.Length - dogs2; ////חישוב מספר הימים לכלב 1 //p = prices.Where(o => o.Dogs == 1).ToList(); //price = Calculte(dogs1, p); }
private decimal checkForAnotherParallelOrder(OrderDetailsView orderDetailsView) //private List<OrderDetailsView> checkForAnotherParallelOrder(OrderDetailsView orderDetailsView) { decimal result = 1; //orderDetailsView.FromDate = new DateTime(2018, 1, 20); //orderDetailsView.ToDate = new DateTime(2018, 2, 20); List <OrderDetailsView> list = new List <OrderDetailsView>(); try { using (Entities context = new Entities()) { //List<OrdersTbl> orders = context.OrdersTbl.Where(p => p.OrderUserId == orderDetailsView.Userid && (p.OrderStatus==12 || p.OrderStatus==11 || p.OrderStatus==15) // &&( (orderDetailsView.FromDate >= p.FromDate && orderDetailsView.FromDate <= p.ToDate) // || (orderDetailsView.ToDate >= p.FromDate && orderDetailsView.ToDate <= p.ToDate) // || (orderDetailsView.FromDate <= p.FromDate && orderDetailsView.ToDate > p.ToDate) // ) // ).ToList(); List <OrdersTbl> orders = context.OrdersTbl.Where(p => p.OrderUserId == orderDetailsView.Userid && (p.OrderStatus == 12 || p.OrderStatus == 11 || p.OrderStatus == 15) && ((p.FromDate >= orderDetailsView.FromDate && p.ToDate <= orderDetailsView.FromDate) || (p.ToDate >= orderDetailsView.FromDate && p.ToDate <= orderDetailsView.ToDate) || (p.FromDate <= orderDetailsView.FromDate && p.ToDate > orderDetailsView.ToDate) ) ).ToList(); if (orders.Count > 0) //יש הזמנות חופפות { OrderDetailsView orderDetailsViewDB = new OrderDetailsView(); foreach (var order in orders) { orderDetailsViewDB.mDogs = GetDogsForOrder(order.OrderNumber); //שליפת כלבים בהזמנה החופפת List <int> nums = new List <int>(); foreach (DogsInOrderView d in orderDetailsViewDB.mDogs) { nums.Add(d.DogNumber); } foreach (DogsInOrderView dog in orderDetailsView.mDogs) { var found = nums.Where(d => d == dog.DogNumber); //בדיקה אם יש כלב משותף בהזמנה הנוכחית ןבהזמנות קודמות if (found.Count() > 0) // אם כן מחזיר שגיאה { return(-997); } } //orderDetailsViewDB.FromDate = (DateTime)order.FromDate; //orderDetailsViewDB.OrderNumber = order.OrderNumber; //orderDetailsViewDB.ShiftNumberFrom = (int)order.ShiftNumberFrom; //orderDetailsViewDB.ShiftNumberTo = (int)order.ShiftNumberTo; //orderDetailsViewDB.ToDate = (DateTime)order.ToDate; //list.Add(orderDetailsViewDB); } // result = CalculateOrderPriceParallel(orderDetailsView, list); } //if (orderDetailsView.mDogs.Count > 2) // return -999; // מספר כלבים בהזמנה > 2 . result = CalculateOrderPrice(orderDetailsView); //חישוב רגיל } ; //נמצאה בבסיס הנתונים הזמנה חופפת עם כלבים אחרים return(result); } catch (Exception ex) { throw ex; } //return list; }
//שליפת כל ההזמנות של כל המשתמשים private List <OrderDetailsView> GetOrdersFromDB() { List <OrderDetailsViewManager> orderslistManager = context.OrdersTbl. Join(context.OrderTypes, o => o.OrderType, ot => ot.OrderTypeId, (o, ot) => new { o.OrderNumber, OrderDate = o.OrderCreateDate, Price = (decimal)o.Price, o.OrderconfirmationNumber, o.OrderStatus, Userid = o.UsersTbl.UserID, OrderType = ot.OrderTypeId, o.ShiftNumberFrom, o.ShiftNumberTo, o.FromDate, o.ToDate, ot.OrderTypeName, o.ManagerComments, o.discount }).Join(context.StatusTbl, a => a.OrderStatus, s => s.StatusId, (a, s) => new { a.OrderNumber, a.OrderDate, Price = (decimal)a.Price, a.OrderconfirmationNumber, a.OrderStatus, a.Userid, OrderStatusName = s.StatusName, a.ShiftNumberFrom, a.ShiftNumberTo, a.FromDate, a.ToDate, a.OrderType, a.OrderTypeName, a.ManagerComments, a.discount }).Join(context.UsersTbl, o => o.Userid, u => u.UserID, (o, u) => new OrderDetailsViewManager { UserEmail = u.UserEmail, OrderNumber = o.OrderNumber, OrderDate = o.OrderDate, Price = (decimal)o.Price, OrderconfirmationNumber = o.OrderconfirmationNumber, OrderStatus = o.OrderStatus, Userid = o.Userid, userFirstName = u.UserFirstName, userLastName = u.UserLastName, OrderStatusName = o.OrderStatusName, FromDate = (DateTime)o.FromDate, ToDate = (DateTime)o.ToDate, ShiftNumberFrom = (int)o.ShiftNumberFrom, ShiftNumberTo = (int)o.ShiftNumberTo, OrderType = o.OrderType, OrderTypeName = o.OrderTypeName, ManagerComments = o.ManagerComments, Discount = (decimal)o.discount } ).Distinct() .ToList(); List <OrderDetailsView> orderslist = new List <OrderDetailsView>(); for (int i = 0; i < orderslistManager.Count; i++) { OrderDetailsView detailsView = orderslistManager[i]; orderslist.Add(detailsView); } return(orderslist); }
//הכנסת הזמנה public int createOrder(OrderDetailsView orderDetailsView) // public int CreateOrder() { //Userservice userservice = new Userservice(); //OrderDetailsView orderDetailsView = new OrderDetailsView(); //orderDetailsView.Userid = 1; //orderDetailsView.FromDate = new DateTime(2018, 11, 01); //orderDetailsView.ToDate = new DateTime(2018, 11, 30); //orderDetailsView.ShiftNumberFrom = 1; //orderDetailsView.ShiftNumberTo = 2; //orderDetailsView.User = new UserDetailsView(); //orderDetailsView.User.UserEmail = "*****@*****.**"; //orderDetailsView.userFirstName = "איריס"; //orderDetailsView.userLastName = "זרצקי"; //orderDetailsView.mDogs = new List<DogsInOrderView>(); //orderDetailsView.mDogs.Add(new DogsInOrderView()); //orderDetailsView.mDogs.Add(new DogsInOrderView()); //orderDetailsView.mDogs[0].DogNumber = 4; //orderDetailsView.mDogs[0].Training = true; //orderDetailsView.mDogs[1].DogNumber = 3; OrdersTbl ordersTbl = new OrdersTbl(); //if(orderDetailsView.mDogs.Count==2) // ordersTbl.Price = CalculateOrderPrice(orderDetailsView); decimal result = checkForAnotherParallelOrder(orderDetailsView); //אין הזמנות חופפות לאותם כלבים if (result >= 0) { ordersTbl.OrderStatus = 11; ordersTbl.OrderUserId = orderDetailsView.Userid; ordersTbl.OrderType = 1; ordersTbl.FromDate = orderDetailsView.FromDate; ordersTbl.ShiftNumberFrom = orderDetailsView.ShiftNumberFrom; ordersTbl.ToDate = orderDetailsView.ToDate; ordersTbl.ShiftNumberTo = orderDetailsView.ShiftNumberTo; ordersTbl.OrderCreateDate = DateTime.Now; if (orderDetailsView.mDogs.Count > 2) { ordersTbl.Price = -999; //יותר מ 2 כלבים. מחיר ינתן בתיאום עם יוסף } else { if (orderDetailsView.Price == 0) { ordersTbl.Price = result; } } if (orderDetailsView.Discount > 0) { ordersTbl.discount = orderDetailsView.Discount; } else { ordersTbl.discount = 0; } // List<OrderDetailsView> list = checkForAnotherParallelOrder(orderDetailsView); for (int i = 0; i < orderDetailsView.mDogs.Count; i++) { //if (orderDetailsView.mDogs[i].Training) //{ DogsInOrder dogsInOrder = new DogsInOrder(); dogsInOrder.DogTraining = orderDetailsView.mDogs[i].DogTraining; dogsInOrder.DogNumber = orderDetailsView.mDogs[i].DogNumber; dogsInOrder.HomeFood = orderDetailsView.mDogs[i].HomeFood; dogsInOrder.Status = 21; //פעיל בהזמנה, אם יבוטל ישתנה הקוד ל 23 ordersTbl.DogsInOrder.Add(dogsInOrder); //} } context.OrdersTbl.Add(ordersTbl); context.SaveChanges(); //שליפת מספר ההזמנה שנוצרה result = GetLastOrder(orderDetailsView.Userid); if (orderDetailsView.UserEmail != string.Empty) { //שליחת מייל למשתמש SendMailService sendMailService = new SendMailService(); SendMailRequest mailRequest = new SendMailRequest(); mailRequest.recipient = orderDetailsView.UserEmail; mailRequest.subject = "קליטת הזמנה - " + (int)result + "מקום טוב- יוסף טוויטו"; mailRequest.body = " הזמנתך נקלטה"; sendMailService.SendMail(mailRequest); //שליחת מייל ליוסף SendMailService sendMailServiceMT = new SendMailService(); SendMailRequest mailRequestMT = new SendMailRequest(); mailRequest.recipient = "*****@*****.**"; mailRequest.subject = " קליטת הזמנה - " + (int)result + "מקום טוב- יוסף טוויטו"; mailRequest.body = string.Format(" הזמנה מלקוח {0} נקלטה במערכת ", orderDetailsView.userFirstName + " " + orderDetailsView.userLastName); mailRequest.body += "\n"; mailRequest.body += string.Format("מתאריך {0} , משמרת {1} עד תאריך {2} , משמרת {3}", ((DateTime)ordersTbl.FromDate).ToShortDateString(), ordersTbl.ShiftNumberFrom, ((DateTime)ordersTbl.ToDate).ToShortDateString(), ordersTbl.ShiftNumberTo); mailRequest.body += "\n"; mailRequest.body += string.Format("מספר כלבים בהזמנה - {0}", ordersTbl.DogsInOrder.Count); sendMailService.SendMail(mailRequest); } } return((int)result); }