private void CloseTrip_Click(object sender, RoutedEventArgs e)
 {
     if (NumberArea.Text != "")
     {
         try
         {
             int trip_id = Convert.ToInt32(NumberArea.Text);
             //Получить слоты
             Trip trip = controller.GetTrips().Where(t => t.Id == trip_id).FirstOrDefault();
             if (trip == null) throw new Exception("Не найден объект, с указанным Id. Проверьте правильность введенных данных");
             if (trip.Status.Equals("Завершён")) throw new Exception("Нельзя завершить завершённый рейс");
             if (trip.Status.Equals("Ожидает отправки")) throw new Exception("Нельзя завершить рейс, ожидающий отправки");
             ObservableCollection<TruckSlot> slots = controller.GetSlotsForTrip(trip);
             //Прибывить к наименованию на складе кол-во  со слотов
             Center centerTo = trip.To;
             foreach (TruckSlot slot in slots)
             {
                 ProductPosition position = controller.GetDBCenterProductsPosition(centerTo).Where(p => p.product.Id == slot.product.Id).FirstOrDefault();
                 position.numberOfProduct += slot.total_umber;
             }
             //Отнять с отбывшего склада
             Center centerFrom = trip.From;
             foreach (TruckSlot slot in slots)
             {
                 ProductPosition position = controller.GetDBCenterProductsPosition(centerFrom).Where(p => p.product.Id == slot.product.Id).FirstOrDefault();
                 position.numberOfProduct -= slot.total_umber;
             }
             //Удалить заказы или отнять кол-во
             foreach (TruckSlot slot in slots)
             {
                 Require require = controller.GetDBRequiers().Where(r => r.FromCenter.Id == centerFrom.Id && r.ToCenter.Id == centerTo.Id && r.product.Id == slot.product.Id).FirstOrDefault();
                 if (require != null)
                 {
                     if (require.Number == slot.total_umber)
                         controller.DelateRequier(require.Id);
                     else require.Number -= slot.total_umber;
                 }
             }
             //Удалить слоты
             controller.DelateTripsSlots(trip_id);
             //Завершить рейс
             trip.CloseTrip();
             trip.truck.closeTrip(centerTo);
             TripsWorkingArea.Content = AdminTripsTable.GetInstance();
         }
         catch (Exception ex)
         {
             MessageBox.Show(ex.Message);
         }
     }
     else
         MessageBox.Show("Укажите Id рейса, над которым хотите совершить операцию");
 }
示例#2
0
        private void GenerateTrip_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            try
            {
                if ((Center)FromCenter.SelectedItem == null)
                {
                    throw new Exception("Выберите пункт отправки");
                }
                if ((Center)ToCenter.SelectedItem == null)
                {
                    throw new Exception("Выберите пункт назначения");
                }
                if ((Truck)Transport.SelectedItem == null)
                {
                    throw new Exception("Выберите транспорт");
                }

                Truck  truck       = (Truck)Transport.SelectedItem;
                Center center_from = (Center)FromCenter.SelectedItem;
                Center center_to   = (Center)ToCenter.SelectedItem;

                if (center_from.Id == center_to.Id)
                {
                    throw new Exception("Центры не должны совпадать");
                }

                //Получить все заказы с выбранного центра
                ObservableCollection <Require> requires = controller.GetDBRequiersFrom(center_from);
                //Получить слоты с каждого заказа
                ObservableCollection <TruckSlot> slots = new ObservableCollection <TruckSlot>();
                foreach (Require requier in requires)
                {
                    foreach (TruckSlot slot in TruckSlot.GetSlotsFromRequier(requier))
                    {
                        slots.Add(slot);
                    }
                }
                //Зарегистрировать рейс
                Trip trip = new Trip(slots, center_to, center_from, truck, "Ожидает отправки");
                controller.AddTripInDB(trip);
                //Занести слоты в БД
                ObservableCollection <Trip> trips = controller.GetTrips();
                trip = trips[trips.Count - 1];
                foreach (TruckSlot slot in slots)
                {
                    slot.SetTrip(trip);
                    controller.AddTruckSlotInDB(slot);
                }
                truck.SetBusy();
                MessageBox.Show("Сформирован новый рейс");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
示例#3
0
 private void SendTrip_Click(object sender, RoutedEventArgs e)
 {
     if (NumberArea.Text != "")
     {
         try
         {
             int  trip_id = Convert.ToInt32(NumberArea.Text);
             Trip trip    = controller.GetTrips().Where(t => t.Id == trip_id).FirstOrDefault();
             if (trip.From.Id != employee.center.Id)
             {
                 throw new Exception("Отправить рейс может только сотрудник центра отправки или администратор");
             }
             if (trip.Status.Equals("Завершён"))
             {
                 throw new Exception("Нельзя отправить завершенный рейс");
             }
             if (trip.Status.Equals("В пути"))
             {
                 throw new Exception("Нельзя отправить отправленный рейс");
             }
             if (trip != null)
             {
                 trip.SendTrip();
                 TripsWorkingArea.Content = EmployeeTripsTable.GetInstance(employee);
             }
             else
             {
                 throw new Exception("Проверьте правильность указанного Id");
             }
         }
         catch (Exception ex)
         {
             MessageBox.Show(ex.Message);
         }
     }
     else
     {
         MessageBox.Show("Укажите Id рейса, над которым хотите совершить операцию");
     }
 }
示例#4
0
        public void AddTripsInCollection(Employee employee)
        {
            trips.Clear();
            ObservableCollection <Trip> trps = new ObservableCollection <Trip>();
            var trip_trip = controller.GetTrips(employee.center).Where(tt => tt.Status != "Завершён");

            foreach (Trip trip in trip_trip)
            {
                trps.Add(trip);
            }
            //trps = controller.GetTrips(employee.center);
            foreach (Trip tr in trps)
            {
                trips.Add(new TripDecorator(tr));
            }
        }
        void SetContext()
        {
            if (trips.Count > 0)
            {
                trips.Clear();
            }
            ObservableCollection <Trip> trps = controller.GetTrips(employee.center);

            if (trps != null)
            {
                foreach (Trip tr in trps)
                {
                    trips.Add(new TripDecorator(tr));
                }
            }
            TripTable.ItemsSource = trips;
        }
示例#6
0
        private void DoAction_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if (Convert.ToString(TripActions.SelectedItem).Equals("ApproveArrival"))
                {
                    ObservableCollection <ProductPosition> productPositionsTo   = controller.GetDBCenterProductsPosition(employee.center);
                    ObservableCollection <ProductPosition> productPositionsFrom = controller.GetDBCenterProductsPosition(trip.trip.From);

                    ProductPosition position, position2;
                    if (trip.trip.To.CenterName.Equals(employee.center.CenterName))
                    {
                        foreach (TruckSlot slot in trip.trip.Slots)
                        {
                            position  = productPositionsTo.Where(pp => pp.product.Id == slot.product.Id).FirstOrDefault();
                            position2 = productPositionsFrom.Where(pp => pp.product.Id == slot.product.Id).FirstOrDefault();

                            if (position != null)
                            {
                                //Если найдена позиция товара на складе, соот. товару в слоте, просто добавляется кол-во товара
                                position.NumberOfProduct  += slot.total_umber;
                                position2.NumberOfProduct -= slot.total_umber;
                                //Закрыть заказ или отнять требуемое количество
                                Require req = controller.GetDBRequiersTo(employee.center).Where(r => r.product.Id == slot.product.Id).FirstOrDefault();
                                if (req != null)
                                {
                                    if (req.Number == slot.total_umber && req.product.Id == slot.product.Id)
                                    {
                                        controller.DelateRequier(req.Id);
                                    }
                                    else if (req.Number > slot.total_umber && req.product.Id == slot.product.Id)
                                    {
                                        req.Number -= slot.total_umber;
                                    }
                                }
                            }
                            else
                            {
                                //Если позиция не найдена, в базу данных добавляется новая, при просмотре товар буде скачан
                                controller.AddProductPositionInDB(new ProductPosition(slot.product, employee.center, slot.total_umber));
                            }
                        }
                        //Меняем ставим фуру на парковку, меняем статус
                        trip.trip.truck.CurrentCenter = employee.center;
                        trip.trip.truck.if_busy       = false;
                        employee.center.trucks_on_parking.Add(trip.trip.truck);

                        trip.trip.Status = "Завершён";
                        MessageBox.Show("Рейс завершён");
                    }
                    else
                    {
                        throw new Exception("Вы не можете принять рейс, который отправляете");
                    }
                }
                if (Convert.ToString(TripActions.SelectedItem).Equals("SendTrips"))
                {
                    try
                    {
                        int  trip_id = this.trip.trip.Id;
                        Trip trip    = controller.GetTrips().Where(t => t.Id == trip_id).FirstOrDefault();
                        if (trip != null)
                        {
                            //Сменить статус рейса
                            trip.SendTrip();
                            //Сменить статус фуры
                            //controller.UpdateTrip(trip);
                            trip.truck.SendInTrip();
                            //TripsWorkingArea.Content = AdminTripsTable.GetInstance();
                        }
                        else
                        {
                            throw new Exception("Что-то пошло не так");
                        }
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message);
                    }

                    //ObservableCollection<ProductPosition> productPositions = controller.GetDBCenterProductsPosition(employee.center);
                    //ProductPosition position;
                    //if (trip.trip.From.CenterName.Equals(employee.center.CenterName))
                    //{
                    //    foreach (TruckSlot slot in trip.trip.Slots)
                    //    {
                    //        position = productPositions.Where(pp => pp.product.Id == slot.product.Id).FirstOrDefault();
                    //        if (position != null)
                    //        {
                    //            //Если найдена позиция товара на складе, соот. товару в слоте, просто добавляется кол-во товара
                    //           // position.NumberOfProduct -= slot.total_umber;
                    //        }
                    //        else
                    //        {
                    //            //Если позиция не найдена, в базу данных добавляется новая, при просмотре товар буде скачан
                    //            controller.AddProductPositionInDB(new ProductPosition(slot.product, employee.center, slot.total_umber));
                    //        }
                    //    }
                    //    //Меняем ставим фуру на парковку, меняем статус
                    //    trip.trip.truck.CurrentCenter = null;
                    //    trip.trip.truck.if_busy = true;
                    //    employee.center.trucks_on_parking.Remove(trip.trip.truck);
                    //    trip.trip.Status = "В пути";
                    //    MessageBox.Show("Рейс успешно отправлен");
                    //}
                    //else throw new Exception("Вы не можете отправить рейс, который напрявляется к вам");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }