Index: FullyStocked/pom.xml
===================================================================
--- FullyStocked/pom.xml	(revision e3df201708dcd80fe47a38cb7c8ace08fc6ee857)
+++ FullyStocked/pom.xml	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -54,4 +54,9 @@
             <version>2.0.2</version>
         </dependency>
+        <dependency>
+            <groupId>org.springframework.security</groupId>
+            <artifactId>spring-security-crypto</artifactId>
+            <version>5.7.5</version>
+        </dependency>
     </dependencies>
 
Index: FullyStocked/src/main/java/com/bazi/fullystocked/FullyStockedApplication.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/FullyStockedApplication.java	(revision e3df201708dcd80fe47a38cb7c8ace08fc6ee857)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/FullyStockedApplication.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -3,4 +3,7 @@
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.Bean;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
 
 @SpringBootApplication
@@ -11,3 +14,10 @@
     }
 
+    @Bean
+    PasswordEncoder passwordEncoder()
+    {
+        return new BCryptPasswordEncoder(10);
+    }
+
+
 }
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Models/Answers.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Models/Answers.java	(revision e3df201708dcd80fe47a38cb7c8ace08fc6ee857)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Models/Answers.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -22,7 +22,8 @@
     private String answertext;
 
-    public Answers(String answertext) {
+    public Answers(Questions question, String answertext) {
         this.datecreated = LocalDateTime.now();
         this.answertext = answertext;
+        answerId.setQuestion(question);
     }
 }
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Models/Enumerations/OrderStatus.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Models/Enumerations/OrderStatus.java	(revision e3df201708dcd80fe47a38cb7c8ace08fc6ee857)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Models/Enumerations/OrderStatus.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -7,5 +7,6 @@
     IN_PROGRESS("In progress"),
     DELIVERED("Delivered"),
-    REJECTED("Rejected");
+    REJECTED("Rejected"),
+    PROCESSED("Processed");
     private String name;
 
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Models/Invoices.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Models/Invoices.java	(revision e3df201708dcd80fe47a38cb7c8ace08fc6ee857)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Models/Invoices.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -44,4 +44,5 @@
         this.city = city;
         this.worker = worker;
+        this.datecreate=LocalDateTime.now();
     }
 }
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Models/SqlViews/ArticlesAtLocationReport.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Models/SqlViews/ArticlesAtLocationReport.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Models/SqlViews/ArticlesAtLocationReport.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,23 @@
+package com.bazi.fullystocked.Models.SqlViews;
+
+import org.hibernate.annotations.Immutable;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+@Entity
+@Immutable
+@Table(name = "articles_at_location")
+public class ArticlesAtLocationReport {
+    @Id
+    private Integer sarticleid;
+    private Integer locationid;
+    private Integer articleid;
+    private String description;
+    private String articlename;
+    private String imageurl;
+    private int maxquantityperlocation;
+    private int quantity;
+
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Models/SqlViews/ArticlesReport.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Models/SqlViews/ArticlesReport.java	(revision e3df201708dcd80fe47a38cb7c8ace08fc6ee857)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Models/SqlViews/ArticlesReport.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -12,4 +12,5 @@
 public class ArticlesReport {
     @Id
+    private Integer sarticleid;
     private Integer articleid;
     private String articlename;
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Models/SqlViews/InvoicedArticlesReport.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Models/SqlViews/InvoicedArticlesReport.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Models/SqlViews/InvoicedArticlesReport.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,22 @@
+package com.bazi.fullystocked.Models.SqlViews;
+
+import com.bazi.fullystocked.Models.Enumerations.ArticleStatus;
+import org.hibernate.annotations.Immutable;
+
+import javax.persistence.*;
+
+@Entity
+@Immutable
+@Table(name = "invoiced_articles_report")
+public class InvoicedArticlesReport {
+    @Id
+    private Integer iarticleid;
+    private Integer articleid;
+    private String description;
+    private String articlename;
+    private String imageurl;
+    private int maxquantityperlocation;
+    private int quantity;
+    private int price;
+    private int invoiceid;
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Models/SqlViews/OrderedArticlesReport.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Models/SqlViews/OrderedArticlesReport.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Models/SqlViews/OrderedArticlesReport.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,25 @@
+package com.bazi.fullystocked.Models.SqlViews;
+
+import com.bazi.fullystocked.Models.Enumerations.ArticleStatus;
+import org.hibernate.annotations.Immutable;
+
+import javax.persistence.*;
+
+@Entity
+@Immutable
+@Table(name = "ordered_articles_report")
+public class OrderedArticlesReport {
+    @Id
+    private Integer oarticleid;
+    private Integer articleid;
+    private String description;
+    private String articlename;
+    private String imageurl;
+    private int maxquantityperlocation;
+    private int quantity;
+    private Integer locationid;
+    private int price;
+    @Enumerated(EnumType.STRING)
+    private ArticleStatus articlestatus;
+    private int orderid;
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Models/Workers.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Models/Workers.java	(revision e3df201708dcd80fe47a38cb7c8ace08fc6ee857)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Models/Workers.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -22,3 +22,6 @@
         this.location = location;
     }
+    public Workers(String firstname, String lastname, String username, String email, String password) {
+        super(firstname, lastname, username, email, password);
+    }
 }
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/ArticlesAtLocationRepository.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/ArticlesAtLocationRepository.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/ArticlesAtLocationRepository.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,11 @@
+package com.bazi.fullystocked.Repositories;
+
+import com.bazi.fullystocked.Models.SqlViews.ArticlesAtLocationReport;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+import java.util.*;
+
+@Repository
+public interface ArticlesAtLocationRepository extends JpaRepository<ArticlesAtLocationReport, Integer> {
+    List<ArticlesAtLocationReport> findAllByLocationid(Integer id);
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/InvoicedArticlesReportRepository.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/InvoicedArticlesReportRepository.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/InvoicedArticlesReportRepository.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,11 @@
+package com.bazi.fullystocked.Repositories;
+
+import com.bazi.fullystocked.Models.SqlViews.InvoicedArticlesReport;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+import java.util.*;
+
+@Repository
+public interface InvoicedArticlesReportRepository extends JpaRepository<InvoicedArticlesReport, Integer> {
+    List<InvoicedArticlesReport> findAllByInvoiceid(Integer invoiceid);
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/OrderedArticlesReportRepository.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/OrderedArticlesReportRepository.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Repositories/OrderedArticlesReportRepository.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,13 @@
+package com.bazi.fullystocked.Repositories;
+
+import com.bazi.fullystocked.Models.Enumerations.ArticleStatus;
+import com.bazi.fullystocked.Models.SqlViews.OrderedArticlesReport;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+import java.util.*;
+@Repository
+public interface OrderedArticlesReportRepository extends JpaRepository<OrderedArticlesReport, Integer> {
+    List<OrderedArticlesReport> findAllByOrderid(Integer orderid);
+    List<OrderedArticlesReport> findAllByArticlestatus(ArticleStatus status);
+    List<OrderedArticlesReport> findAllByArticlestatusAndLocationid(ArticleStatus status, Integer locationid);
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/AnswerService.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/AnswerService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/AnswerService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,11 @@
+package com.bazi.fullystocked.Services;
+
+import com.bazi.fullystocked.Models.Answers;
+
+import java.util.*;
+
+public interface AnswerService {
+    List<Answers> findAllAnswersToQuestion(Integer questionid);
+    Optional<Answers> create(Integer questionid, String text);
+
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/AuthService.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/AuthService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/AuthService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,14 @@
+package com.bazi.fullystocked.Services;
+
+import com.bazi.fullystocked.Models.Managers;
+import com.bazi.fullystocked.Models.Suppliers;
+import com.bazi.fullystocked.Models.User;
+import com.bazi.fullystocked.Models.Workers;
+
+public interface AuthService {
+    User login(String username, String password);
+    Workers registerWorker(String firstname, String lastname, String username, String email, String password);
+    Managers registerManager(String firstname, String lastname, String username, String email, String password);
+    Suppliers registerSupplier(String firstname, String lastname, String username, String email, String password, String supplierInfo, String phone, String street, int streetNumber, String city);
+
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/AnswerServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/AnswerServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/AnswerServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,39 @@
+package com.bazi.fullystocked.Services.Implementations;
+
+import com.bazi.fullystocked.Models.Answers;
+import com.bazi.fullystocked.Models.Exceptions.InvalidArgumentsException;
+import com.bazi.fullystocked.Models.Questions;
+import com.bazi.fullystocked.Repositories.AnswersRepository;
+import com.bazi.fullystocked.Repositories.QuestionsRepository;
+import com.bazi.fullystocked.Services.AnswerService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class AnswerServiceImpl implements AnswerService {
+    private final AnswersRepository answersRepository;
+    private final QuestionsRepository questionsRepository;
+
+    public AnswerServiceImpl(AnswersRepository answersRepository, QuestionsRepository questionsRepository) {
+        this.answersRepository = answersRepository;
+        this.questionsRepository = questionsRepository;
+    }
+
+    @Override
+    public List<Answers> findAllAnswersToQuestion(Integer questionid) {
+        Questions question = questionsRepository.findById(questionid).orElseThrow(InvalidArgumentsException::new);
+        return answersRepository.findAnswersByAnswerId_Question(question);
+    }
+
+    @Override
+    public Optional<Answers> create(Integer questionid, String text) {
+        Questions question = questionsRepository.findById(questionid).orElseThrow(InvalidArgumentsException::new);
+        if(text==null || text.isEmpty())
+        {
+            throw new InvalidArgumentsException();
+        }
+        return Optional.of(answersRepository.save(new Answers(question, text)));
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/AuthServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/AuthServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/AuthServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,90 @@
+package com.bazi.fullystocked.Services.Implementations;
+
+import com.bazi.fullystocked.Models.Exceptions.InvalidArgumentsException;
+import com.bazi.fullystocked.Models.Exceptions.InvalidUserCredentialsException;
+import com.bazi.fullystocked.Models.Exceptions.UserNotFoundException;
+import com.bazi.fullystocked.Models.Exceptions.UsernameAlreadyExistsException;
+import com.bazi.fullystocked.Models.Managers;
+import com.bazi.fullystocked.Models.Suppliers;
+import com.bazi.fullystocked.Models.User;
+import com.bazi.fullystocked.Models.Workers;
+import com.bazi.fullystocked.Repositories.ManagersRepository;
+import com.bazi.fullystocked.Repositories.SuppliersRepository;
+import com.bazi.fullystocked.Repositories.UsersRepository;
+import com.bazi.fullystocked.Repositories.WorkersRepository;
+import com.bazi.fullystocked.Services.AuthService;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import org.springframework.stereotype.Service;
+
+@Service
+public class AuthServiceImpl implements AuthService {
+    private final UsersRepository usersRepository;
+    private final WorkersRepository workersRepository;
+    private final SuppliersRepository suppliersRepository;
+    private final ManagersRepository managersRepository;
+    private final PasswordEncoder passwordEncoder;
+
+    public AuthServiceImpl(UsersRepository usersRepository, WorkersRepository workersRepository, SuppliersRepository suppliersRepository, ManagersRepository managersRepository, PasswordEncoder passwordEncoder) {
+        this.usersRepository = usersRepository;
+        this.workersRepository = workersRepository;
+        this.suppliersRepository = suppliersRepository;
+        this.managersRepository = managersRepository;
+        this.passwordEncoder = passwordEncoder;
+    }
+
+    @Override
+    public User login(String username, String password) {
+        if (username==null || username.isEmpty() || password==null || password.isEmpty()) {
+            throw new InvalidArgumentsException();
+        }
+        User user=usersRepository.findByUsername(username).orElseThrow(()->new UserNotFoundException(username));
+        if(passwordEncoder.matches(password, user.getUserpassword()))
+        {
+            return user;
+        }
+        else
+        {
+            throw new InvalidUserCredentialsException();
+        }
+    }
+
+    @Override
+    public Workers registerWorker(String firstname, String lastname, String username, String email, String password) {
+        RegParamsCheck(firstname, lastname, username, email, password);
+        return workersRepository.save(new Workers(firstname, lastname, username, email, passwordEncoder.encode(password)));
+    }
+
+    @Override
+    public Managers registerManager(String firstname, String lastname, String username, String email, String password) {
+        RegParamsCheck(firstname, lastname, username, email, password);
+        return managersRepository.save(new Managers(firstname, lastname, username, email, passwordEncoder.encode(password)));
+    }
+
+    private void RegParamsCheck(String firstname, String lastname, String username, String email, String password) {
+        if(firstname==null || firstname.isEmpty() || lastname==null || lastname.isEmpty() || username==null || username.isEmpty() || email==null || email.isEmpty() || password==null || password.isEmpty())
+        {
+            throw new InvalidArgumentsException();
+        }
+        if(usersRepository.findByUsername(username).isPresent())
+        {
+            throw new UsernameAlreadyExistsException(username);
+        }
+    }
+
+    @Override
+    public Suppliers registerSupplier(String firstname, String lastname, String username, String email, String password, String supplierInfo, String phone, String street, int streetNumber, String city) {
+        if(firstname==null || firstname.isEmpty() || lastname==null || lastname.isEmpty() || username==null || username.isEmpty() || email==null || email.isEmpty() || password==null || password.isEmpty())
+        {
+            throw new InvalidArgumentsException();
+        }
+        if(supplierInfo==null || supplierInfo.isEmpty() || phone==null || phone.isEmpty() || street==null || street.isEmpty() || city==null || city.isEmpty())
+        {
+            throw new InvalidArgumentsException();
+        }
+        if(usersRepository.findByUsername(username).isPresent())
+        {
+            throw new UsernameAlreadyExistsException(username);
+        }
+        return suppliersRepository.save(new Suppliers(firstname, lastname, username, email, passwordEncoder.encode(password), supplierInfo, phone, street, streetNumber, city));
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/InvoicesServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/InvoicesServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/InvoicesServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,58 @@
+package com.bazi.fullystocked.Services.Implementations;
+
+import com.bazi.fullystocked.Models.Articles;
+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.Services.InvoicesService;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.Optional;
+
+@Service
+public class InvoicesServiceImpl implements InvoicesService {
+    private final InvoicedArticlesRepository invoicedArticlesRepository;
+    private final InvoicesRepository invoicesRepository;
+    private final WorkersRepository workersRepository;
+    private final ArticlesRepository articlesRepository;
+
+    public InvoicesServiceImpl(InvoicedArticlesRepository invoicedArticlesRepository, InvoicesRepository invoicesRepository, WorkersRepository workersRepository, ArticlesRepository articlesRepository) {
+        this.invoicedArticlesRepository = invoicedArticlesRepository;
+        this.invoicesRepository = invoicesRepository;
+        this.workersRepository = workersRepository;
+        this.articlesRepository = articlesRepository;
+    }
+
+    @Override
+    public Optional<Invoices> create(String customername, String customerphone, String street, int streetnumber, String city, Integer workerId) {
+        Workers worker = workersRepository.findById(workerId).orElseThrow(InvalidArgumentsException::new);
+        return Optional.of(invoicesRepository.save(new Invoices(customername, customerphone, street, streetnumber, city, worker)));
+    }
+
+    @Override
+    public Optional<Invoices> create(Integer workerId) {
+        Workers worker = workersRepository.findById(workerId).orElseThrow(InvalidArgumentsException::new);
+        return Optional.of(invoicesRepository.save(new Invoices(worker)));
+    }
+
+    @Override
+    @Transactional
+    public Optional<Invoices> addArticleToInvoice(Integer invoiceId, Integer articleId, int price, int quantity) {
+        Invoices invoice = invoicesRepository.findById(invoiceId).orElseThrow(InvalidArgumentsException::new);
+        Articles article = articlesRepository.findById(articleId).orElseThrow(InvalidArgumentsException::new);
+        if(price<=0 || quantity<=0)
+        {
+            throw new InvalidArgumentsException();
+        }
+        InvoicedArticles invoicedArticles=new InvoicedArticles(price, quantity, invoice, article);
+        invoicedArticlesRepository.save(invoicedArticles);
+        invoice.getArticlesList().add(invoicedArticles);
+        return Optional.of(invoicesRepository.save(invoice));
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/LocationServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/LocationServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/LocationServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,22 @@
+package com.bazi.fullystocked.Services.Implementations;
+
+import com.bazi.fullystocked.Models.SqlViews.ArticlesAtLocationReport;
+import com.bazi.fullystocked.Repositories.ArticlesAtLocationRepository;
+import com.bazi.fullystocked.Services.LocationsService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class LocationServiceImpl implements LocationsService {
+    private final ArticlesAtLocationRepository articlesAtLocationRepository;
+
+    public LocationServiceImpl(ArticlesAtLocationRepository articlesAtLocationRepository) {
+        this.articlesAtLocationRepository = articlesAtLocationRepository;
+    }
+
+    @Override
+    public List<ArticlesAtLocationReport> findAllArticlesAtLocation(Integer locationid) {
+        return articlesAtLocationRepository.findAllByLocationid(locationid);
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/ManagersServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/ManagersServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/ManagersServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,22 @@
+package com.bazi.fullystocked.Services.Implementations;
+
+import com.bazi.fullystocked.Models.Managers;
+import com.bazi.fullystocked.Repositories.ManagersRepository;
+import com.bazi.fullystocked.Services.ManagersService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class ManagersServiceImpl implements ManagersService {
+    private final ManagersRepository managersRepository;
+
+    public ManagersServiceImpl(ManagersRepository managersRepository) {
+        this.managersRepository = managersRepository;
+    }
+
+    @Override
+    public List<Managers> findAll() {
+        return managersRepository.findAll();
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/OrderedArticlesServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/OrderedArticlesServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/OrderedArticlesServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,53 @@
+package com.bazi.fullystocked.Services.Implementations;
+
+import com.bazi.fullystocked.Models.Enumerations.ArticleStatus;
+import com.bazi.fullystocked.Models.Exceptions.InvalidArgumentsException;
+import com.bazi.fullystocked.Models.OrderedArticles;
+import com.bazi.fullystocked.Models.SqlViews.OrderedArticlesReport;
+import com.bazi.fullystocked.Repositories.OrderedArticlesReportRepository;
+import com.bazi.fullystocked.Repositories.OrderedArticlesRepository;
+import com.bazi.fullystocked.Services.OrderedArticlesService;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class OrderedArticlesServiceImpl implements OrderedArticlesService {
+    private final OrderedArticlesReportRepository orderedArticlesReportRepository;
+    private final OrderedArticlesRepository orderedArticlesRepository;
+
+    public OrderedArticlesServiceImpl(OrderedArticlesReportRepository orderedArticlesReportRepository, OrderedArticlesRepository orderedArticlesRepository) {
+        this.orderedArticlesReportRepository = orderedArticlesReportRepository;
+        this.orderedArticlesRepository = orderedArticlesRepository;
+    }
+
+    @Override
+    public List<OrderedArticlesReport> findAllByOrder(Integer orderId) {
+        return orderedArticlesReportRepository.findAllByOrderid(orderId);
+    }
+
+    @Override
+    @Transactional
+    public Optional<OrderedArticles> update(Integer oarticleid, int price, int quantity) {
+        OrderedArticles orderedArticles=orderedArticlesRepository.findById(oarticleid).orElseThrow(InvalidArgumentsException::new);
+        if(price<=0 || quantity<=0)
+        {
+            throw new InvalidArgumentsException();
+        }
+        orderedArticles.setPrice(price);
+        orderedArticles.setQuantity(quantity);
+        return Optional.of(orderedArticlesRepository.save(orderedArticles));
+    }
+
+    @Override
+    public List<OrderedArticlesReport> findByStatusAtLocation(ArticleStatus status, Integer locationid) {
+        return orderedArticlesReportRepository.findAllByArticlestatusAndLocationid(status, locationid);
+    }
+
+    @Override
+    public Optional<OrderedArticlesReport> findById(Integer oarticleid) {
+        return orderedArticlesReportRepository.findById(oarticleid);
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/OrdersServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/OrdersServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/OrdersServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,149 @@
+package com.bazi.fullystocked.Services.Implementations;
+
+import com.bazi.fullystocked.Models.*;
+import com.bazi.fullystocked.Models.Enumerations.ArticleStatus;
+import com.bazi.fullystocked.Models.Enumerations.OrderPriority;
+import com.bazi.fullystocked.Models.Enumerations.OrderStatus;
+import com.bazi.fullystocked.Models.Exceptions.InvalidArgumentsException;
+import com.bazi.fullystocked.Repositories.*;
+import com.bazi.fullystocked.Services.OrdersService;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.List;
+import java.util.Optional;
+
+
+@Service
+public class OrdersServiceImpl implements OrdersService {
+    private final OrdersRepository ordersRepository;
+    private final ManagersRepository managersRepository;
+    private final SuppliersRepository suppliersRepository;
+    private final ArticlesRepository articlesRepository;
+    private final LocationsRepository locationsRepository;
+    private final OrderedArticlesRepository orderedArticlesRepository;
+
+    public OrdersServiceImpl(OrdersRepository ordersRepository, ManagersRepository managersRepository, SuppliersRepository suppliersRepository, ArticlesRepository articlesRepository, LocationsRepository locationsRepository, OrderedArticlesRepository orderedArticlesRepository) {
+        this.ordersRepository = ordersRepository;
+        this.managersRepository = managersRepository;
+        this.suppliersRepository = suppliersRepository;
+        this.articlesRepository = articlesRepository;
+        this.locationsRepository = locationsRepository;
+        this.orderedArticlesRepository = orderedArticlesRepository;
+    }
+
+    @Override
+    public Optional<Orders> create(OrderPriority priority, Integer managerId, Integer supplierId) {
+        Managers manager=managersRepository.findById(managerId).orElseThrow(InvalidArgumentsException::new);
+        Suppliers supplier=suppliersRepository.findById(supplierId).orElseThrow(InvalidArgumentsException::new);
+        return Optional.of(ordersRepository.save(new Orders(priority, manager, supplier)));
+    }
+
+    @Override
+    public List<Orders> findAllByManager(Integer managerId) {
+        Managers manager=managersRepository.findById(managerId).orElseThrow(InvalidArgumentsException::new);
+        return ordersRepository.findAllByManager(manager);
+    }
+
+    @Override
+    public List<Orders> findAllByManagerAndStatus(Integer managerId, OrderStatus status) {
+        Managers manager=managersRepository.findById(managerId).orElseThrow(InvalidArgumentsException::new);
+        return ordersRepository.findAllByManagerAndStatus(manager, status);
+    }
+
+    @Override
+    @Transactional
+    public Optional<Orders> addArticleToOrder(int quantity, Integer locationId, Integer articleId, Integer orderId) {
+        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);
+        OrderedArticles orderedArticles=orderedArticlesRepository.save(new OrderedArticles(quantity, order, location, article));
+        order.getArticlesList().add(orderedArticles);
+        return Optional.of(ordersRepository.save(order));
+    }
+
+    @Override
+    public Optional<Orders> addManagerRemark(Integer orderId, String remark) {
+        Orders order=ordersRepository.findById(orderId).orElseThrow(InvalidArgumentsException::new);
+        order.setManagerremark(remark);
+        return Optional.of(ordersRepository.save(order));
+    }
+
+    @Override
+    public Optional<Orders> addSupplierRemark(Integer orderId, String remark) {
+        Orders order=ordersRepository.findById(orderId).orElseThrow(InvalidArgumentsException::new);
+        order.setSupplierremark(remark);
+        return Optional.of(ordersRepository.save(order));
+    }
+
+    @Override
+    public List<Orders> findAllBySupplier(Integer supplierId) {
+        Suppliers supplier=suppliersRepository.findById(supplierId).orElseThrow(InvalidArgumentsException::new);
+        return ordersRepository.findAllBySupplier(supplier);
+    }
+
+    @Override
+    public List<Orders> findAllBySupplierAndStatus(Integer supplierId, OrderStatus status) {
+        Suppliers supplier=suppliersRepository.findById(supplierId).orElseThrow(InvalidArgumentsException::new);
+        return ordersRepository.findAllBySupplierAndStatus(supplier, status);
+    }
+
+    @Override
+    public Optional<Orders> findById(Integer orderId) {
+        return ordersRepository.findById(orderId);
+    }
+
+    @Override
+    public Optional<Orders> updateStatus(Integer orderId, OrderStatus status) {
+        Orders order=ordersRepository.findById(orderId).orElseThrow(InvalidArgumentsException::new);
+        if(status.equals(OrderStatus.CREATED))
+        {
+            throw new InvalidArgumentsException();
+        }
+        if(status.equals(OrderStatus.APPROVED) && !order.getStatus().equals(OrderStatus.CREATED))
+        {
+            throw new InvalidArgumentsException();
+        }
+        if(status.equals(OrderStatus.REJECTED) && !order.getStatus().equals(OrderStatus.CREATED))
+        {
+            throw new InvalidArgumentsException();
+        }
+        if(status.equals(OrderStatus.IN_PROGRESS) && !order.getStatus().equals(OrderStatus.APPROVED))
+        {
+            throw new InvalidArgumentsException();
+        }
+        if(status.equals(OrderStatus.DELIVERED))
+        {
+            if(!order.getStatus().equals(OrderStatus.IN_PROGRESS))
+            {
+                throw new InvalidArgumentsException();
+            }
+            order.getArticlesList().forEach(orderedArticles -> orderedArticles.setArticlestatus(ArticleStatus.DELIVERED));
+        }
+        if(status.equals(OrderStatus.PROCESSED))
+        {
+            if(!order.getStatus().equals(OrderStatus.DELIVERED))
+            {
+                throw new InvalidArgumentsException();
+            }
+            if(order.getArticlesList().stream().anyMatch(orderedArticles -> !orderedArticles.getArticlestatus().equals(ArticleStatus.PROCESSED)))
+            {
+                throw new InvalidArgumentsException();
+            }
+        }
+        if(status.equals(OrderStatus.CANCELED))
+        {
+            if(order.getStatus().equals(OrderStatus.DELIVERED) || order.getStatus().equals(OrderStatus.PROCESSED))
+            {
+                throw new InvalidArgumentsException();
+            }
+        }
+        order.setStatus(status);
+        return Optional.of(ordersRepository.save(order));
+    }
+
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/QuestionServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/QuestionServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/QuestionServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,70 @@
+package com.bazi.fullystocked.Services.Implementations;
+
+import com.bazi.fullystocked.Models.Exceptions.InvalidArgumentsException;
+import com.bazi.fullystocked.Models.Managers;
+import com.bazi.fullystocked.Models.Questions;
+import com.bazi.fullystocked.Models.StoredArticles;
+import com.bazi.fullystocked.Models.Workers;
+import com.bazi.fullystocked.Repositories.ManagersRepository;
+import com.bazi.fullystocked.Repositories.QuestionsRepository;
+import com.bazi.fullystocked.Repositories.StoredArticlesRepository;
+import com.bazi.fullystocked.Repositories.WorkersRepository;
+import com.bazi.fullystocked.Services.QuestionsService;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class QuestionServiceImpl implements QuestionsService {
+    private final QuestionsRepository questionsRepository;
+    private final WorkersRepository workersRepository;
+    private final ManagersRepository managersRepository;
+    private final StoredArticlesRepository storedArticlesRepository;
+
+    public QuestionServiceImpl(QuestionsRepository questionsRepository, WorkersRepository workersRepository, ManagersRepository managersRepository, StoredArticlesRepository storedArticlesRepository) {
+        this.questionsRepository = questionsRepository;
+        this.workersRepository = workersRepository;
+        this.managersRepository = managersRepository;
+        this.storedArticlesRepository = storedArticlesRepository;
+    }
+
+    @Override
+    public Optional<Questions> create(String text, Integer workerid, Integer managerid) {
+        Workers worker=workersRepository.findById(workerid).orElseThrow(InvalidArgumentsException::new);
+        Managers manager=managersRepository.findById(managerid).orElseThrow(InvalidArgumentsException::new);
+        if(text==null || text.isEmpty())
+        {
+            throw new InvalidArgumentsException();
+        }
+        return Optional.of(new Questions(text, worker, manager));
+    }
+
+    @Override
+    @Transactional
+    public Optional<Questions> addArticle(Integer questionid, Integer sarticleid) {
+        Questions question=questionsRepository.findById(questionid).orElseThrow(InvalidArgumentsException::new);
+        StoredArticles article=storedArticlesRepository.findById(sarticleid).orElseThrow(InvalidArgumentsException::new);
+        question.getStoredarticlesList().add(article);
+        questionsRepository.save(question);
+        return Optional.of(question);
+    }
+
+    @Override
+    public List<Questions> findAllByManager(Integer managerId) {
+        Managers manager=managersRepository.findById(managerId).orElseThrow(InvalidArgumentsException::new);
+        return questionsRepository.findAllByManager(manager);
+    }
+
+    @Override
+    public List<Questions> findAllByWorker(Integer workerId) {
+        Workers worker=workersRepository.findById(workerId).orElseThrow(InvalidArgumentsException::new);
+        return questionsRepository.findAllByWorker(worker);
+    }
+
+    @Override
+    public Optional<Questions> findById(Integer questionId) {
+        return questionsRepository.findById(questionId);
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/StoredArticlesServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/StoredArticlesServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/StoredArticlesServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,64 @@
+package com.bazi.fullystocked.Services.Implementations;
+
+import com.bazi.fullystocked.Models.Enumerations.ArticleStatus;
+import com.bazi.fullystocked.Models.Enumerations.OrderStatus;
+import com.bazi.fullystocked.Models.Exceptions.InvalidArgumentsException;
+import com.bazi.fullystocked.Models.OrderedArticles;
+import com.bazi.fullystocked.Models.SqlViews.ArticlesReport;
+import com.bazi.fullystocked.Models.SqlViews.SupplierSuppliesArticleReport;
+import com.bazi.fullystocked.Models.StoredArticles;
+import com.bazi.fullystocked.Repositories.ArticlesReportRepository;
+import com.bazi.fullystocked.Repositories.OrderedArticlesRepository;
+import com.bazi.fullystocked.Repositories.StoredArticlesRepository;
+import com.bazi.fullystocked.Repositories.SupplierSuppliesArticleRepository;
+import com.bazi.fullystocked.Services.OrdersService;
+import com.bazi.fullystocked.Services.StoredArticlesService;
+import org.springframework.stereotype.Service;
+
+import javax.transaction.Transactional;
+import java.util.List;
+import java.util.Optional;
+
+@Service
+public class StoredArticlesServiceImpl implements StoredArticlesService {
+    private final SupplierSuppliesArticleRepository supplierSuppliesArticleRepository;
+    private final OrderedArticlesRepository orderedArticlesRepository;
+    private final StoredArticlesRepository storedArticlesRepository;
+    private final OrdersService ordersService;
+    private final ArticlesReportRepository articlesReportRepository;
+
+    public StoredArticlesServiceImpl(SupplierSuppliesArticleRepository supplierSuppliesArticleRepository, OrderedArticlesRepository orderedArticlesRepository, StoredArticlesRepository storedArticlesRepository, OrdersService ordersService, ArticlesReportRepository articlesReportRepository) {
+        this.supplierSuppliesArticleRepository = supplierSuppliesArticleRepository;
+        this.orderedArticlesRepository = orderedArticlesRepository;
+        this.storedArticlesRepository = storedArticlesRepository;
+        this.ordersService = ordersService;
+        this.articlesReportRepository = articlesReportRepository;
+    }
+
+    @Override
+    public List<SupplierSuppliesArticleReport> findAllBySupplier(Integer supplierId) {
+        return supplierSuppliesArticleRepository.findAllById_Userid(supplierId);
+    }
+
+    @Override
+    @Transactional
+    public Optional<StoredArticles> updateFromOrder(Integer oarticleid) {
+        OrderedArticles orderedArticle=orderedArticlesRepository.findById(oarticleid).orElseThrow(InvalidArgumentsException::new);
+        if(!orderedArticle.getArticlestatus().equals(ArticleStatus.DELIVERED))
+        {
+            throw new InvalidArgumentsException();
+        }
+        StoredArticles storedArticle=storedArticlesRepository.findAllByArticleAndLocations(orderedArticle.getArticle(), orderedArticle.getLocation()).get(0);
+        storedArticle.setQuantity(storedArticle.getQuantity()+ orderedArticle.getQuantity());
+        orderedArticle.setArticlestatus(ArticleStatus.PROCESSED);
+        ordersService.updateStatus(orderedArticle.getOrder().getOrderid(), OrderStatus.PROCESSED);
+        storedArticlesRepository.save(storedArticle);
+        orderedArticlesRepository.save(orderedArticle);
+        return Optional.of(storedArticle);
+    }
+
+    @Override
+    public List<ArticlesReport> findByLocation(Integer locationId) {
+        return articlesReportRepository.findAllByLocationid(locationId);
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/SuppliersServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/SuppliersServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/SuppliersServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,22 @@
+package com.bazi.fullystocked.Services.Implementations;
+
+import com.bazi.fullystocked.Models.Suppliers;
+import com.bazi.fullystocked.Repositories.SuppliersRepository;
+import com.bazi.fullystocked.Services.SuppliersService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class SuppliersServiceImpl implements SuppliersService {
+    private final SuppliersRepository suppliersRepository;
+
+    public SuppliersServiceImpl(SuppliersRepository suppliersRepository) {
+        this.suppliersRepository = suppliersRepository;
+    }
+
+    @Override
+    public List<Suppliers> findAll() {
+        return suppliersRepository.findAll();
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/WorkersServiceImpl.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/WorkersServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/Implementations/WorkersServiceImpl.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,30 @@
+package com.bazi.fullystocked.Services.Implementations;
+
+import com.bazi.fullystocked.Models.Exceptions.InvalidArgumentsException;
+import com.bazi.fullystocked.Models.Locations;
+import com.bazi.fullystocked.Models.Workers;
+import com.bazi.fullystocked.Repositories.LocationsRepository;
+import com.bazi.fullystocked.Repositories.WorkersRepository;
+import com.bazi.fullystocked.Services.WorkersService;
+import org.springframework.stereotype.Service;
+
+import java.util.Optional;
+
+@Service
+public class WorkersServiceImpl implements WorkersService {
+    private final WorkersRepository workersRepository;
+    private final LocationsRepository locationsRepository;
+
+    public WorkersServiceImpl(WorkersRepository workersRepository, LocationsRepository locationsRepository) {
+        this.workersRepository = workersRepository;
+        this.locationsRepository = locationsRepository;
+    }
+
+    @Override
+    public Optional<Workers> assignLocation(Integer workerId, Integer locationId) {
+        Workers worker=workersRepository.findById(workerId).orElseThrow(InvalidArgumentsException::new);
+        Locations location=locationsRepository.findById(locationId).orElseThrow(InvalidArgumentsException::new);
+        worker.setLocation(location);
+        return Optional.of(worker);
+    }
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/InvoicesService.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/InvoicesService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/InvoicesService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,11 @@
+package com.bazi.fullystocked.Services;
+
+import com.bazi.fullystocked.Models.Invoices;
+
+import java.util.*;
+
+public interface InvoicesService {
+    Optional<Invoices> create(String customername, String customerphone, String street, int streetnumber, String city, Integer workerId);
+    Optional<Invoices> create(Integer workerId);
+    Optional<Invoices> addArticleToInvoice(Integer invoiceId, Integer articleId, int price, int quantity);
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/LocationsService.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/LocationsService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/LocationsService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,10 @@
+package com.bazi.fullystocked.Services;
+
+
+import com.bazi.fullystocked.Models.SqlViews.ArticlesAtLocationReport;
+
+import java.util.*;
+
+public interface LocationsService {
+    List<ArticlesAtLocationReport> findAllArticlesAtLocation(Integer locationid);
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/ManagersService.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/ManagersService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/ManagersService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,8 @@
+package com.bazi.fullystocked.Services;
+import com.bazi.fullystocked.Models.Managers;
+
+import java.util.*;
+
+public interface ManagersService {
+    List<Managers> findAll();
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/OrderedArticlesService.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/OrderedArticlesService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/OrderedArticlesService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,13 @@
+package com.bazi.fullystocked.Services;
+
+import com.bazi.fullystocked.Models.Enumerations.ArticleStatus;
+import com.bazi.fullystocked.Models.OrderedArticles;
+import com.bazi.fullystocked.Models.SqlViews.OrderedArticlesReport;
+import java.util.*;
+
+public interface OrderedArticlesService {
+    List<OrderedArticlesReport> findAllByOrder(Integer orderId);
+    Optional<OrderedArticles> update(Integer oarticleid, int price, int quantity);
+    List<OrderedArticlesReport> findByStatusAtLocation(ArticleStatus status, Integer locationid);
+    Optional<OrderedArticlesReport> findById(Integer oarticleid);
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/OrdersService.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/OrdersService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/OrdersService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,20 @@
+package com.bazi.fullystocked.Services;
+
+import com.bazi.fullystocked.Models.Enumerations.OrderPriority;
+import com.bazi.fullystocked.Models.Enumerations.OrderStatus;
+import com.bazi.fullystocked.Models.Orders;
+import java.util.*;
+
+public interface OrdersService {
+    Optional<Orders> create(OrderPriority priority, Integer managerId, Integer supplierId);
+    List<Orders> findAllByManager(Integer managerId);
+    List<Orders> findAllByManagerAndStatus(Integer managerId, OrderStatus status);
+    Optional<Orders> addArticleToOrder(int quantity, Integer locationId, Integer articleId, Integer orderId);
+    Optional<Orders> addManagerRemark(Integer orderId, String remark);
+    Optional<Orders> addSupplierRemark(Integer orderId, String remark);
+    List<Orders> findAllBySupplier(Integer supplierId);
+    List<Orders> findAllBySupplierAndStatus(Integer supplierId, OrderStatus status);
+    Optional<Orders> findById(Integer orderId);
+    Optional<Orders> updateStatus(Integer orderId, OrderStatus status);
+
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/QuestionsService.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/QuestionsService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/QuestionsService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,14 @@
+package com.bazi.fullystocked.Services;
+
+import com.bazi.fullystocked.Models.Questions;
+
+
+import java.util.*;
+
+public interface QuestionsService {
+    Optional<Questions> create(String text, Integer workerid, Integer managerid);
+    Optional<Questions> addArticle(Integer questionid, Integer sarticleid);
+    List<Questions> findAllByManager(Integer managerId);
+    List<Questions> findAllByWorker(Integer workerId);
+    Optional<Questions> findById(Integer questionId);
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/StoredArticlesService.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/StoredArticlesService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/StoredArticlesService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,14 @@
+package com.bazi.fullystocked.Services;
+
+
+import com.bazi.fullystocked.Models.SqlViews.ArticlesReport;
+import com.bazi.fullystocked.Models.SqlViews.SupplierSuppliesArticleReport;
+import com.bazi.fullystocked.Models.StoredArticles;
+
+import java.util.*;
+
+public interface StoredArticlesService {
+    List<SupplierSuppliesArticleReport> findAllBySupplier(Integer supplierId);
+    Optional<StoredArticles> updateFromOrder(Integer oarticleid);
+    List<ArticlesReport> findByLocation(Integer locationId);
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/SuppliersService.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/SuppliersService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/SuppliersService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,9 @@
+package com.bazi.fullystocked.Services;
+
+import com.bazi.fullystocked.Models.Suppliers;
+
+import java.util.*;
+
+public interface SuppliersService {
+    List<Suppliers> findAll();
+}
Index: FullyStocked/src/main/java/com/bazi/fullystocked/Services/WorkersService.java
===================================================================
--- FullyStocked/src/main/java/com/bazi/fullystocked/Services/WorkersService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
+++ FullyStocked/src/main/java/com/bazi/fullystocked/Services/WorkersService.java	(revision cd2209e5aa4d639e8411637bcf21efdd7fbecab6)
@@ -0,0 +1,8 @@
+package com.bazi.fullystocked.Services;
+
+import com.bazi.fullystocked.Models.Workers;
+import java.util.*;
+
+public interface WorkersService {
+    Optional<Workers> assignLocation(Integer workerId, Integer locationId);
+}
