Advertisement
Guest User

Untitled

a guest
Dec 13th, 2018
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 34.64 KB | None | 0 0
  1. import javafx.application.Application;
  2. import javafx.collections.FXCollections;
  3. import javafx.geometry.Insets;
  4. import javafx.scene.Scene;
  5. import javafx.scene.control.*;
  6. import javafx.scene.layout.*;
  7. import javafx.scene.text.Text;
  8. import javafx.stage.Stage;
  9.  
  10.  
  11. import java.sql.SQLException;
  12.  
  13. public class Main extends Application {
  14.     private Stage stage;
  15.     private BorderPane borderPane = new BorderPane();
  16.  
  17.     private InvoiceDAO invoiceDAO = new InvoiceDAO();
  18.     private ProductDAO productDAO = new ProductDAO();
  19.     private CustomerDAO customerDAO = new CustomerDAO();
  20.     private CategoryDAO categoryDAO = new CategoryDAO();
  21.     private AddressDAO addressDAO = new AddressDAO();
  22.  
  23.     private ListView<Invoice> invoices =        new ListView<>();
  24.     private ListView<Customer> customers =      new ListView<>();
  25.     private ListView<Product> products =        new ListView<>();
  26.     private ListView<Category> categories =     new ListView<>();
  27.  
  28.     public static void main(String[] args) throws SQLException {
  29.         StatementReader sr = new StatementReader();
  30.         launch(args);
  31.     }
  32.  
  33.     @Override
  34.     public void start(Stage primaryStage) {
  35.         stage = primaryStage;
  36.         createBorderPane();
  37.     }
  38.  
  39.     /**
  40.      * Metoden createBorderPane() lager brukergrensersnittet og alle elementene som skal i den.
  41.      */
  42.     public void createBorderPane() {
  43.         borderPane.setPadding(new Insets(0, 5, 5, 5));
  44.         ToolBar toolBar = new ToolBar();
  45.         borderPane.setTop(toolBar);
  46.  
  47.         //Lister
  48.         invoices.setItems(FXCollections.observableArrayList(invoiceDAO.getAllInvoices()));
  49.         customers.setItems(FXCollections.observableArrayList(customerDAO.getAllCustomers()));
  50.         products.setItems(FXCollections.observableArrayList(productDAO.getAllProducts()));
  51.         categories.setItems(FXCollections.observableArrayList(categoryDAO.getAllCategories()));
  52.  
  53.  
  54.         //Invoice
  55.         invoices.getSelectionModel().selectFirst();
  56.         invoices.getSelectionModel().selectedItemProperty().addListener((v, oldValue, newValue) ->
  57.                                                                             borderPane.setCenter(setInvoice(newValue.getID())));
  58.  
  59.         HBox invoiceBody = setInvoice(invoices.getSelectionModel().getSelectedItem().getID());
  60.  
  61.         VBox insertInvoice = setNewInvoice(invoiceBody);
  62.  
  63.  
  64.         HBox iButtons = new HBox();
  65.         Button iAdd = new Button("new Invoice");
  66.         Button iEdit = new Button("edit Invoice");
  67.         iAdd.setOnAction(event -> borderPane.setCenter(insertInvoice));
  68.         iEdit.setOnAction(event -> borderPane.setCenter(editInvoice(invoices.getSelectionModel().getSelectedItem(), invoiceBody)));
  69.  
  70.         iButtons.getChildren().setAll(iAdd, iEdit);
  71.  
  72.         borderPane.setCenter(invoiceBody);
  73.         borderPane.setLeft(invoices);
  74.         borderPane.setBottom(iButtons);
  75.  
  76.         //Customer
  77.         customers.getSelectionModel().selectFirst();
  78.         customers.getSelectionModel().selectedItemProperty().addListener(((v, oldValue, newValue) ->
  79.                                                                             borderPane.setCenter(setCustomer(newValue.getID()))));
  80.  
  81.         HBox customerBody = setCustomer(customers.getSelectionModel().getSelectedItem().getID());
  82.         customerBody.setPadding(new Insets(5));
  83.  
  84.         HBox cButtons = new HBox();
  85.         Button cAdd = new Button("new Customer");
  86.         Button cEdit = new Button("edit Customer");
  87.         cAdd.setOnAction(event -> borderPane.setCenter(setNewCustomer(customerBody)));
  88.         cEdit.setOnAction(event -> borderPane.setCenter(editCustomer(customers.getSelectionModel().getSelectedItem(), customerBody)));
  89.         cButtons.getChildren().setAll(cAdd, cEdit);
  90.  
  91.  
  92.         //Products
  93.         products.getSelectionModel().selectFirst();
  94.         products.getSelectionModel().selectedItemProperty().addListener(((v, oldValue, newValue) ->
  95.                                                                             borderPane.setCenter(setProduct(newValue.getID()))));
  96.  
  97.         HBox productBody = setProduct(products.getSelectionModel().getSelectedItem().getID());
  98.  
  99.         HBox pButtons = new HBox();
  100.         Button pAdd = new Button("new Product");
  101.         Button pEdit = new Button("edit Product");
  102.         pAdd.setOnAction(event -> borderPane.setCenter(setNewProduct(productBody)));
  103.         pEdit.setOnAction(event -> borderPane.setCenter(editProduct(products.getSelectionModel().getSelectedItem(), invoiceBody)));
  104.  
  105.         pButtons.getChildren().setAll(pAdd, pEdit);
  106.  
  107.         //Categories
  108.         categories.getSelectionModel().selectFirst();
  109.         categories.getSelectionModel().selectedItemProperty().addListener(((v, oldValue, newValue) ->
  110.                                                                             borderPane.setCenter(setCategory(newValue.getID()))));
  111.  
  112.         HBox categoryBody = setCategory(categories.getSelectionModel().getSelectedItem().getID());
  113.  
  114.         HBox catButtons = new HBox();
  115.         Button catAdd = new Button("new Category");
  116.         Button catEdit = new Button("edit Category");
  117.         catAdd.setOnAction(event -> borderPane.setCenter(setNewCategory(categoryBody)));
  118.         catEdit.setOnAction(event -> borderPane.setCenter(editCategory(categories.getSelectionModel().getSelectedItem(), categoryBody)));
  119.  
  120.         catButtons.getChildren().setAll(catAdd, catEdit);
  121.  
  122.         //Deloppgave 5
  123.         ListView<Customer> ibycList = new ListView<>();
  124.         ibycList.setItems(FXCollections.observableArrayList(customerDAO.getAllCustomers()));
  125.         ibycList.getSelectionModel().selectFirst();
  126.         ibycList.getSelectionModel().selectedItemProperty().addListener((v, oldValue, newValue) ->
  127.                                                                         borderPane.setCenter(invoicesByCustomers(newValue.getID())));
  128.  
  129.  
  130.         ListView<Customer> pbycList = new ListView<>();
  131.         pbycList.setItems(FXCollections.observableArrayList(customerDAO.getAllCustomers()));
  132.         pbycList.getSelectionModel().selectFirst();
  133.         pbycList.getSelectionModel().selectedItemProperty().addListener((v, oldValue, newValue) ->
  134.                                                                         borderPane.setCenter(productByCustomers(newValue.getID())));
  135.  
  136.         //Toolbar buttons
  137.         Button invoiceButton = new Button("Invoice");
  138.             invoiceButton.setOnAction(event -> {    borderPane.setCenter(invoiceBody);
  139.                                                     borderPane.setLeft(invoices);
  140.                                                     borderPane.setBottom(iButtons);});
  141.  
  142.         Button customerButton = new Button("Customer");
  143.             customerButton.setOnAction(event -> {   borderPane.setCenter(customerBody);
  144.                                                     borderPane.setLeft(customers);
  145.                                                     borderPane.setBottom(cButtons);});
  146.  
  147.         Button productButton = new Button("Product");
  148.             productButton.setOnAction(event -> {    borderPane.setCenter(productBody);
  149.                                                     borderPane.setLeft(products);
  150.                                                     borderPane.setBottom(pButtons);});
  151.  
  152.         Button categoryButton = new Button("Category");
  153.             categoryButton.setOnAction(event -> {   borderPane.setCenter(categoryBody);
  154.                                                     borderPane.setLeft(categories);
  155.                                                     borderPane.setBottom(catButtons);});
  156.  
  157.         Button iByCButton = new Button("Invoices by Customer");
  158.             iByCButton.setOnAction(event -> {       borderPane.setCenter(invoicesByCustomers(
  159.                                                     pbycList.getSelectionModel().getSelectedItem().getID()));
  160.                                                     borderPane.setLeft(ibycList);
  161.                                                     borderPane.setBottom(null);});
  162.  
  163.         Button cByPButton = new Button("Products by Customer");
  164.             cByPButton.setOnAction(event -> {       borderPane.setCenter(productByCustomers(
  165.                                                     pbycList.getSelectionModel().getSelectedItem().getID()));
  166.                                                     borderPane.setLeft(pbycList);
  167.                                                     borderPane.setBottom(null);});
  168.  
  169.         toolBar.getItems().addAll(invoiceButton, customerButton, productButton, categoryButton, iByCButton, cByPButton);
  170.  
  171.  
  172.         //Insets
  173.         invoiceBody.setPadding(new Insets(10));
  174.         customerBody.setPadding(new Insets(10));
  175.         productBody.setPadding(new Insets(10));
  176.         categoryBody.setPadding(new Insets(10));
  177.  
  178.         iButtons.setPadding(new Insets(5, 10, 5, 10));
  179.         cButtons.setPadding(new Insets(5, 10, 5, 10));
  180.         pButtons.setPadding(new Insets(5, 10, 5, 10));
  181.         catButtons.setPadding(new Insets(5, 10, 5, 10));
  182.  
  183.         toolBar.setPadding(new Insets(5, 10, 5, 10));
  184.  
  185.         //Stage
  186.         stage.setScene(new Scene(borderPane, 850, 510));
  187.         stage.show();
  188.     }
  189.  
  190.  
  191.  
  192.  
  193.     /**
  194.      * Metoden setInvoice() returnerer en HBox som skal brukes som centre i borderPane.
  195.      *
  196.      * @param id
  197.      * @return HBox med invoicen med riktig ID
  198.      */
  199.     public HBox setInvoice(int id) {
  200.         Invoice invoice = invoiceDAO.getInvoice(id);
  201.         Customer customer = customerDAO.getCustomer(invoice.getCustomer());
  202.  
  203.         String products = "";
  204.         double sum = 0;
  205.         for(Product p : invoice.getProducts()){
  206.             products += '"' + p.getName() + '"' + "\n";
  207.             sum += p.getPrice();
  208.         }
  209.  
  210.         VBox lVbox = new VBox(new Text( "Invoice id:" + "\n" +
  211.                                         "Date:" + "\n" +
  212.                                         "Customer:" + "\n" +
  213.                                         "tlf:" + "\n" +
  214.                                         "Price:"+ "\n" +
  215.                                         "Products:"));
  216.  
  217.         VBox rVbox = new VBox(new Text( invoice.getID() + "\n" +
  218.                                         invoice.getDate() + "\n" +
  219.                                         customer.getName() + "\n" +
  220.                                         customer.getPhonenumber() + "\n" +
  221.                                         sum + "kr" + "\n" +
  222.                                         products));
  223.         rVbox.setPadding(new Insets(0, 0, 0, 10));
  224.  
  225.  
  226.         HBox iHbox = new HBox();
  227.         iHbox.getChildren().addAll(lVbox, rVbox);
  228.         iHbox.setPadding(new Insets(0, 5, 0, 5));
  229.         return iHbox;
  230.     }
  231.  
  232.     /**
  233.      * Metoden setNewInvoice() returnerer en VBox som lar deg danne nye Invoice-objekter
  234.      * Denne skal brukes som center i borderPane
  235.      *
  236.      * @param invoiceBody HBox-en vi går tilbake til når vi trykker "back"-knappen
  237.      * @return  VBox
  238.      */
  239.     public VBox setNewInvoice(HBox invoiceBody){
  240.         TextField iCustomer = new TextField();
  241.         TextField iDate = new TextField();
  242.         TextField prod = new TextField();
  243.  
  244.         HBox customerBox = new HBox(new Label("Customer ID: " + "\t"), iCustomer);
  245.         HBox dateBox = new HBox(new Label("Date: " + "\t" + "\t"), iDate, new Label(" dd.mm.yyyy"));
  246.         HBox prodBox = new HBox(new Label("Product ID: " + "\t"), prod, new Label(" enter each ID separated by only a #-symbol."));
  247.  
  248.         Button insert = new Button("insert");
  249.  
  250.         Alert alert = new Alert(Alert.AlertType.ERROR);
  251.  
  252.         insert.setOnAction(event -> {
  253.             String[] products = prod.getText().split("#");
  254.             boolean allProductsExist = true;
  255.             for(String p : products) {
  256.                 int id = Integer.parseInt(p.trim());
  257.                 if (productDAO.getProduct(id) == null) {
  258.                     allProductsExist = false;
  259.                 }
  260.             }
  261.  
  262.             if(iCustomer.getText().isEmpty() || iDate.getText().isEmpty() || prod.getText().isEmpty()){
  263.                 alert.setContentText("All fields must be filled");
  264.                 alert.showAndWait();
  265.             } else if (customerDAO.getCustomer(Integer.parseInt(iCustomer.getText())) == null){
  266.                 alert.setContentText("Customer not found");
  267.                 alert.showAndWait();
  268.             } else if (iDate.getText().length() < 10){
  269.                 alert.setContentText("Invalid date (dd.mm.yyyy)");
  270.                 alert.showAndWait();
  271.             } else if(!allProductsExist){
  272.                 alert.setContentText("Product not found");
  273.                 alert.showAndWait();
  274.             } else{
  275.  
  276.                 Invoice invoice = new Invoice(Integer.parseInt(iCustomer.getText()), iDate.getText());
  277.                 for(String p : products) {
  278.                     int id = Integer.parseInt(p.trim());
  279.                     invoice.getProducts().add(productDAO.getProduct(id));
  280.                 }
  281.  
  282.                 int invoiceID = invoiceDAO.insertInvoice(invoice);
  283.                 invoice.setID(invoiceID);
  284.                 invoices.getItems().add(invoice);
  285.  
  286.                 iCustomer.clear();
  287.                 iDate.clear();
  288.                 prod.clear();
  289.             }});
  290.  
  291.         Button back = new Button("back");
  292.         back.setOnAction(event -> borderPane.setCenter(invoiceBody));
  293.  
  294.         VBox ibox = new VBox();
  295.         ibox.getChildren().setAll(customerBox, dateBox, prodBox, insert, back);
  296.         return ibox;
  297.     }
  298.  
  299.     /**
  300.      * Metoden editInvoice() lar deg redigere ett Invoice-objekt. Disse endringene skjer også i databasen.
  301.      *
  302.      * @param invoice kunden vi vil endre
  303.      * @param invoiceBody bodien vi vil returnere til når vi trykker "back"-knappen
  304.      * @return VBox som lar deg redigere ett Customer-objekt
  305.      */
  306.     public VBox editInvoice(Invoice invoice, HBox invoiceBody) {
  307.         TextField iCustomer = new TextField(invoice.getCustomer() + "");
  308.         TextField iDate = new TextField(invoice.getDate());
  309.  
  310.         HBox customerBox = new HBox(new Label("Edit Customer by ID: " + "\t"), iCustomer);
  311.         HBox dateBox = new HBox(new Label("Edit Date: " + "\t" + "\t" + "\t"),iDate);
  312.  
  313.         Alert alert = new Alert(Alert.AlertType.ERROR);
  314.  
  315.         Button update = new Button("update");
  316.         update.setOnAction(event -> {
  317.             if(iCustomer.getText().isEmpty() || iDate.getText().isEmpty()){
  318.                 alert.setContentText("All fields must be filled");
  319.                 alert.showAndWait();
  320.             } else if (iDate.getText().length() < 10){
  321.                 alert.setContentText("Invalid date (dd.mm.yyyy)");
  322.                 alert.showAndWait();
  323.             } else if (customerDAO.getCustomer(Integer.parseInt(iCustomer.getText())) == null){
  324.                 alert.setContentText("Customer not found");
  325.                 alert.showAndWait();
  326.             } else {
  327.             invoice.setCustomer(Integer.parseInt(iCustomer.getText()));
  328.             invoice.setDate(iDate.getText());
  329.  
  330.             invoiceDAO.updateInvoice(invoice);
  331.             borderPane.setCenter(setInvoice(invoice.getID()));
  332.         }});
  333.  
  334.         Button back = new Button("back");
  335.             back.setOnAction(event -> borderPane.setCenter(invoiceBody));
  336.  
  337.         HBox iNavigation = new HBox();
  338.         iNavigation.getChildren().addAll(update, back);
  339.  
  340.         VBox iBox = new VBox();
  341.         iBox.getChildren().addAll(customerBox, dateBox, iNavigation);
  342.  
  343.  
  344.         return iBox;
  345.     }
  346.  
  347.  
  348.     /**
  349.      * Metoden setCustomer() returnerer en HBox som skal brukes som centre i borderPane.
  350.      * Address blir også hentet ut her.
  351.      *
  352.      * @param id
  353.      * @return HBox med customer med riktig ID
  354.      */
  355.     public HBox setCustomer(int id) {
  356.         Customer customer = customerDAO.getCustomer(id);
  357.  
  358.         VBox lVbox = new VBox(new Text( "Customer ID: " + "\n" +
  359.                                         "Customer name: " + "\n" +
  360.                                         "Phone number: " + "\n" +
  361.                                         "Address: " + "\n" +
  362.                                         "Billing account: "));
  363.  
  364.         VBox rVbox = new VBox(new Text( customer.getID() + "\n" +
  365.                                         customer.getName() + "\n" +
  366.                                         customer.getPhonenumber() + "\n" +
  367.                                         customer.getAddress().getAddress() + "\n" +
  368.                                         customer.getBillingAccount() + "\n"));
  369.  
  370.  
  371.  
  372.         HBox cHbox = new HBox();
  373.         cHbox.getChildren().addAll(lVbox, rVbox);
  374.         cHbox.setPadding(new Insets(0, 5, 0, 5));
  375.         return cHbox;
  376.     }
  377.  
  378.     /**
  379.      * Metoden setNewCustomer() returnerer en VBox som lar deg danne nye Customer-objekter
  380.      * Denne skal brukes som center i borderPane.
  381.      * Her kan du også lage nye Address-objekter.
  382.      *
  383.      * @param customerBody HBox-en vi går tilbake til når vi trykker "back"-knappen
  384.      * @return  VBox
  385.      */
  386.     public VBox setNewCustomer(HBox customerBody){
  387.         TextField cName = new TextField();
  388.         TextField cNumber = new TextField();
  389.         TextField cAccount = new TextField();
  390.         TextField cAdrStreet = new TextField();
  391.         TextField cAdrNumber = new TextField();
  392.         TextField cAdrCode = new TextField();
  393.         TextField cAdrTown = new TextField();
  394.  
  395.         HBox nameBox = new HBox(new Label("Customer name: " + "\t"), cName);
  396.         HBox numberBox = new HBox(new Label("Phone number: " + "\t"), cNumber);
  397.         HBox accountBox = new HBox(new Label("Billing Account: " + "\t"), cAccount);
  398.         HBox adrStreetBox = new HBox(new Label("Street name: " + "\t" + "\t"), cAdrStreet);
  399.         HBox adrNumberBox = new HBox(new Label("Street number: " + "\t"), cAdrNumber);
  400.         HBox adrCodeBox = new HBox(new Label("Area code: " + "\t" + "\t"), cAdrCode);
  401.         HBox adrTownBox = new HBox(new Label("town: " + "\t" + "\t" + "\t"), cAdrTown);
  402.  
  403.         Button insert = new Button("insert");
  404.  
  405.         Alert alert = new Alert(Alert.AlertType.ERROR);
  406.         alert.setHeaderText(null);
  407.  
  408.         insert.setOnAction(event -> {
  409.             if(cName.getText().isEmpty() || cNumber.getText().isEmpty() || cAccount.getText().isEmpty()
  410.                 || cAdrNumber.getText().isEmpty() || cAdrStreet.getText().isEmpty() || cAdrCode.getText().isEmpty()
  411.                 || cAdrTown.getText().isEmpty()) {
  412.                 alert.setContentText("All fields must be filled");
  413.                 alert.showAndWait();
  414.             } else {
  415.                 Address address = new Address(cAdrNumber.getText(), cAdrStreet.getText(), cAdrCode.getText(), cAdrTown.getText());
  416.  
  417.                 int addressID = addressDAO.insertAddress(address);
  418.                 address.setID(addressID);
  419.  
  420.                 Customer customer = new Customer(cName.getText(), cNumber.getText(), cAccount.getText(), addressID);
  421.                 int customerID = customerDAO.insertCustomer(customer);
  422.                 customer.setID(customerID);
  423.  
  424.                 customers.getItems().add(customer);
  425.  
  426.                 cName.clear();
  427.                 cNumber.clear();
  428.                 cAccount.clear();
  429.                 cAdrStreet.clear();
  430.                 cAdrNumber.clear();
  431.                 cAdrCode.clear();
  432.                 cAdrTown.clear();
  433.             }});
  434.  
  435.         Button back = new Button("back");
  436.         back.setOnAction(event -> borderPane.setCenter(customerBody));
  437.  
  438.         VBox ibox = new VBox();
  439.         ibox.getChildren().setAll(nameBox, numberBox, accountBox, adrStreetBox, adrNumberBox, adrCodeBox, adrTownBox, insert, back);
  440.         ibox.setPadding(new Insets(10));
  441.         return ibox;
  442.     }
  443.  
  444.     /**
  445.      * Metoden editCustomer() lar deg redigere ett Customer-objekt. Disse endringene skjer også i databasen.
  446.      * Her kan du også redigere Address-objektet som tilhører Customer-objektet.
  447.      *
  448.      * @param customer kunden vi vil endre
  449.      * @param customerBody bodien vi vil returnere til når vi trykker "back"-knappen
  450.      * @return VBox som lar deg redigere ett Customer-objekt
  451.      */
  452.     private VBox editCustomer(Customer customer, HBox customerBody) {
  453.         Address address = customer.getAddress();
  454.  
  455.         TextField cName = new TextField(customer.getName());
  456.         TextField cNumber = new TextField(customer.getPhonenumber());
  457.         TextField cAccount = new TextField(customer.getBillingAccount());
  458.         TextField cAdrStreet = new TextField(address.getStreet());
  459.         TextField cAdrNumber = new TextField(address.getNumber());
  460.         TextField cAdrCode = new TextField(address.getPostalCode());
  461.         TextField cAdrTown = new TextField(address.getTown());
  462.  
  463.         HBox nameBox = new HBox(new Label("Edit Customer name: " + "\t"), cName);
  464.         HBox numberBox = new HBox(new Label("Edit Phone number: " + "\t"), cNumber);
  465.         HBox accountBox = new HBox(new Label("Edit Billing Account: " + "\t"), cAccount);
  466.         HBox adrStreetBox = new HBox(new Label("Edit Street name: " + "\t" + "\t"), cAdrStreet);
  467.         HBox adrNumberBox = new HBox(new Label("Edit Street number: " + "\t"), cAdrNumber);
  468.         HBox adrCodeBox = new HBox(new Label("Edit Area code: " + "\t" + "\t"), cAdrCode);
  469.         HBox adrTownBox = new HBox(new Label("Edit town: " + "\t" + "\t" + "\t"), cAdrTown);
  470.  
  471.         Alert alert = new Alert(Alert.AlertType.ERROR);
  472.  
  473.         Button update = new Button("update");
  474.         update.setOnAction(event -> {
  475.             if(cName.getText().isEmpty() || cNumber.getText().isEmpty() || cAccount.getText().isEmpty()
  476.                 || cAdrStreet.getText().isEmpty() || cAdrNumber.getText().isEmpty() || cAdrCode.getText().isEmpty()
  477.                 || cAdrTown.getText().isEmpty()) {
  478.                 alert.setContentText("All fields must be filled");
  479.                 alert.showAndWait();
  480.             } else {
  481.  
  482.                 address.setStreet(cAdrStreet.getText());
  483.                 address.setNumber(cAdrNumber.getText());
  484.                 address.setPostalCode(cAdrCode.getText());
  485.                 address.setTown(cAdrTown.getText());
  486.  
  487.                 customer.setName(cName.getText());
  488.                 customer.setPhonenumber(cNumber.getText());
  489.                 customer.setBillingAccount(cAccount.getText());
  490.                 customer.setAddress(address);
  491.  
  492.  
  493.                 customerDAO.updateCustomer(customer);
  494.                 addressDAO.updateAddress(address);
  495.  
  496.                 borderPane.setCenter(setCustomer(customer.getID()));
  497.             }});
  498.  
  499.         Button back = new Button("back");
  500.         back.setOnAction(event -> borderPane.setCenter(customerBody));
  501.  
  502.         HBox cNavigation = new HBox();
  503.         cNavigation.getChildren().addAll(update, back);
  504.  
  505.         VBox cBox = new VBox();
  506.         cBox.getChildren().addAll(nameBox, numberBox, accountBox, adrStreetBox, adrNumberBox, adrCodeBox, adrTownBox, cNavigation);
  507.         cBox.setPadding(new Insets(10));
  508.         return cBox;
  509.     }
  510.  
  511.     /**
  512.      * Metoden setProduct() returnerer en HBox som skal brukes som centre i borderPane.
  513.      *
  514.      * @param id
  515.      * @return HBox med product med riktig ID
  516.      */
  517.     public HBox setProduct(int id){
  518.         Product product = productDAO.getProduct(id);
  519.         Category category = categoryDAO.getCategory(product.getCategory());
  520.  
  521.         VBox lVbox = new VBox(new Text( "Product ID: " + "\n" +
  522.                                         "Product category: " + "\n" +
  523.                                         "Product Name: " + "\n" +
  524.                                         "Product Description: " + "\n" +
  525.                                         "Price: "));
  526.  
  527.         VBox rVbox = new VBox(new Text( product.getID() + "\n" +
  528.                                         category.getName() + "\n" +
  529.                                         product.getName() + "\n" +
  530.                                         product.getDescription() + "\n" +
  531.                                         product.getPrice() + "kr"));
  532.  
  533.         HBox pHbox = new HBox();
  534.         pHbox.getChildren().addAll(lVbox, rVbox);
  535.         pHbox.setPadding(new Insets(10));
  536.         return pHbox;
  537.     }
  538.  
  539.     /**
  540.      * Metoden setNewProduct() returnerer en VBox som lar deg danne nye Product-objekter
  541.      * Denne skal brukes som center i borderPane
  542.      *
  543.      * @param productBody HBox-en vi går tilbake til når vi trykker "back"-knappen
  544.      * @return  VBox
  545.      */
  546.     private VBox setNewProduct(HBox productBody) {
  547.         TextField pName = new TextField();
  548.         TextField pDesc = new TextField();
  549.         TextField pPrice = new TextField();
  550.         TextField pCategory = new TextField();
  551.  
  552.         HBox nameBox = new HBox(new Label("Product Name: " + "\t" + "\t"), pName);
  553.         HBox descBox = new HBox(new Label("Product Description: " + "\t"), pDesc);
  554.         HBox priceBox = new HBox(new Label("Product Price: " + "\t" + "\t"), pPrice);
  555.         HBox categoryBox = new HBox(new Label("Category ID: " + "\t" + "\t" + "\t"), pCategory);
  556.  
  557.         Button insert = new Button("insert");
  558.  
  559.         Alert alert = new Alert(Alert.AlertType.ERROR);
  560.  
  561.         insert.setOnAction(event -> {
  562.             if(pName.getText().isEmpty() || pDesc.getText().isEmpty() || pPrice.getText().isEmpty() || pCategory.getText().isEmpty()){
  563.                 alert.setContentText("All fields must be filled");
  564.                 alert.showAndWait();
  565.             } else if(Integer.parseInt(pPrice.getText()) < 0) {
  566.                 alert.setContentText("Price must be greater than zero");
  567.                 alert.showAndWait();
  568.             } else if(categoryDAO.getCategory(Integer.parseInt(pCategory.getText())) == null) {
  569.                 alert.setContentText("Category not found");
  570.                 alert.showAndWait();
  571.             } else {
  572.                 Product product = new Product(pName.getText(), pDesc.getText(), Integer.parseInt(pPrice.getText()), Integer.parseInt(pCategory.getText()));
  573.                 int productID = productDAO.insertProduct(product);
  574.                 product.setID(productID);
  575.                 products.getItems().add(product);
  576.  
  577.                 pName.clear();
  578.                 pDesc.clear();
  579.                 pPrice.clear();
  580.                 pCategory.clear();
  581.             }});
  582.  
  583.         Button back = new Button("back");
  584.         back.setOnAction(event -> borderPane.setCenter(productBody));
  585.         HBox pNavigation = new HBox();
  586.         pNavigation.getChildren().addAll(insert, back);
  587.  
  588.         VBox pbox = new VBox();
  589.         pbox.getChildren().setAll(nameBox, descBox, priceBox, categoryBox, pNavigation);
  590.         pbox.setPadding(new Insets(10));
  591.         return pbox;
  592.     }
  593.  
  594.     /**
  595.      * Metoden editProduct() lar deg redigere ett Product-objekt. Disse endringene skjer også i databasen.
  596.      *
  597.      * @param product kunden vi vil endre
  598.      * @param productBody bodien vi vil returnere til når vi trykker "back"-knappen
  599.      * @return VBox som lar deg redigere ett Customer-objekt
  600.      */
  601.     private VBox editProduct(Product product, HBox productBody) {
  602.         TextField pName = new TextField(product.getName());
  603.         TextField pDesc = new TextField(product.getDescription());
  604.         TextField pPrice = new TextField(product.getPrice() + "");
  605.         TextField pCat = new TextField(product.getCategory() + "");
  606.  
  607.         HBox nameBox = new HBox(new Label("Edit Product name: " + "\t"), pName);
  608.         HBox descBox = new HBox(new Label("Edit description " + "\t" + "\t"),pDesc);
  609.         HBox priceBox = new HBox(new Label("Edit price " + "\t" + "\t" + "\t"),pPrice);
  610.         HBox catBox = new HBox(new Label("Edit Category by ID: " + "\t"),pCat);
  611.  
  612.         Alert alert = new Alert(Alert.AlertType.ERROR);
  613.  
  614.         Button update = new Button("update");
  615.         update.setOnAction(event -> {
  616.             if(pName.getText().isEmpty() || pDesc.getText().isEmpty()
  617.                 || pPrice.getText().isEmpty() || pCat.getText().isEmpty()){
  618.                 alert.setContentText("All fields must be filled");
  619.                 alert.showAndWait();
  620.             } else if (categoryDAO.getCategory(Integer.parseInt(pCat.getText())) == null){
  621.                 alert.setContentText("Category not found");
  622.                 alert.showAndWait();
  623.             } else if (Double.parseDouble(pPrice.getText()) <= 0){
  624.                 alert.setContentText("Price must be greater than 0");
  625.                 alert.showAndWait();
  626.             } else {
  627.                 product.setName(pName.getText());
  628.                 product.setDescription(pDesc.getText());
  629.                 product.setPrice(Double.parseDouble(pPrice.getText()));
  630.                 product.setCategory(Integer.parseInt(pCat.getText()));
  631.  
  632.                 productDAO.updateProduct(product);
  633.                 borderPane.setCenter(setProduct(product.getID()));
  634.             }});
  635.  
  636.         Button back = new Button("back");
  637.         back.setOnAction(event -> borderPane.setCenter(productBody));
  638.  
  639.         HBox pNavigation = new HBox();
  640.         pNavigation.getChildren().addAll(update, back);
  641.  
  642.         VBox pBox = new VBox();
  643.         pBox.getChildren().addAll(nameBox, descBox, priceBox, catBox, pNavigation);
  644.         pBox.setPadding(new Insets(10));
  645.         return pBox;
  646.     }
  647.  
  648.     /**
  649.      * Metoden setCategory() returnerer en HBox som skal brukes som centre i borderPane.
  650.      * Denne metoden er del av deloppgave 5.
  651.      *
  652.      * @param id
  653.      * @return HBox med Category med riktig id, og en liste over produkter med den Category-en
  654.      */    public HBox setCategory(int id){
  655.         ListView<Product> categoryProducts = new ListView<>();
  656.  
  657.         Category category = categoryDAO.getCategory(id);
  658.  
  659.         for(Product p : products.getItems()){
  660.             if(p.getCategory() == category.getID()) {
  661.                 categoryProducts.getItems().add(p);
  662.             }
  663.         }
  664.  
  665.         VBox cVbox = new VBox();
  666.         cVbox.getChildren().addAll(new Label(category.getName()), categoryProducts);
  667.  
  668.         HBox cHbox = new HBox();
  669.         cHbox.getChildren().addAll(cVbox);
  670.         cHbox.setPadding(new Insets(10));
  671.         return cHbox;
  672.     }
  673.  
  674.     /**
  675.      * Metoden setNewCategory() returnerer en VBox som lar deg danne nye Category-objekter
  676.      * Denne skal brukes som center i borderPane
  677.      *
  678.      * @param categoryBody HBox-en vi går tilbake til når vi rykker "back"-knappen
  679.      * @return  VBox
  680.      */
  681.     public VBox setNewCategory(HBox categoryBody) {
  682.         TextField catName = new TextField();
  683.  
  684.         HBox nameBox = new HBox(new Label("Category name: " + "\t"), catName);
  685.  
  686.  
  687.         Button insert = new Button("insert");
  688.  
  689.         Alert alert = new Alert(Alert.AlertType.ERROR);
  690.  
  691.         insert.setOnAction(event -> {
  692.         if(catName.getText().isEmpty()){
  693.             alert.setContentText("All field must be filled");
  694.             alert.showAndWait();
  695.         } else {
  696.             Category category = new Category(catName.getText());
  697.             int categoryID = categoryDAO.insertCategory(category);
  698.             category.setID(categoryID);
  699.             System.out.println("new Category: " + category.getName());
  700.  
  701.             categories.getItems().add(category);
  702.  
  703.             catName.clear();
  704.         }});
  705.  
  706.         Button back = new Button("back");
  707.         back.setOnAction(event -> borderPane.setCenter(categoryBody));
  708.  
  709.         HBox catNavigation = new HBox();
  710.         catNavigation.getChildren().addAll(insert, back);
  711.  
  712.         VBox catBox = new VBox();
  713.         catBox.getChildren().addAll(nameBox, catNavigation);
  714.         catBox.setPadding(new Insets(10));
  715.         return catBox;
  716.     }
  717.  
  718.     /**
  719.      * Metoden editCategory() lar deg redigere ett Category-objekt. Disse endringene skjer også i databasen.
  720.      *
  721.      * @param category kunden vi vil endre
  722.      * @param categoryBody bodien vi vil returnere til når vi trykker "back"-knappen
  723.      * @return VBox som lar deg redigere ett Customer-objekt
  724.      */
  725.     private VBox editCategory(Category category, HBox categoryBody) {
  726.         TextField catName = new TextField(category.getName());
  727.  
  728.         HBox nameBox = new HBox(new Label("Edit Category name: " + "\t"), catName);
  729.  
  730.         Alert alert = new Alert(Alert.AlertType.ERROR);
  731.  
  732.         Button update = new Button("update");
  733.             update.setOnAction(event -> {
  734.                 if(catName.getText().isEmpty()){
  735.                     alert.setContentText("All fields must be filled");
  736.                     alert.showAndWait();
  737.                 } else {
  738.                     category.setName(catName.getText());
  739.                     categoryDAO.updateCategory(category);
  740.                     borderPane.setCenter(setCategory(category.getID()));
  741.                 }});
  742.  
  743.         Button back = new Button("back");
  744.              back.setOnAction(event -> borderPane.setCenter(categoryBody));
  745.  
  746.         HBox catNavigation = new HBox();
  747.         catNavigation.getChildren().addAll(update, back);
  748.  
  749.         VBox cBox = new VBox();
  750.         cBox.getChildren().addAll(nameBox, catNavigation);
  751.         cBox.setPadding(new Insets(10));
  752.         return cBox;
  753.     }
  754.  
  755.     /**
  756.      * Metoden invoicesByCustomers() returnerer en HBox som skal brukes som centre i borderPane.
  757.      * Denne metoden er del av deloppgave 5
  758.      *
  759.      * @param id
  760.      * @return HBox som viser invoices som er knyttet til Customer med riktig id
  761.      */
  762.     public HBox invoicesByCustomers(int id){
  763.         ListView<Invoice> customerInvoices = new ListView<>();
  764.  
  765.         Customer customer = customerDAO.getCustomer(id);
  766.  
  767.         for(Invoice i : invoices.getItems()){
  768.             if(i.getCustomer() == customer.getID()){
  769.                 customerInvoices.getItems().add(i);
  770.             }
  771.         }
  772.  
  773.         VBox ibcVbox = new VBox();
  774.         ibcVbox.getChildren().addAll(new Label(customer.getName()), customerInvoices);
  775.  
  776.         HBox ibcHbox = new HBox();
  777.         ibcHbox.getChildren().addAll(ibcVbox);
  778.         ibcHbox.setPadding(new Insets(10));
  779.         return ibcHbox;
  780.     }
  781.  
  782.     /**
  783.      * Metoden productByCUstomers() returnerer en HBox som skal brukes som centre i borderPane.
  784.      * Denne metoden er del av deloppgave 5
  785.      *
  786.      * @param id
  787.      * @return HBox som viser Products som er knyttet til Customer med riktig id
  788.      */
  789.     public HBox productByCustomers(int id){
  790.         ListView<Product> customerProducts = new ListView<>();
  791.  
  792.         Customer customer = customerDAO.getCustomer(id);
  793.  
  794.         for(Invoice i : invoices.getItems()){
  795.             if(i.getCustomer() == customer.getID()){
  796.                 for(Product p : invoiceDAO.getInvoice(i.getID()).getProducts()){
  797.                     customerProducts.getItems().add(p);
  798.                 }
  799.             }
  800.         }
  801.  
  802.         VBox pbcVbox = new VBox();
  803.         pbcVbox.getChildren().addAll(new Label(customer.getName()), customerProducts);
  804.  
  805.         HBox pbcHbox = new HBox();
  806.         pbcHbox.getChildren().addAll(pbcVbox);
  807.         pbcHbox.setPadding(new Insets(10));
  808.         return pbcHbox;
  809.     }
  810. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement