示例#1
0
 public void Create(ServiceBindingModel model)
 {
     try
     {
         int?maxId = null;
         using (var command = new NpgsqlCommand("select max(id) from field_medicine", source.npgsqlConnection))
         {
             var reader = command.ExecuteReader();
             reader.Read();
             maxId = reader.GetInt32(0);
             reader.Close();
         }
         if (!maxId.HasValue)
         {
             maxId = 400;
         }
         using (var command = new NpgsqlCommand("INSERT INTO service (id, field_id, name, price) VALUES (@id, @field_id, @name, @price)", source.npgsqlConnection))
         {
             command.Parameters.AddWithValue("id", maxId + 1);
             command.Parameters.AddWithValue("field_id", model.FieldId);
             command.Parameters.AddWithValue("name", model.ServiceName);
             command.Parameters.AddWithValue("price", model.Price);
             command.ExecuteNonQuery();
         }
     }
     catch (Exception)
     {
         throw;
     }
 }
        public void CreateOrUpdate(ServiceBindingModel model)
        {
            using (var context = new Database())
            {
                Service tempService = model.Id.HasValue ? null : new Service();

                if (model.Id.HasValue)
                {
                    tempService = context.Services.FirstOrDefault(rec => rec.Id == model.Id);
                }

                if (model.Id.HasValue)
                {
                    if (tempService == null)
                    {
                        throw new Exception("Элемент не найден");
                    }

                    CreateModel(model, tempService);
                }
                else
                {
                    context.Services.Add(CreateModel(model, tempService));
                }

                context.SaveChanges();
            }
        }
 public void AddElement(ServiceBindingModel model)
 {
     using (var transaction = context.Database.BeginTransaction())
     {
         try
         {
             Service element = context.Services.FirstOrDefault(rec => rec.serviceName == model.serviceName);
             if (element != null)
             {
                 throw new Exception("Уже есть услуга с таким названием");
             }
             element = new Service
             {
                 serviceName = model.serviceName,
                 price       = model.price
             };
             context.Services.Add(element);
             try
             {
                 context.SaveChanges();
             }
             catch (DbEntityValidationException ex)
             {
                 foreach (DbEntityValidationResult validationError in ex.EntityValidationErrors)
                 {
                     Console.Write("Object: " + validationError.Entry.Entity.ToString());
                     Console.Write(" ");
                     foreach (DbValidationError err in validationError.ValidationErrors)
                     {
                         Console.Write(err.ErrorMessage + " ");
                     }
                 }
             }
             var groupComponents = model.serviceResources
                                   .GroupBy(rec => rec.resourceId)
                                   .Select(rec => new
             {
                 resourceId = rec.Key,
                 count      = rec.Sum(r => r.count)
             });
             foreach (var groupComponent in groupComponents)
             {
                 context.ServiceResources.Add(new ServiceResource
                 {
                     serviceId  = element.id,
                     resourceId = groupComponent.resourceId,
                     count      = groupComponent.count
                 });
                 context.SaveChanges();
             }
             transaction.Commit();
         }
         catch (Exception)
         {
             transaction.Rollback();
             throw;
         }
     }
 }
示例#4
0
        public void AddElement(ServiceBindingModel model)
        {
            using (var transaction = context.Database.BeginTransaction())
            {
                try
                {
                    //Service element = context.Services.FirstOrDefault(rec =>
                    //rec.ServiceName == model.ServiceName);
                    //if (element != null)
                    //{
                    //    throw new Exception("Уже есть услуга с таким названием");
                    //}

                    //foreach (var resourse in model.ServiceResourses)
                    //{
                    //    int countOnStocks = resourse.Count;
                    //    //var skladElements = от Марины
                    //    foreach (var skladElement in skladElements)
                    //    {
                    //        // компонентов на одном слкаде может не хватать
                    //        if (skladElement.Count >= countOnStocks)
                    //        {
                    //            skladElement.Count -= countOnStocks;
                    //            countOnStocks = 0;
                    //            context.SaveChanges();
                    //            break;
                    //        }
                    //        else
                    //        {
                    //            countOnStocks -= skladElement.Count;
                    //            skladElement.Count = 0;
                    //            context.SaveChanges();
                    //        }
                    //    }
                    //    if (countOnStocks > 0)
                    //    {
                    //        throw new Exception("Не достаточно ресурсов " +
                    //        outputElement.Resourse.ResourseName + " требуется " + outputElement.Count + ", не хватает " + countOnStocks);
                    //    }
                    //}
                    //element = new Service
                    //{
                    //    ServiceName = model.ServiceName
                    //};
                    //context.Services.Add(element);
                    //context.SaveChanges();
                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    throw;
                }
            }
        }
        private Service CreateModel(ServiceBindingModel model, Service product)
        {
            using (var context = new Database())
            {
                product.ServiceName = model.ServiceName;
                product.Desc        = model.Desc;
                product.Price       = model.Price;

                return(product);
            }
        }
示例#6
0
 public List <ServiceViewModel> Read(ServiceBindingModel model)
 {
     SaveToDatabase();
     return(Services
            .Where(rec => model == null || rec.Id == model.Id)
            .Select(rec => new ServiceViewModel
     {
         Id = rec.Id,
         ServiceName = rec.ServiceName,
         Price = rec.Price
     })
            .ToList());
 }
        public async Task Update_ReturnNotFoundAfterNotFoundException()
        {
            Service             service = GetService();
            ServiceBindingModel model   = GetModel();

            // Arrange
            unitOfWorkMock.Setup(x => x.ServiceRepository.UpdateAsync(It.IsAny <Service>())).ThrowsAsync(new ItemNotFoundException());

            // Act
            IHttpActionResult result = await controller.Update(model);

            // Assert
            Assert.IsInstanceOfType(result, typeof(NotFoundResult));
        }
示例#8
0
 public void Delete(ServiceBindingModel model)
 {
     try
     {
         using (var command = new NpgsqlCommand("DELETE FROM service WHERE id = @id", source.npgsqlConnection))
         {
             command.Parameters.AddWithValue("id", model.Id);
             command.ExecuteNonQuery();
         }
     }
     catch (Exception)
     {
         throw;
     }
 }
示例#9
0
 public void Update(ServiceBindingModel model)
 {
     try
     {
         using (var command = new NpgsqlCommand("UPDATE service SET name=@name, price=@price WHERE id = @id", source.npgsqlConnection))
         {
             command.Parameters.AddWithValue("name", model.ServiceName);
             command.Parameters.AddWithValue("price", model.Price);
             command.Parameters.AddWithValue("id", model.Id);
             command.ExecuteNonQuery();
         }
     }
     catch (Exception)
     {
         throw;
     }
 }
        public void Delete(ServiceBindingModel model)
        {
            using (var context = new Database())
            {
                Service element = context.Services.FirstOrDefault(rec => rec.Id == model.Id.Value);

                if (element != null)
                {
                    context.Services.Remove(element);
                    context.SaveChanges();
                }
                else
                {
                    throw new Exception("Элемент не найден");
                }
            }
        }
示例#11
0
        public void AddElement(ServiceBindingModel model)
        {
            using (var transaction = context.Database.BeginTransaction())
            {
                try
                {
                    Service element = context.Services.FirstOrDefault(rec => rec.ServiceName == model.ServiceName);
                    if (element != null)
                    {
                        throw new Exception("Уже есть услуга с таким названием");
                    }
                    element = new Service
                    {
                        ServiceName = model.ServiceName,
                        Price       = model.Price
                    };
                    context.Services.Add(element);
                    context.SaveChanges();
                    var groupDrugs = model.ServiceDrugs
                                     .GroupBy(rec => rec.DrugId)
                                     .Select(rec => new
                    {
                        DrugId = rec.Key,
                        Count  = rec.Sum(r => r.Count)
                    });

                    foreach (var groupIngredient in groupDrugs)
                    {
                        context.ServiceDrugs.Add(new ServiceDrug
                        {
                            ServiceId = element.Id,
                            DrugId    = groupIngredient.DrugId,
                            Count     = groupIngredient.Count
                        });
                        context.SaveChanges();
                    }
                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    throw;
                }
            }
        }
示例#12
0
        public ServiceViewModel Read(ServiceBindingModel model)
        {
            ServiceViewModel service;

            using (var command = new NpgsqlCommand($"SELECT id, name, price FROM service WHERE id={model.Id}", source.npgsqlConnection))
            {
                var reader = command.ExecuteReader();
                reader.Read();
                service = new ServiceViewModel
                {
                    Id          = reader.GetInt32(0),
                    ServiceName = reader.GetString(1),
                    Price       = reader.GetInt32(2)
                };
                reader.Close();
            }
            return(service);
        }
示例#13
0
        public async Task <IHttpActionResult> Add(ServiceBindingModel model)
        {
            Service service = _mapper.Map <Service>(model);
            int     result;

            try
            {
                _unitOfWork.ServiceRepository.Add(service);
                result = await _unitOfWork.CompleteAsync();
            }
            catch (Exception e)
            {
                _logger.Error(e);
                return(InternalServerError());
            }

            var mapedEntity = _mapper.Map <ServiceBindingModel>(service);

            return(Created("Created successfull", mapedEntity));
        }
        public List <ServiceViewModel> Read(ServiceBindingModel model)
        {
            using (var context = new Database())
            {
                List <ServiceViewModel> result = new List <ServiceViewModel>();

                if (model != null)
                {
                    result.AddRange(context.Services
                                    .Where(rec => rec.Id == model.Id || rec.ServiceName == model.ServiceName ||
                                           (model.ServiceName == null && model.Id == null))
                                    .Select(rec => CreateViewModel(rec)));
                }
                else
                {
                    result.AddRange(context.Services.Select(rec => CreateViewModel(rec)));
                }
                return(result);
            }
        }
        public async Task Add_ReturnOkResultWithAddedServiceAsContent()
        {
            Service             service = GetService();
            ServiceBindingModel model   = GetModel();

            // Arrange
            unitOfWorkMock.Setup(x => x.ServiceRepository.Add(service)).Returns(service);
            unitOfWorkMock.Setup(x => x.CompleteAsync()).ReturnsAsync(1);
            mapperMock.Setup(x => x.Map <ServiceBindingModel>(It.IsAny <Service>())).Returns(model);

            // Act
            IHttpActionResult result = await controller.Add(model);

            var contentResult = result as CreatedNegotiatedContentResult <ServiceBindingModel>;

            // Assert
            Assert.IsNotNull(contentResult);
            Assert.IsNotNull(contentResult.Content);
            Assert.AreEqual(contentResult.Content.Id, service.Id);
        }
        public async Task Update_ReturnOkWithCorretcServiceId()
        {
            // Arrange
            Service             service = GetService();
            ServiceBindingModel model   = GetModel();

            unitOfWorkMock.Setup(x => x.ServiceRepository.UpdateAsync(service)).ReturnsAsync(service);
            unitOfWorkMock.Setup(x => x.CompleteAsync()).ReturnsAsync(1);

            // Acr
            IHttpActionResult result = await controller.Update(model);

            var contentResult = result as NegotiatedContentResult <ServiceBindingModel>;

            //Assert
            Assert.IsNotNull(contentResult);
            Assert.AreEqual(HttpStatusCode.Accepted, contentResult.StatusCode);
            Assert.IsNotNull(contentResult.Content);
            Assert.AreEqual(service.Id, contentResult.Content.Id);
        }
示例#17
0
        public async Task <IHttpActionResult> Update(ServiceBindingModel model)
        {
            Service service = _mapper.Map <Service>(model);

            try
            {
                await _unitOfWork.ServiceRepository.UpdateAsync(service);

                await _unitOfWork.CompleteAsync();
            }
            catch (ItemNotFoundException e)
            {
                return(NotFound());
            }
            catch (Exception e)
            {
                _logger.Error(e);
                return(InternalServerError());
            }
            return(Content(HttpStatusCode.Accepted, model));
        }
示例#18
0
        public void UpdElement(ServiceBindingModel model)
        {
            using (var transaction = context.Database.BeginTransaction())
            {
                try
                {
                    Service element = context.Services.FirstOrDefault(rec =>
                                                                      rec.ServiceName == model.ServiceName && rec.Id != model.Id);
                    if (element != null)
                    {
                        throw new Exception("Уже есть услуга с таким названием");
                    }
                    element = context.Services.FirstOrDefault(rec => rec.Id == model.Id);
                    if (element == null)
                    {
                        throw new Exception("Элемент не найден");
                    }
                    element.ServiceName = model.ServiceName;
                    element.Price       = model.Price;
                    context.SaveChanges();


                    var drugsIds    = model.ServiceDrugs.Select(rec => rec.DrugId).Distinct();
                    var updateDrugs = context.ServiceDrugs
                                      .Where(rec => rec.ServiceId == model.Id &&
                                             drugsIds.Contains(rec.DrugId));
                    foreach (var updateDrug in updateDrugs)
                    {
                        updateDrug.Count = model.ServiceDrugs
                                           .FirstOrDefault(rec => rec.Id == updateDrug.Id).Count;
                    }
                    context.SaveChanges();
                    context.ServiceDrugs.RemoveRange(
                        context.ServiceDrugs.Where(rec => rec.ServiceId == model.Id &&
                                                   !drugsIds.Contains(rec.DrugId)));
                    context.SaveChanges();

                    var groupDrugs = model.ServiceDrugs
                                     .Where(rec => rec.Id == 0)
                                     .GroupBy(rec => rec.DrugId)
                                     .Select(rec => new
                    {
                        DrugId = rec.Key,
                        Count  = rec.Sum(r => r.Count)
                    });
                    foreach (var groupDrug in groupDrugs)
                    {
                        ServiceDrug elementPC = context.ServiceDrugs
                                                .FirstOrDefault(rec => rec.ServiceId == model.Id &&
                                                                rec.DrugId == groupDrug.DrugId);
                        if (elementPC != null)
                        {
                            elementPC.Count += groupDrug.Count;
                            context.SaveChanges();
                        }
                        else
                        {
                            context.ServiceDrugs.Add(new ServiceDrug
                            {
                                ServiceId = model.Id,
                                DrugId    = groupDrug.DrugId,
                                Count     = groupDrug.Count
                            });
                            context.SaveChanges();
                        }
                    }
                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    throw;
                }
            }
        }
        public void UpdElement(ServiceBindingModel model)
        {
            using (var transaction = context.Database.BeginTransaction())
            {
                try
                {
                    Service element = context.Services.FirstOrDefault(rec =>
                                                                      rec.serviceName == model.serviceName /*&& rec.id != model.id*/);
                    if (element != null)
                    {
                        throw new Exception("Уже есть услуга с таким названием");
                    }
                    element = context.Services.FirstOrDefault(rec => rec.id == model.id);
                    if (element == null)
                    {
                        throw new Exception("Элемент не найден");
                    }
                    element.serviceName = model.serviceName;
                    element.price       = model.price;
                    context.SaveChanges();

                    var compIds          = model.serviceResources.Select(rec => rec.resourceId).Distinct();
                    var updateComponents = context.ServiceResources
                                           .Where(rec => rec.serviceId == model.id &&
                                                  compIds.Contains(rec.resourceId));
                    foreach (var updateComponent in updateComponents)
                    {
                        updateComponent.count = model.serviceResources
                                                .FirstOrDefault(rec => rec.id == updateComponent.id).count;
                    }
                    context.SaveChanges();
                    context.ServiceResources.RemoveRange(
                        context.ServiceResources.Where(rec => rec.serviceId == model.id &&
                                                       !compIds.Contains(rec.serviceId)));
                    context.SaveChanges();
                    var groupComponents = model.serviceResources
                                          .Where(rec => rec.id == 0)
                                          .GroupBy(rec => rec.resourceId)
                                          .Select(rec => new
                    {
                        resourceId = rec.Key,
                        count      = rec.Sum(r => r.count)
                    });
                    foreach (var groupComponent in groupComponents)
                    {
                        ServiceResource elementPC = context.ServiceResources
                                                    .FirstOrDefault(rec => rec.serviceId == model.id &&
                                                                    rec.resourceId == groupComponent.resourceId);
                        if (elementPC != null)
                        {
                            elementPC.count += groupComponent.count;
                            context.SaveChanges();
                        }
                        else
                        {
                            context.ServiceResources.Add(new ServiceResource
                            {
                                serviceId  = model.id,
                                resourceId = groupComponent.resourceId,
                                count      = groupComponent.count
                            });
                            context.SaveChanges();
                        }
                    }
                    transaction.Commit();
                }
                catch (Exception)
                {
                    transaction.Rollback();
                    throw;
                }
            }
        }
        public void AddElement(ServiceBindingModel model)
        {
            Service element = source.Services.FirstOrDefault(rec => rec.ServiceName ==
                                                             model.ServiceName);

            if (element != null)
            {
                throw new Exception("Уже есть услуга с таким названием");
            }
            int maxId = source.Services.Count > 0 ? source.Services.Max(rec => rec.ServiceId) : 0;

            source.Services.Add(new Service
            {
                ServiceId   = maxId + 1,
                ServiceName = model.ServiceName
            });
            // компоненты для изделия
            int maxPCId = source.ServiceResourses.Count > 0 ?
                          source.ServiceResourses.Max(rec => rec.ServiceResourseId) : 0;
            // убираем дубли по компонентам
            var groupComponents = model.ServiceResourses
                                  .GroupBy(rec => rec.ResourseId)
                                  .Select(rec => new
            {
                ResourseId = rec.Key,
                Count      = rec.Sum(r => r.Count)
            });

            // добавляем компоненты
            foreach (var groupComponent in groupComponents)
            {
                source.ServiceResourses.Add(new ServiceResourse
                {
                    ServiceResourseId = ++maxPCId,
                    ServiceId         = maxId + 1,
                    ResourseId        = groupComponent.ResourseId,
                    Count             = groupComponent.Count
                });
            }
            var productComponents = source.ServiceResourses.Where(rec => rec.ServiceId
                                                                  == element.ServiceId);

            foreach (var productComponent in productComponents)
            {
                int countOnStocks = source.SkladResourses
                                    .Where(rec => rec.ResourseId ==
                                           productComponent.ResourseId)
                                    .Sum(rec => rec.Count);
                if (countOnStocks < productComponent.Count)
                {
                    var componentName = source.Resourses.FirstOrDefault(rec => rec.ResourseId ==
                                                                        productComponent.ResourseId);
                    throw new Exception("Не достаточно ресурсов " +
                                        componentName?.ResourseName + " требуется " + (productComponent.Count) +
                                        ", в наличии " + countOnStocks);
                }
            }
            // списываем
            foreach (var productComponent in productComponents)
            {
                int countOnStocks   = productComponent.Count;
                var stockComponents = source.SkladResourses.Where(rec => rec.ResourseId
                                                                  == productComponent.ResourseId);
                foreach (var stockComponent in stockComponents)
                {
                    // компонентов на одном слкаде может не хватать
                    if (stockComponent.Count >= countOnStocks)
                    {
                        stockComponent.Count -= countOnStocks;
                        break;
                    }
                    else
                    {
                        countOnStocks       -= stockComponent.Count;
                        stockComponent.Count = 0;
                    }
                }
            }
        }