Index: FullyStocked/src/main/java/com/bazi/fullystocked/Models/Exceptions/ArticleAlreadyInInvoiceException.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Models/Exceptions/ArticleAlreadyInInvoiceException.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Models/Exceptions/ArticleAlreadyInInvoiceException.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
@@ -0,0 +1,7 @@
+package com.bazi.fullystocked.Models.Exceptions;
+
+public class ArticleAlreadyInInvoiceException extends RuntimeException{
+    public ArticleAlreadyInInvoiceException() {
+        super("Article is already added to the invoice");
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Models/Exceptions/ArticleAlreadyInOrderException.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Models/Exceptions/ArticleAlreadyInOrderException.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Models/Exceptions/ArticleAlreadyInOrderException.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
@@ -0,0 +1,7 @@
+package com.bazi.fullystocked.Models.Exceptions;
+
+public class ArticleAlreadyInOrderException extends RuntimeException{
+    public ArticleAlreadyInOrderException() {
+        super("Article is already added to the order");
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Models/Exceptions/ArticleMaxQuantityException.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Models/Exceptions/ArticleMaxQuantityException.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Models/Exceptions/ArticleMaxQuantityException.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
@@ -0,0 +1,7 @@
+package com.bazi.fullystocked.Models.Exceptions;
+
+public class ArticleMaxQuantityException extends RuntimeException{
+    public ArticleMaxQuantityException() {
+        super("The order exceeds the maximum allowed quantity of the article");
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Models/Exceptions/ArticleNotAvailableException.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Models/Exceptions/ArticleNotAvailableException.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Models/Exceptions/ArticleNotAvailableException.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
@@ -0,0 +1,7 @@
+package com.bazi.fullystocked.Models.Exceptions;
+
+public class ArticleNotAvailableException extends RuntimeException{
+    public ArticleNotAvailableException() {
+        super("The article is not available in the asked quantity");
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/InvoicedArticlesRepository.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/InvoicedArticlesRepository.java	(revision e44097149220ebd655f32ad1542689073ebd0ba2)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/InvoicedArticlesRepository.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
@@ -12,4 +12,4 @@
     List<InvoicedArticles> findAllByArticle(Articles article);
     List<InvoicedArticles> findAllByInvoice(Invoices invoice);
-    List<InvoicedArticles> findAllByInvoiceAndArticle(Invoices invoice, Articles article);
+    Optional<InvoicedArticles> findByInvoiceAndArticle(Invoices invoice, Articles article);
 }
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/OrderedArticlesRepository.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/OrderedArticlesRepository.java	(revision e44097149220ebd655f32ad1542689073ebd0ba2)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/OrderedArticlesRepository.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
@@ -14,6 +14,7 @@
     List<OrderedArticles> findAllByArticle(Articles article);
     List<OrderedArticles> findAllByLocation(Locations location);
+    List<OrderedArticles> findAllByLocationAndArticleAndArticlestatus(Locations location, Articles article, ArticleStatus status);
     List<OrderedArticles> findAllByOrder(Orders order);
-    List<OrderedArticles> findAllByOrderAndArticle(Orders order, Articles article);
+    Optional<OrderedArticles> findByOrderAndArticle(Orders order, Articles article);
     List<OrderedArticles> findAllByArticlestatus(ArticleStatus status);
     List<OrderedArticles> findAllByLocationAndArticlestatus(Locations location, ArticleStatus status);
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/StoredArticlesRepository.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/StoredArticlesRepository.java	(revision e44097149220ebd655f32ad1542689073ebd0ba2)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/StoredArticlesRepository.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
@@ -11,5 +11,5 @@
     List<StoredArticles> findAllByLocations(Locations location);
     List<StoredArticles> findAllByArticle(Articles article);
-    List<StoredArticles> findAllByArticleAndLocations(Articles article, Locations location);
+    Optional<StoredArticles> findByArticleAndLocations(Articles article, Locations location);
     List<StoredArticles> findAllByLocationsAndQuantityIsLessThanEqual(Locations location, int quantity);
     List<StoredArticles> findAllByLocationsAndQuantity(Locations location, int quantity);
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/InvoicesServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/InvoicesServiceImpl.java	(revision e44097149220ebd655f32ad1542689073ebd0ba2)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/InvoicesServiceImpl.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
@@ -1,13 +1,9 @@
 package com.bazi.fullystocked.Services.Implementations;
 
-import com.bazi.fullystocked.Models.Articles;
+import com.bazi.fullystocked.Models.*;
+import com.bazi.fullystocked.Models.Exceptions.ArticleAlreadyInInvoiceException;
+import com.bazi.fullystocked.Models.Exceptions.ArticleNotAvailableException;
 import com.bazi.fullystocked.Models.Exceptions.InvalidArgumentsException;
-import com.bazi.fullystocked.Models.InvoicedArticles;
-import com.bazi.fullystocked.Models.Invoices;
-import com.bazi.fullystocked.Models.Workers;
-import com.bazi.fullystocked.Repositories.ArticlesRepository;
-import com.bazi.fullystocked.Repositories.InvoicedArticlesRepository;
-import com.bazi.fullystocked.Repositories.InvoicesRepository;
-import com.bazi.fullystocked.Repositories.WorkersRepository;
+import com.bazi.fullystocked.Repositories.*;
 import com.bazi.fullystocked.Services.InvoicesService;
 import org.springframework.stereotype.Service;
@@ -22,10 +18,12 @@
     private final WorkersRepository workersRepository;
     private final ArticlesRepository articlesRepository;
+    private final StoredArticlesRepository storedArticlesRepository;
 
-    public InvoicesServiceImpl(InvoicedArticlesRepository invoicedArticlesRepository, InvoicesRepository invoicesRepository, WorkersRepository workersRepository, ArticlesRepository articlesRepository) {
+    public InvoicesServiceImpl(InvoicedArticlesRepository invoicedArticlesRepository, InvoicesRepository invoicesRepository, WorkersRepository workersRepository, ArticlesRepository articlesRepository, StoredArticlesRepository storedArticlesRepository) {
         this.invoicedArticlesRepository = invoicedArticlesRepository;
         this.invoicesRepository = invoicesRepository;
         this.workersRepository = workersRepository;
         this.articlesRepository = articlesRepository;
+        this.storedArticlesRepository = storedArticlesRepository;
     }
 
@@ -47,7 +45,16 @@
         Invoices invoice = invoicesRepository.findById(invoiceId).orElseThrow(InvalidArgumentsException::new);
         Articles article = articlesRepository.findById(articleId).orElseThrow(InvalidArgumentsException::new);
+        if(invoicedArticlesRepository.findByInvoiceAndArticle(invoice, article).isPresent())
+        {
+            throw new ArticleAlreadyInInvoiceException();
+        }
         if(price<=0 || quantity<=0)
         {
             throw new InvalidArgumentsException();
+        }
+        StoredArticles storedArticle=storedArticlesRepository.findByArticleAndLocations(article, invoice.getWorker().getLocation()).orElseThrow(InvalidArgumentsException::new);
+        if(quantity>storedArticle.getQuantity())
+        {
+            throw new ArticleNotAvailableException();
         }
         InvoicedArticles invoicedArticles=new InvoicedArticles(price, quantity, invoice, article);
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/OrdersServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/OrdersServiceImpl.java	(revision e44097149220ebd655f32ad1542689073ebd0ba2)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/OrdersServiceImpl.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
@@ -5,4 +5,6 @@
 import com.bazi.fullystocked.Models.Enumerations.OrderPriority;
 import com.bazi.fullystocked.Models.Enumerations.OrderStatus;
+import com.bazi.fullystocked.Models.Exceptions.ArticleAlreadyInOrderException;
+import com.bazi.fullystocked.Models.Exceptions.ArticleMaxQuantityException;
 import com.bazi.fullystocked.Models.Exceptions.InvalidArgumentsException;
 import com.bazi.fullystocked.Repositories.*;
@@ -55,11 +57,23 @@
     @Transactional
     public Optional<Orders> addArticleToOrder(int quantity, Integer locationId, Integer articleId, Integer orderId) {
+        Locations location=locationsRepository.findById(locationId).orElseThrow(InvalidArgumentsException::new);
+        Articles article=articlesRepository.findById(articleId).orElseThrow(InvalidArgumentsException::new);
+        Orders order=ordersRepository.findById(orderId).orElseThrow(InvalidArgumentsException::new);
+        if(orderedArticlesRepository.findByOrderAndArticle(order, article).isPresent())
+        {
+            throw new ArticleAlreadyInOrderException();
+        }
         if(quantity<=0)
         {
             throw new InvalidArgumentsException();
         }
-        Locations location=locationsRepository.findById(locationId).orElseThrow(InvalidArgumentsException::new);
-        Articles article=articlesRepository.findById(articleId).orElseThrow(InvalidArgumentsException::new);
-        Orders order=ordersRepository.findById(orderId).orElseThrow(InvalidArgumentsException::new);
+        int quantityAlreadyOrdered=orderedArticlesRepository.findAllByLocationAndArticleAndArticlestatus(location, article, ArticleStatus.ORDERED).
+                stream().mapToInt(OrderedArticles::getQuantity).sum()+
+                    orderedArticlesRepository.findAllByLocationAndArticleAndArticlestatus(location, article, ArticleStatus.DELIVERED).
+                        stream().mapToInt(OrderedArticles::getQuantity).sum();
+        if(article.getMaxquantityperlocation()<quantityAlreadyOrdered+quantity)
+        {
+            throw new ArticleMaxQuantityException();
+        }
         OrderedArticles orderedArticles=orderedArticlesRepository.save(new OrderedArticles(quantity, order, location, article));
         order.getArticlesList().add(orderedArticles);
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/StoredArticlesServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/StoredArticlesServiceImpl.java	(revision e44097149220ebd655f32ad1542689073ebd0ba2)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/StoredArticlesServiceImpl.java	(revision f08836bfc120c210b081f1fa4d99e0fc6479e2ed)
@@ -49,5 +49,5 @@
             throw new InvalidArgumentsException();
         }
-        StoredArticles storedArticle=storedArticlesRepository.findAllByArticleAndLocations(orderedArticle.getArticle(), orderedArticle.getLocation()).get(0);
+        StoredArticles storedArticle=storedArticlesRepository.findByArticleAndLocations(orderedArticle.getArticle(), orderedArticle.getLocation()).orElseThrow(InvalidArgumentsException::new);
         storedArticle.setQuantity(storedArticle.getQuantity()+ orderedArticle.getQuantity());
         orderedArticle.setArticlestatus(ArticleStatus.PROCESSED);
