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. 2
0
 public ReductProducts(Employee employee)
 {
     this.employee     = employee;
     controller        = new RepositoryController();
     ProductsOnStorage = controller.GetDBCenterProductsPosition(employee.center);
     InitializeComponent();
     ProductsViewerTable.ItemsSource = ProductsOnStorage;
 }
        public CreateARequier(Product prod, Center ToCenter, int number)
        {
            try
            {
                CenterTo       = ToCenter;
                Matr           = new int[Centers.Count][];
                Matr[0]        = new int[] { 0, 276, 351, 289 };
                Matr[1]        = new int[] { 276, 0, 235, 565 };
                Matr[2]        = new int[] { 351, 235, 0, 632 };
                Matr[3]        = new int[] { 289, 565, 632, 0 };
                controller     = new RepositoryController();
                CentersObjects = controller.GetDBCenters();
                CentersObjects.Remove(ToCenter);
                CentersWithProducts = new ObservableCollection <Center>();
                ProductPosition position;
                foreach (Center center in CentersObjects)
                {
                    position = controller.GetDBCenterProductsPosition(center).Where(p => p.product.Id == prod.Id).Where(pp => pp.numberOfProduct >= number).FirstOrDefault();
                    if (position != null && center.CenterName != ToCenter.CenterName)
                    {
                        CentersWithProducts.Add(center);
                    }
                }

                if (CentersWithProducts.Count != 0)
                {
                    CenterFrom = CentersWithProducts[0];
                    for (int i = 0; i < CentersWithProducts.Count; i++)
                    {
                        if (GetDistance(CentersWithProducts[i]) < GetDistance(CenterFrom))
                        {
                            CenterFrom = CentersWithProducts[i];
                        }
                    }
                }
                else
                {
                    throw new Exception("Ни в одном центре нет такого количества товаров");
                }

                //Создать заказ и отправить в БД
                requier = new Require(number, prod, CenterTo, CenterFrom);
                OpenCloseOrder.GetInstance(EmployeeWindow.GetInstance().employe).Requiers.Add(requier);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
            }
        }
        private void GenerateRequier_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                if ((Center)ToCenter.SelectedItem == null)
                {
                    throw new Exception("Укажите пункт назначения");
                }
                if ((Center)FromCenter.SelectedItem == null)
                {
                    throw new Exception("Укажите пункт отправления");
                }
                if ((Product)Products.SelectedItem == null)
                {
                    throw new Exception("Укажите продукт для заказа");
                }
                if (ReqProductNumber.Text == "")
                {
                    throw new Exception("Укажите количество");
                }

                Center centerTo   = (Center)ToCenter.SelectedItem;
                Center centerFrom = (Center)FromCenter.SelectedItem;

                if (centerTo.Id == centerFrom.Id)
                {
                    throw new Exception("Один и тот же склад не может быть пунктом отправки и назначения в рамках одного заказа");
                }

                Product prod   = (Product)Products.SelectedItem;
                int     number = Convert.ToInt32(ReqProductNumber.Text);

                if (controller.GetDBCenterProductsPosition(centerFrom).Where(p => p.product.Id == prod.Id && p.NumberOfProduct > number).FirstOrDefault() != null)
                {
                    Require requier = new Require(number, prod, centerTo, centerFrom);
                    controller.AddRequierInDB(requier);
                    MessageBox.Show("Добавлен новый заказ");
                }
                else
                {
                    MessageBox.Show("В на выбранном вами складе нет столько продуктов данного наименования");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Esempio n. 5
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);
            }
        }
Esempio n. 6
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 рейса, над которым хотите совершить операцию");
            }
        }