Example #1
0
        public async Task <IActionResult> Edit(int id,
                                               //[Bind("Name,Number,Path,ProductId,EndDate,CreatedDate,ModifiedDate,CreatedUserId,ModifiedUserId,Id")]
                                               OrderCardCreateEditVM orderCardVM)
        {
            if (id != orderCardVM.Id)
            {
                return(NotFound());
            }

            ViewData["EmployeeId"] = new SelectList(_context.Employees
                                                    .Where(x => x.Department.IsResponsibleDesignWork), "Id", "GetFullName");
            if (ModelState.IsValid && orderCardVM.ModulesVM != null)
            {
                var selectedModuleTypes   = new List <OrderCardCreateEditModuleVM>();
                var unSelectedModuleTypes = new List <int>();
                // var selectedModuleTypes = orderCardVM.ModulesVM
                //     .Where(x => x.Addresses.Any(a => a))
                //     .ToList();
                foreach (var moduleAddresses in orderCardVM.ModulesVM)
                {
                    if (moduleAddresses.Addresses.Any(a => a))
                    {
                        selectedModuleTypes.Add(moduleAddresses);
                    }
                    else
                    {
                        unSelectedModuleTypes.Add(moduleAddresses.Id);
                    }
                }

                if (selectedModuleTypes.Count == 0)
                {
                    ModelState.AddModelError(string.Empty, "Пустая конфигурация модулей!");
                    return(View(orderCardVM));
                }

                var selectedPlaces = new Dictionary <int, int>();
                foreach (var moduleType in selectedModuleTypes)
                {
                    for (int place = 1, i = 0; i < moduleType.Addresses.Length; i++, place++)
                    {
                        if (moduleType.Addresses[i])
                        {
                            if (!selectedPlaces.ContainsKey(place))
                            {
                                selectedPlaces.Add(place, moduleType.Id);
                            }
                            else
                            {
                                ModelState.AddModelError(string.Empty, "Неверная конфигурация модулей!");
                                return(View(orderCardVM));
                            }
                        }
                    }
                }

                var cardOrder = _mapper.Map <OrderCardCreateEditVM, OrderCard>(orderCardVM);
                cardOrder.UnSelectedModuleTypes = unSelectedModuleTypes;
                var currentModules = _context.Modules.Where(x => x.DestinationOrderCardId == cardOrder.Id &&
                                                            x.ModuleType.IsCommunicationDevice)        // чтобы не выбирать LPBS
                                     .ToList();

                /*
                 * .Select(
                 *  x => new
                 *  {
                 *      TypeModuleId = x.ModuleTypeId,
                 *      Place = x.Place
                 *  })
                 */

                var existingModules = currentModules.Where(x =>
                                                           selectedPlaces.ContainsKey(x.Place) && selectedPlaces[x.Place] == x.ModuleTypeId);
                // || !selectedPlaces.ContainsKey(x.Place));

                /* var currentSelectedPlaces=new Dictionary<int, int>();
                 * foreach (var module in currentModules)
                 * {
                 *  if (!currentSelectedPlaces.ContainsKey(module.Place))
                 *  {
                 *      currentSelectedPlaces.Add(module.Place, module.TypeModuleId);
                 *  }
                 *  else
                 *  {
                 *      ModelState.AddModelError(string.Empty, "Неверная конфигурация модулей!");
                 *      return View(orderCardVM);
                 *  }
                 * }
                 */

                var modulesUpdate = new List <Module>();
                foreach (var kvp in selectedPlaces)
                {
                    var existingModule = existingModules.FirstOrDefault(x => x.Place == kvp.Key && x.ModuleTypeId == kvp.Value);
                    var module         = new Module()
                    {
                        // тут нужно еще как-то id получить модуля из БД
                        //DestinationOrderCard = cardOrder,
                        DestinationOrderCardId = cardOrder.Id,
                        //ActualOrderCard = cardOrder,
                        ActualOrderCardId = cardOrder.Id,
                        ModuleTypeId      = kvp.Value,
                        Place             = kvp.Key
                    };
                    if (existingModule != null)
                    {
                        module.Id = existingModule.Id;
                    }
                    modulesUpdate.Add(module);
                }

                /*foreach (var kvp in currentSelectedPlaces)
                 * {
                 *  if(selectedPlaces.ContainsKey(kvp.Key)&&selectedPlaces[kvp.Key]==kvp.Value){}
                 *
                 * }
                 */
                //cardOrder.Modules = modulesUpdate;
                //cardOrder.Modules.Add();
                try
                {
                    var entity = _context.OrderCards.Find(cardOrder.Id);
                    _context.Entry(entity).CurrentValues.SetValues(cardOrder);
                    // _context.Entry(entity).State = EntityState.Modified;
                    //_context.Update(cardOrder);

                    var modulesToRemove = currentModules;// _context.Modules.Where(x => x.DestinationOrderCardId == cardOrder.Id);
                    // && !modulesUpdate.Any(m => m.ModuleTypeId == x.ModuleTypeId && m.Place == x.Place));
                    _context.Modules.RemoveRange(modulesToRemove);
                    await _context.SaveChangesAsync();

                    // foreach (var moduleToUpdate in modulesUpdate)
                    // {
                    //     var moduleEntity = _context.Modules.Find(moduleToUpdate.Id);
                    //     _context.Entry(moduleEntity).CurrentValues.SetValues(moduleToUpdate);
                    // }
                    _context.Modules.AddRange(modulesUpdate);

                    //_context.Update(cardOrder);
                    await _context.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException)
                {
                    if (!OrderCardExists(cardOrder.Id))
                    {
                        return(NotFound());
                    }
                    else
                    {
                        throw;
                    }
                }

                return(RedirectToAction(nameof(GetOrderCardsForProduct), new { productId = orderCardVM.ProductId }));
            }

            // ViewData["CreatedUserId"] = new SelectList(_context.Users, "Id", "Id", orderCard.CreatedUserId);
            // ViewData["ModifiedUserId"] = new SelectList(_context.Users, "Id", "Id", orderCard.ModifiedUserId);
            // ViewData["ProductId"] = new SelectList(_context.Products, "Id", "Name", orderCard.ProductId);
            return(View(orderCardVM));
        }
Example #2
0
        [ValidateAntiForgeryToken] //[Bind("Name,Number,Path,ProductId,Id")]
        public async Task <IActionResult> Create([FromForm] OrderCardCreateEditVM orderCardVM)
        {
            if (ModelState.IsValid)
            {
                if (orderCardVM.ModulesVM != null && orderCardVM.systemUnit != null)
                {
                    var selectedModuleTypes   = new List <OrderCardCreateEditModuleVM>();
                    var unSelectedModuleTypes = new List <int>();
                    // var selectedModuleTypes = orderCardVM.ModulesVM
                    //     .Where(x => x.Addresses.Any(a => a))
                    //     .ToList();
                    foreach (var moduleAddresses in orderCardVM.ModulesVM)
                    {
                        if (moduleAddresses.Addresses.Any(a => a))
                        {
                            selectedModuleTypes.Add(moduleAddresses);
                        }
                        else
                        {
                            unSelectedModuleTypes.Add(moduleAddresses.Id);
                        }
                    }

                    if (selectedModuleTypes.Count == 0)
                    {
                        ViewData["EmployeeId"] = new SelectList(_context.Employees
                                                                .Where(x => x.Department.IsResponsibleDesignWork), "Id", "GetFullName");
                        ModelState.AddModelError(string.Empty, "Пустая конфигурация модулей!");
                        return(View(orderCardVM));
                    }

                    var selectedPlaces = new Dictionary <int, int>();
                    foreach (var moduleType in selectedModuleTypes)
                    {
                        for (int place = 1, i = 0; i < moduleType.Addresses.Length; i++, place++)
                        {
                            if (moduleType.Addresses[i])
                            {
                                if (!selectedPlaces.ContainsKey(place))
                                {
                                    selectedPlaces.Add(place, moduleType.Id);
                                }
                                else
                                {
                                    ModelState.AddModelError(string.Empty, "Неверная конфигурация модулей!");
                                    return(View(orderCardVM));
                                }
                            }
                        }
                    }

                    var cardOrder = _mapper.Map <OrderCardCreateEditVM, OrderCard>(orderCardVM);
                    cardOrder.UnSelectedModuleTypes = unSelectedModuleTypes;
                    try
                    {
                        foreach (var kvp in selectedPlaces)
                        {
                            _context.Add(new Module()
                            {
                                DestinationOrderCard = cardOrder,
                                // ActualOrderCard = cardOrder,
                                ModuleTypeId = kvp.Value,
                                Place        = kvp.Key
                            });
                        }

                        _context.Add(new Module()
                        {
                            DestinationOrderCard = cardOrder,
                            ActualOrderCard      = cardOrder,
                            ModuleTypeId         = orderCardVM.systemUnit.Id,
                            Place = -1
                        });

                        _context.Add(cardOrder);
                        await _context.SaveChangesAsync();

                        return(RedirectToAction(nameof(GetOrderCardsForProduct),
                                                new { productId = cardOrder.ProductId }));
                    }
                    catch (DbUpdateException e)
                    {
                        var exception = e.InnerException;
                        if (exception != null && exception.Message.Contains("IX_OrderCards_Number"))
                        {
                            ModelState.AddModelError("Number", "Такой cерийный № уже используется");
                        }
                    }
                }
            }

            ViewData["EmployeeId"] = new SelectList(_context.Employees
                                                    .Where(x => x.Department.IsResponsibleDesignWork), "Id", "GetFullName");

            // ViewData["ProductId"] = new SelectList(_context.Products, "Id", "Name", orderCardDTO.ProductId);
            return(View(orderCardVM));
        }