Esempio n. 1
0
 public TripDecorator(Trip trip)
 {
     this.trip       = trip;
     this.trip.Slots = controller.GetSlotsForTrip(trip);
     NumberOfSlots   = trip.Slots.Count;
     foreach (TruckSlot slot in trip.Slots)
     {
         cost   += slot.total_cost;
         weight += slot.total_weight / 1000;
     }
 }
 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 рейса, над которым хотите совершить операцию");
 }
Esempio n. 3
0
        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("Нельзя завершить рейс, ожидающий отправки");
                    }
                    if (trip.To.Id != employee.center.Id)
                    {
                        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();
                        if (position != null)
                        {
                            position.numberOfProduct += slot.total_umber;
                        }
                        else
                        {
                            ICommand command = new AddProductCommand(
                                employee,
                                Convert.ToString(slot.product.Name),
                                Convert.ToString(slot.product.Length),
                                Convert.ToString(slot.product.Height),
                                Convert.ToString(slot.product.Height),
                                Convert.ToString(slot.product.Weight),
                                Convert.ToString(slot.product.Cost),
                                slot.product.Unit_of_measurment,
                                Convert.ToString(slot.product.Mominal_number),
                                Convert.ToString(slot.total_umber)
                                );
                            if (command.ifExecute())
                            {
                                command.Execute();
                            }
                        }
                    }
                    //Отнять с отбывшего склада
                    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 = EmployeeTripsTable.GetInstance(employee);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
            else
            {
                MessageBox.Show("Укажите Id рейса, над которым хотите совершить операцию");
            }
        }