diff --git a/prototype/scripts/addsupplierorders.sql b/prototype/scripts/addsupplierorders.sql new file mode 100644 index 0000000..6c19af3 --- /dev/null +++ b/prototype/scripts/addsupplierorders.sql @@ -0,0 +1,3 @@ + +INSERT INTO supplier_orders ("created", "delivered", "number_of_units", "price_per_unit_net_cent", "total_price_net", "ordered_id", "supplier_id") +VALUES ('0', '0', '42', '42', '42', '1', '1'); diff --git a/prototype/src/main/java/org/hso/ecommerce/action/user/UpdateUserSettingsAction.java b/prototype/src/main/java/org/hso/ecommerce/action/user/UpdateUserSettingsAction.java new file mode 100644 index 0000000..ba17181 --- /dev/null +++ b/prototype/src/main/java/org/hso/ecommerce/action/user/UpdateUserSettingsAction.java @@ -0,0 +1,83 @@ +package org.hso.ecommerce.action.user; + +import org.hso.ecommerce.entities.booking.PaymentMethod; +import org.hso.ecommerce.entities.user.User; +import org.hso.ecommerce.repos.user.UserRepository; + +public class UpdateUserSettingsAction { + + private User user; + private UserRepository repository; + + public UpdateUserSettingsAction(User user, UserRepository repository) { + this.user = user; + this.repository = repository; + } + + public UpdateResult updateEmail(String newMail) { + UpdateResult result = new UpdateResult(false); + if (!newMail.contains("@")) { + result.errorString = "Ändern der Email-Addresse nicht möglich. Bitte versuchen Sie es erneut."; + } else { + this.user.email = newMail; + this.repository.save(this.user); + result.updated = true; + } + return result; + } + + public UpdateResult updatePassword(String oldPassword, String password1, String password2) { + UpdateResult result = new UpdateResult(false); + if (this.user.validatePassword(oldPassword)) { + if (password1.equals(password2)) { + if (!password1.equals(oldPassword)) { + this.user.setPassword(password1); + this.repository.save(this.user); + result.updated = true; + } else { + result.errorString = "Das neue Passwort entspricht dem alten Passwort."; + } + } else { + result.errorString = "Die beiden neuen Passwörter stimmen nicht überein. Bitte versuchen Sie es erneut."; + } + } else { + result.errorString = "Das eingegebene alte Passwort stimmt nicht mit dem momentan gespeicherten Passwort überein. Bitte versuchen Sie es erneut."; + } + return result; + } + + public UpdateResult updateShippingInfo(String salutation, String name, String address) { + this.user.salutation = salutation; + this.user.name = name; + this.user.defaultDeliveryAddress.addressString = address; + this.repository.save(this.user); + return new UpdateResult(true); + } + + public UpdateResult updatePaymentInfo(String creditCardNumber) { + UpdateResult result = new UpdateResult(false); + if (creditCardNumber.matches("[0-9]+")) { + this.user.defaultPayment = PaymentMethod.fromCreditCardNumber(creditCardNumber); + this.repository.save(this.user); + result.updated = true; + } else { + result.errorString = "Kreditkartennummer darf nur Zahlen enthalten. Bitte versuchen Sie es erneut."; + } + return result; + } + + public class UpdateResult { + public boolean updated; //if true worked, if false not worked + public String errorString; + + public UpdateResult(boolean updated, String errorString) { + this.updated = updated; + this.errorString = errorString; + } + + public UpdateResult(boolean updated) { + this.updated = updated; + this.errorString = ""; + } + } +} diff --git a/prototype/src/main/java/org/hso/ecommerce/action/warehouse/StoreSupplierOrderAction.java b/prototype/src/main/java/org/hso/ecommerce/action/warehouse/StoreSupplierOrderAction.java new file mode 100644 index 0000000..9bc413d --- /dev/null +++ b/prototype/src/main/java/org/hso/ecommerce/action/warehouse/StoreSupplierOrderAction.java @@ -0,0 +1,7 @@ +package org.hso.ecommerce.action.warehouse; + +public class StoreSupplierOrderAction { + + //TODO add delivery date and warehouse booking + +} diff --git a/prototype/src/main/java/org/hso/ecommerce/app/RequestController.java b/prototype/src/main/java/org/hso/ecommerce/app/RequestController.java index 9d63f4b..9175a59 100644 --- a/prototype/src/main/java/org/hso/ecommerce/app/RequestController.java +++ b/prototype/src/main/java/org/hso/ecommerce/app/RequestController.java @@ -100,26 +100,6 @@ public class RequestController { return "intern/customerOrders/id"; } - @GetMapping("/intern/suppliers/") - public String internSuppliers() { - return "intern/suppliers/index"; - } - - @GetMapping("/intern/suppliers/{id}") - public String internSuppliersId() { - return "intern/suppliers/id"; - } - - @GetMapping("/intern/supplierOrders/") - public String internSupplierOrders() { - return "intern/supplierOrders/index"; - } - - @GetMapping("/intern/supplierOrders/{id}") - public String internSupplierOrdersId() { - return "intern/supplierOrders/id"; - } - @GetMapping("/intern/accounting/") public String accounting() { return "intern/accounting/index"; diff --git a/prototype/src/main/java/org/hso/ecommerce/app/UserRequestController.java b/prototype/src/main/java/org/hso/ecommerce/app/UserRequestController.java deleted file mode 100644 index c4f6301..0000000 --- a/prototype/src/main/java/org/hso/ecommerce/app/UserRequestController.java +++ /dev/null @@ -1,36 +0,0 @@ -package org.hso.ecommerce.app; - -import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; - -@Controller -@RequestMapping("user") -public class UserRequestController { - - @GetMapping("/") - public String user() { - return "redirect:/user/settings"; - } - - @GetMapping("/settings") - public String userSettings() { - return "user/settings"; - } - - @GetMapping("/orders/") - public String userOrdeers() { - return "user/orders/index"; - } - - @GetMapping("/bonuspoints") - public String userBonuspoints() { - return "user/bonuspoints"; - } - - @GetMapping("/notifications/") - public String userNotifications() { - return "user/notifications/index"; - } -} - diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/RegisterController.java b/prototype/src/main/java/org/hso/ecommerce/controller/RegisterController.java index 15acf9f..19f81b7 100644 --- a/prototype/src/main/java/org/hso/ecommerce/controller/RegisterController.java +++ b/prototype/src/main/java/org/hso/ecommerce/controller/RegisterController.java @@ -1,5 +1,6 @@ package org.hso.ecommerce.controller; +import org.hso.ecommerce.entities.booking.PaymentMethod; import org.hso.ecommerce.entities.shop.Address; import org.hso.ecommerce.entities.user.User; import org.hso.ecommerce.repos.user.UserRepository; @@ -54,7 +55,8 @@ public class RegisterController { newUser.setPassword(password); newUser.email = username; newUser.isEmployee = false; - //TODO for salutation, type, ad are no attributes/fields in the class/database. Add when they are there. + newUser.salutation = salutation; + newUser.defaultPayment = PaymentMethod.fromCreditCardNumber(""); newUser.isActive = true; newUser.created = new java.sql.Timestamp(System.currentTimeMillis()); diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/UserController.java b/prototype/src/main/java/org/hso/ecommerce/controller/UserController.java index 523bf2e..8a90d43 100644 --- a/prototype/src/main/java/org/hso/ecommerce/controller/UserController.java +++ b/prototype/src/main/java/org/hso/ecommerce/controller/UserController.java @@ -1,8 +1,127 @@ package org.hso.ecommerce.controller; +import org.hso.ecommerce.action.user.UpdateUserSettingsAction; +import org.hso.ecommerce.entities.shop.CustomerOrder; +import org.hso.ecommerce.entities.user.User; +import org.hso.ecommerce.repos.shop.CustomerOrderRepository; +import org.hso.ecommerce.repos.user.UserRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.util.List; @Controller -//@RequestMapping("...") +@RequestMapping("/user") public class UserController { + + @Autowired + private final UserRepository userRepository = null; + + @Autowired + private final CustomerOrderRepository customerOrderRepository = null; + + @GetMapping("/") + public String user() { + return "redirect:/user/settings"; + } + + @GetMapping("/settings") + public String userSettings(Model model, + HttpSession session + ) { + long userId = (long) session.getAttribute("userId"); + User user = userRepository.findById(userId).get(); + model.addAttribute("user", user); + + return "user/settings"; + } + + @GetMapping("/orders/") + public String userOrdeers(HttpSession session, + Model model + ) { + List orders = customerOrderRepository.getOrdersByUserId((long) session.getAttribute("userId")); + model.addAttribute("orders", orders); + + return "user/orders/index"; + } + + @PostMapping("/settings/changeMail") + public String changeMail(HttpSession session, + @RequestParam("email") String email, + HttpServletRequest request + ) { + User user = userRepository.findById((long) session.getAttribute("userId")).get(); + + UpdateUserSettingsAction cusa = new UpdateUserSettingsAction(user, userRepository); + UpdateUserSettingsAction.UpdateResult result = cusa.updateEmail(email); + if (result.updated == false) { + request.setAttribute("error", result.errorString); + return "user/settings"; + } + + return "redirect:/user/settings"; + } + + @PostMapping("/settings/changePwd") + public String changePwd(HttpSession session, + @RequestParam("old-password") String oldPassword, + @RequestParam("password1") String password1, + @RequestParam("password2") String password2, + HttpServletRequest request + ) { + User user = userRepository.findById((long) session.getAttribute("userId")).get(); + + UpdateUserSettingsAction cusa = new UpdateUserSettingsAction(user, userRepository); + UpdateUserSettingsAction.UpdateResult result = cusa.updatePassword(oldPassword, password1, password2); + if (result.updated == false) { + request.setAttribute("error", result.errorString); + return "user/settings"; + } + + return "redirect:/user/settings"; + } + + @PostMapping("/settings/changeAddress") + public String changeAddress(HttpSession session, + @RequestParam("salutation") String salutation, + @RequestParam("name") String name, + @RequestParam("address") String address, + HttpServletRequest request + ) { + User user = userRepository.findById((long) session.getAttribute("userId")).get(); + + UpdateUserSettingsAction cusa = new UpdateUserSettingsAction(user, userRepository); + UpdateUserSettingsAction.UpdateResult result = cusa.updateShippingInfo(salutation, name, address); + if (result.updated == false) { + request.setAttribute("error", result.errorString); + return "user/settings"; + } + + return "redirect:/user/settings"; + } + + @PostMapping("/settings/changePaymentInfo") + public String changePaymentInfo(HttpSession session, + @RequestParam("creditCardNumber") String creditCardNumber, + HttpServletRequest request + ) { + User user = userRepository.findById((long) session.getAttribute("userId")).get(); + + UpdateUserSettingsAction cusa = new UpdateUserSettingsAction(user, userRepository); + UpdateUserSettingsAction.UpdateResult result = cusa.updatePaymentInfo(creditCardNumber); + if (result.updated == false) { + request.setAttribute("error", result.errorString); + return "user/settings"; + } + + return "redirect:/user/settings"; + } } diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/cronjob/CronjobController.java b/prototype/src/main/java/org/hso/ecommerce/controller/cronjob/CronjobController.java index e2bad65..0f54221 100644 --- a/prototype/src/main/java/org/hso/ecommerce/controller/cronjob/CronjobController.java +++ b/prototype/src/main/java/org/hso/ecommerce/controller/cronjob/CronjobController.java @@ -28,7 +28,7 @@ import org.hso.ecommerce.repos.booking.BookingAccountEntryRepository; import org.hso.ecommerce.repos.booking.BookingRepository; import org.hso.ecommerce.repos.cronjob.BackgroundJobRepository; import org.hso.ecommerce.repos.shop.ArticleRepository; -import org.hso.ecommerce.repos.shop.CustomerOderRepository; +import org.hso.ecommerce.repos.shop.CustomerOrderRepository; import org.hso.ecommerce.repos.supplier.ArticleOfferRepository; import org.hso.ecommerce.repos.supplier.SupplierOrderRepository; import org.hso.ecommerce.repos.supplier.SupplierRepository; @@ -230,7 +230,7 @@ class CronjobController { final ArticleOfferRepository articleOfferRepository = null; @Autowired - final CustomerOderRepository customerOrderRepository = null; + final CustomerOrderRepository customerOrderRepository = null; @Autowired final BookingRepository bookingRepository = null; diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/intern/InternArticleController.java b/prototype/src/main/java/org/hso/ecommerce/controller/intern/InternArticleController.java index 62b615d..e799210 100644 --- a/prototype/src/main/java/org/hso/ecommerce/controller/intern/InternArticleController.java +++ b/prototype/src/main/java/org/hso/ecommerce/controller/intern/InternArticleController.java @@ -1,15 +1,5 @@ package org.hso.ecommerce.controller.intern; -import java.awt.image.BufferedImage; -import java.io.File; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; -import java.util.Optional; -import javax.imageio.ImageIO; - import org.hso.ecommerce.entities.shop.Article; import org.hso.ecommerce.entities.shop.Category; import org.hso.ecommerce.entities.shop.Image; @@ -27,6 +17,16 @@ import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.view.RedirectView; +import javax.imageio.ImageIO; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; + @Controller @RequestMapping("intern/articles") public class InternArticleController { @@ -62,16 +62,12 @@ public class InternArticleController { @GetMapping("/{id}") public String internListedArticlesId(Model model, @PathVariable String id) { - int articleid = Integer.parseInt(id); - UImodelArticle total = new UImodelArticle(); - total.addArticle(articleRepository.findArticleById(articleid), warehouseEntryRepository.getArticleStock(articleid).orElse(0)); model.addAttribute("ArticleID", total); - return "intern/listedArticles/id"; } @@ -80,7 +76,7 @@ public class InternArticleController { @RequestParam(value = "title", required = true) String title, @RequestParam(value = "description", required = true) String description, @RequestParam(value = "units-per-slot", required = true) String warehouseUnitsPerSlot, - @RequestParam(value = "price_netto", required = true) String pricenetto, + @RequestParam(value = "priceNet", required = true) String pricenetto, @RequestParam(value = "reorderMaxPrice", required = true) String reorderMaxPrice, @RequestParam(value = "autobuy", required = true) Boolean shouldReorder, @RequestParam(value = "categorie", required = true) String categories, @@ -192,19 +188,12 @@ public class InternArticleController { public static class UImodelArticles { public String imgPath; - public String title; - public String price; - - public String price_netto; - + public String priceNet; public String categorie; - public int stock; - - public long offer_id; - + public long offerID; public long id; void addListedArticle(Article article, int stock) { @@ -213,7 +202,7 @@ public class InternArticleController { this.imgPath = article.image.path; } this.title = article.title; - this.price_netto = String.format("%.2f", ((float) article.shopPricePerUnitNetCent / 100)); + this.priceNet = String.format("%.2f", ((float) article.shopPricePerUnitNetCent / 100)); this.price = String.format("%.2f", ((float) article.getPriceGross() / 100)); StringBuilder result = new StringBuilder(); @@ -224,7 +213,7 @@ public class InternArticleController { this.categorie = result.toString(); this.stock = stock; - this.offer_id = article.related.id; + this.offerID = article.related.id; this.id = article.id; } } @@ -234,118 +223,31 @@ public class InternArticleController { public String imgPath; public String title; public String price; - public String price_netto; + public String priceNet; public String reorderMaxPrice; public String categorie; public int stock; - public long offer_id; + public long offerID; public long id; public boolean shouldReorder; public String warehouseUnitsPerSlot; public String description; - - public String getImgPath() { - return imgPath; - } - - public void setImgPath(String imgPath) { - this.imgPath = imgPath; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getPrice() { - return price; - } - - public void setPrice(String price) { - this.price = price; - } - - public String getPrice_netto() { - return price_netto; - } - - public void setPrice_netto(String price_netto) { - this.price_netto = price_netto; - } - - public String getReorderMaxPrice() { - return reorderMaxPrice; - } - - public void setReorderMaxPrice(String reorderMaxPrice) { - this.reorderMaxPrice = reorderMaxPrice; - } + public int vatPercent; public String getCategorie() { return categorie; } - public void setCategorie(String categorie) { - this.categorie = categorie; - } - - public int getStock() { - return stock; - } - - public void setStock(int stock) { - this.stock = stock; - } - - public long getOffer_id() { - return offer_id; - } - - public void setOffer_id(long offer_id) { - this.offer_id = offer_id; - } - - public long getId() { - return id; - } - - public void setId(long id) { - this.id = id; - } - - public boolean isShouldReorder() { - return shouldReorder; - } - - public void setShouldReorder(boolean shouldReorder) { - this.shouldReorder = shouldReorder; - } - - public String getWarehouseUnitsPerSlot() { - return warehouseUnitsPerSlot; - } - - public void setWarehouseUnitsPerSlot(String warehouseUnitsPerSlot) { - this.warehouseUnitsPerSlot = warehouseUnitsPerSlot; - } - public String getDescription() { return description; } - public void setDescription(String description) { - this.description = description; - } - void addArticle(Article article, int stock) { if (article.image != null) { this.imgPath = article.image.path; } this.title = article.title; - this.price_netto = String.format("%.2f", ((float) article.shopPricePerUnitNetCent / 100)); + this.priceNet = String.format("%.2f", ((float) article.shopPricePerUnitNetCent / 100)); this.price = String.format("%.2f", ((float) article.getPriceGross() / 100)); StringBuilder result = new StringBuilder(); @@ -357,12 +259,13 @@ public class InternArticleController { this.categorie = result.toString(); this.stock = stock; - this.offer_id = article.related.id; + this.offerID = article.related.id; this.id = article.id; this.reorderMaxPrice = String.format("%.2f", ((float) article.reorderMaxPrice / 100)); this.shouldReorder = article.shouldReorder; this.warehouseUnitsPerSlot = String.valueOf(article.warehouseUnitsPerSlot); this.description = article.description; + this.vatPercent = article.related.vatPercent; } } diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierIndexController.java b/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierIndexController.java index d6cefc0..8f8c1fc 100644 --- a/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierIndexController.java +++ b/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierIndexController.java @@ -1,8 +1,165 @@ package org.hso.ecommerce.controller.intern.suppliers; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +import org.hso.ecommerce.entities.booking.Booking; +import org.hso.ecommerce.entities.booking.BookingAccountEntry; +import org.hso.ecommerce.entities.supplier.Supplier; +import org.hso.ecommerce.entities.supplier.SupplierOrder; +import org.hso.ecommerce.repos.booking.BookingAccountEntryRepository; +import org.hso.ecommerce.repos.booking.BookingRepository; +import org.hso.ecommerce.repos.supplier.SupplierOrderRepository; +import org.hso.ecommerce.repos.supplier.SupplierRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; @Controller -//@RequestMapping("...") +@RequestMapping("/intern/") public class SupplierIndexController { + + @Autowired + private final SupplierRepository supplierRepository = null; + + @Autowired + private final SupplierOrderRepository supplierOrderRepository = null; + + @Autowired + private final BookingAccountEntryRepository bookingAccountEntryRepository = null; + + @Autowired + private final BookingRepository bookingRepository = null; + + @GetMapping("suppliers") + public String listSuppliers(Model model) { + + List totals = new ArrayList(); + + for (Supplier supplier : supplierRepository.findAll()) { + UImodelSuppliers tmp = new UImodelSuppliers(supplier.id, supplier.name); + totals.add(tmp); + } + + model.addAttribute("suppliers", totals); + return "intern/suppliers/index"; + } + + @GetMapping("/suppliers/{id}") + public String supplierDetail(Model model, @PathVariable String id) { + + long supplierId = Long.parseLong(id); + + // add orders from supplier to UImodel + List orders = new ArrayList(); + for (SupplierOrder supplierOrder : supplierOrderRepository.findOrderBySupplierID(supplierId)) { + orders.add(new UImodelSupplierDetailOrders(supplierOrder)); + } + + // get latest supplier booking + Optional supplierBooking = bookingAccountEntryRepository.getBySupplier(supplierId); + + // get account balance + String supplierBalance = ((supplierBooking.isPresent()) + ? String.format("%.2f", ((float) supplierBooking.get().newSumCent / 100)) + : "0,00"); + + // add bookings from supplier to UImodel + List bookings = new ArrayList(); + for (Booking booking : bookingRepository.getBySupplier(supplierId)) { + bookings.add(new UImodelSupplierDetailBookings(booking)); + } + + UImodelSupplierDetail total = new UImodelSupplierDetail(supplierRepository.findSupplierById(supplierId).name, + supplierBalance, orders, bookings); + + model.addAttribute("SupplierDetail", total); + + return "intern/suppliers/id"; + } + + public class UImodelSuppliers { + public long id; + public String name; + + public UImodelSuppliers(long id, String name) { + this.id = id; + this.name = name; + } + + } + + public class UImodelSupplierDetail { + + public String name; + public String balance; + public List orders; + public List bookings; + + public UImodelSupplierDetail(String name, String balance, List orders, + List bookings) { + this.name = name; + this.balance = balance; + this.orders = orders; + this.bookings = bookings; + } + + } + + public class UImodelSupplierDetailOrders { + public long id; + public String dateOrder; + public String articleName; + public long articleId; + public String priceNet; + public String quantity; + public String priceTotal; + public boolean arrived; + + public UImodelSupplierDetailOrders(SupplierOrder order) { + this.id = order.id; + this.articleName = order.ordered.title; + this.articleId = order.ordered.id; + this.priceNet = String.format("%.2f", ((float) order.pricePerUnitNetCent / 100)); + this.quantity = String.valueOf(order.numberOfUnits); + this.priceTotal = String.format("%.2f", ((float) order.totalPriceNet / 100)); + + Date date = new Date(); + date.setTime(order.created.getTime()); + this.dateOrder = new SimpleDateFormat("dd.MM.yyyy").format(date); + + if (order.delivered != null) { + arrived = true; + } else { + arrived = false; + } + } + } + + public class UImodelSupplierDetailBookings { + + public String dateBooking; + public String price; + public String srcName; + public String balance; + public String reason; + public long orderID; + + public UImodelSupplierDetailBookings(Booking booking) { + Date date = new Date(); + date.setTime(booking.reason.supplierOrder.created.getTime()); + this.dateBooking = new SimpleDateFormat("dd.MM.yyyy").format(date); + this.price = String.format("%.2f", ((float) booking.amountCent / 100)); + this.srcName = ((booking.source.isMainAccount) ? "Hauptkonto" : booking.source.supplierAccount.name); + this.balance = String.format("%.2f", ((float) booking.destination.newSumCent / 100)); + this.reason = booking.reason.comment; + this.orderID = booking.reason.supplierOrder.id; + } + } } diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierOfferController.java b/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierOfferController.java index edc7bc2..979f967 100644 --- a/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierOfferController.java +++ b/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierOfferController.java @@ -40,94 +40,22 @@ public class SupplierOfferController { public class UImodelOfferedArticle { - long offer_id; - String title; - String manufacturer; - String articlenumber; - String supplierName; - String price; - String ads; - int listedArticleId; - boolean offerIsListed; // true --> offered article is listed - - public long getOffer_id() { - return offer_id; - } - - public void setOffer_id(long offer_id) { - this.offer_id = offer_id; - } - - public boolean isOfferIsListed() { - return offerIsListed; - } - - public void setOfferIsListed(boolean offerIsListed) { - this.offerIsListed = offerIsListed; - } - - public String getTitle() { - return title; - } - - public void setTitle(String title) { - this.title = title; - } - - public String getManufacturer() { - return manufacturer; - } - - public void setManufacturer(String manufacturer) { - this.manufacturer = manufacturer; - } - - public String getArticlenumber() { - return articlenumber; - } - - public void setArticlenumber(String articlenumber) { - this.articlenumber = articlenumber; - } - - public String getSupplierName() { - return supplierName; - } - - public void setSupplierName(String supplierName) { - this.supplierName = supplierName; - } - - public String getPrice() { - return price; - } - - public void setPrice(String price) { - this.price = price; - } - - public String getAds() { - return ads; - } - - public void setAds(String ads) { - this.ads = ads; - } - - public int getListedArticleId() { - return listedArticleId; - } - - public void setListedArticleId(int listedArticleId) { - this.listedArticleId = listedArticleId; - } + public long offerId; + public String title; + public String manufacturer; + public String articleNumber; + public String supplierName; + public String price; + public String ads; + public int listedArticleId; + public boolean offerIsListed; // true --> offered article is listed public void addData(ArticleOffer article, Optional listedArticleId) { - this.offer_id = article.id; + this.offerId = article.id; this.title = article.title; this.manufacturer = article.manufacturer; - this.articlenumber = article.articleNumber; + this.articleNumber = article.articleNumber; this.supplierName = article.cheapestSupplier.name; this.price = String.format("%.2f", ((float) article.pricePerUnitNet / 100)); this.ads = (article.shouldBeAdvertised) ? "Ja" : "Nein"; diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierOrderController.java b/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierOrderController.java index ef3acb4..1485c92 100644 --- a/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierOrderController.java +++ b/prototype/src/main/java/org/hso/ecommerce/controller/intern/suppliers/SupplierOrderController.java @@ -1,8 +1,89 @@ package org.hso.ecommerce.controller.intern.suppliers; +import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Optional; + +import org.hso.ecommerce.entities.supplier.SupplierOrder; +import org.hso.ecommerce.repos.supplier.SupplierOrderRepository; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.servlet.view.RedirectView; @Controller -//@RequestMapping("...") +@RequestMapping("/intern/") public class SupplierOrderController { + + @Autowired + private final SupplierOrderRepository supplierOrderRepository = null; + + @GetMapping("supplierOrders") + public String listSuppliers(Model model) { + + List totals = new ArrayList(); + + for (SupplierOrder orders : supplierOrderRepository.findAll()) { + totals.add(new UImodelSupplierOrder(orders)); + } + + model.addAttribute("orders", totals); + + return "intern/supplierOrders/index"; + } + + @PostMapping("/supplierOrders/store/{id}") + public RedirectView storeOrder(@PathVariable(required = true) String id) { + + long supplierOrderID = Long.parseLong(id); + + Optional order = supplierOrderRepository.findById(supplierOrderID); + + if (order.isPresent()) { + // TODO call action + + System.out.println("Order is present\n"); + + } + + return new RedirectView("../../supplierOrders/"); + } + + public class UImodelSupplierOrder { + public long id; + public String dateOrder; + public String supplierName; + public String articleName; + public long articleId; + public String priceNet; + public String quantity; + public String priceTotal; + public boolean arrived; + + public UImodelSupplierOrder(SupplierOrder order) { + this.id = order.id; + this.supplierName = order.supplier.name; + this.articleName = order.ordered.title; + this.articleId = order.ordered.id; + this.priceNet = String.format("%.2f", ((float) order.pricePerUnitNetCent / 100)); + this.quantity = String.valueOf(order.numberOfUnits); + this.priceTotal = String.format("%.2f", ((float) order.totalPriceNet / 100)); + + Date date = new Date(); + date.setTime(order.created.getTime()); + this.dateOrder = new SimpleDateFormat("dd.MM.yyyy").format(date); + + if (order.delivered != null) { + arrived = true; + } else { + arrived = false; + } + } + } } diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopCheckoutController.java b/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopCheckoutController.java index 507b759..8b0b1ba 100644 --- a/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopCheckoutController.java +++ b/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopCheckoutController.java @@ -10,7 +10,7 @@ import org.hso.ecommerce.entities.user.User; import org.hso.ecommerce.repos.booking.BookingAccountEntryRepository; import org.hso.ecommerce.repos.booking.BookingRepository; import org.hso.ecommerce.repos.shop.ArticleRepository; -import org.hso.ecommerce.repos.shop.CustomerOderRepository; +import org.hso.ecommerce.repos.shop.CustomerOrderRepository; import org.hso.ecommerce.repos.user.UserRepository; import org.hso.ecommerce.repos.warehouse.WarehouseBookingPositionSlotEntryRepository; import org.hso.ecommerce.repos.warehouse.WarehouseBookingRepository; @@ -44,7 +44,7 @@ public class ShopCheckoutController { private final WarehouseBookingRepository warehouseBookingRepository = null; @Autowired - private final CustomerOderRepository customerOderRepository = null; + private final CustomerOrderRepository customerOderRepository = null; @Autowired private final WarehouseBookingPositionSlotEntryRepository wbeseRepo = null; @@ -121,7 +121,7 @@ public class ShopCheckoutController { user, expectedPrice, Address.fromString(address), - PaymentMethod.fromCreditCarNumber(cardnumber), + PaymentMethod.fromCreditCardNumber(cardnumber), bookingEntryRepository.getByUser(user.id).orElse(BookingAccountEntry.newUser(user)), bookingEntryRepository.getByVat().orElse(BookingAccountEntry.newVat()), bookingEntryRepository.getByMain().orElse(BookingAccountEntry.newMain()) diff --git a/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopSearchController.java b/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopSearchController.java index cacdafe..47b8acf 100644 --- a/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopSearchController.java +++ b/prototype/src/main/java/org/hso/ecommerce/controller/shop/ShopSearchController.java @@ -32,9 +32,8 @@ public class ShopSearchController { ) { model.addAttribute("categories", categoryRepository.getCategories()); //for sidebar - term = term.trim(); - if (term != null) { //if search by Term + term = term.trim(); List
articles = SearchByTermAction.searchByTerm(term, articleRepository); model.addAttribute("articles", articles); } else if (category != null) { //if search by Category diff --git a/prototype/src/main/java/org/hso/ecommerce/entities/booking/PaymentMethod.java b/prototype/src/main/java/org/hso/ecommerce/entities/booking/PaymentMethod.java index af0a9c0..fa9fe62 100644 --- a/prototype/src/main/java/org/hso/ecommerce/entities/booking/PaymentMethod.java +++ b/prototype/src/main/java/org/hso/ecommerce/entities/booking/PaymentMethod.java @@ -7,7 +7,7 @@ public class PaymentMethod { public String creditCardNumber; - public static PaymentMethod fromCreditCarNumber(String cardnumber) { + public static PaymentMethod fromCreditCardNumber(String cardnumber) { PaymentMethod m = new PaymentMethod(); m.creditCardNumber = cardnumber; diff --git a/prototype/src/main/java/org/hso/ecommerce/entities/shop/CustomerOrder.java b/prototype/src/main/java/org/hso/ecommerce/entities/shop/CustomerOrder.java index 8c80c58..853b885 100644 --- a/prototype/src/main/java/org/hso/ecommerce/entities/shop/CustomerOrder.java +++ b/prototype/src/main/java/org/hso/ecommerce/entities/shop/CustomerOrder.java @@ -4,6 +4,7 @@ import org.hso.ecommerce.entities.user.User; import javax.persistence.*; import javax.validation.constraints.NotNull; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; @@ -43,4 +44,21 @@ public class CustomerOrder { public int totalNetCent; public int totalGrossCent; public int totalVatCent; + + public String formatInDeliverySince(){ + return new SimpleDateFormat("dd.MM.yyyy HH:mm").format(inDeliverySince); + } + + public String formatCreated(){ + return new SimpleDateFormat("dd.MM.yyyy HH:mm").format(created); + } + + public String formatDeliveredAt(){ + return new SimpleDateFormat("dd.MM.yyyy HH:mm").format(deliveredAt); + } + + public String getEstimatedArrival() { + //TODO: get estimated arrival from api + return "TODO TODO TODO"; + } } diff --git a/prototype/src/main/java/org/hso/ecommerce/entities/shop/CustomerOrderPosition.java b/prototype/src/main/java/org/hso/ecommerce/entities/shop/CustomerOrderPosition.java index dbe53f7..2569158 100644 --- a/prototype/src/main/java/org/hso/ecommerce/entities/shop/CustomerOrderPosition.java +++ b/prototype/src/main/java/org/hso/ecommerce/entities/shop/CustomerOrderPosition.java @@ -19,4 +19,8 @@ public class CustomerOrderPosition { public int pricePerUnit; public int quantity; + + public int getSumPrice(){ + return article.getPriceGross() * quantity; + } } diff --git a/prototype/src/main/java/org/hso/ecommerce/entities/user/User.java b/prototype/src/main/java/org/hso/ecommerce/entities/user/User.java index 784d89a..e08c2ee 100644 --- a/prototype/src/main/java/org/hso/ecommerce/entities/user/User.java +++ b/prototype/src/main/java/org/hso/ecommerce/entities/user/User.java @@ -24,6 +24,11 @@ public class User { @Column(unique = true) public String email; + @Column(insertable = false, updatable = false) + public String name; + + public String salutation; + public String passwordHash; public boolean isActive; diff --git a/prototype/src/main/java/org/hso/ecommerce/repos/booking/BookingRepository.java b/prototype/src/main/java/org/hso/ecommerce/repos/booking/BookingRepository.java index 454b3f3..fe01783 100644 --- a/prototype/src/main/java/org/hso/ecommerce/repos/booking/BookingRepository.java +++ b/prototype/src/main/java/org/hso/ecommerce/repos/booking/BookingRepository.java @@ -1,12 +1,17 @@ package org.hso.ecommerce.repos.booking; +import java.util.List; + import org.hso.ecommerce.entities.booking.Booking; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; @Repository public interface BookingRepository extends JpaRepository { + // Return a list with all bookings entries, sorted by id + @Query(value = "SELECT * FROM bookings as b INNER JOIN booking_account_entries ON b.destination_id=booking_account_entries.id OR b.source_id=booking_account_entries.id WHERE booking_account_entries.supplier_account_id = :supplier ORDER BY b.id DESC", nativeQuery = true) + List getBySupplier(Long supplier); + } - - diff --git a/prototype/src/main/java/org/hso/ecommerce/repos/shop/CustomerOderRepository.java b/prototype/src/main/java/org/hso/ecommerce/repos/shop/CustomerOrderRepository.java similarity index 68% rename from prototype/src/main/java/org/hso/ecommerce/repos/shop/CustomerOderRepository.java rename to prototype/src/main/java/org/hso/ecommerce/repos/shop/CustomerOrderRepository.java index 2c332f5..86c88e6 100644 --- a/prototype/src/main/java/org/hso/ecommerce/repos/shop/CustomerOderRepository.java +++ b/prototype/src/main/java/org/hso/ecommerce/repos/shop/CustomerOrderRepository.java @@ -5,13 +5,17 @@ import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository -public interface CustomerOderRepository extends JpaRepository { +public interface CustomerOrderRepository extends JpaRepository { @Query("SELECT SUM(cop.quantity) FROM CustomerOrderPosition cop JOIN cop.order co WHERE cop.article.id = :articleId AND co.created >= :begin AND co.created < :end") Integer countOrdersOfArticleInTimespan( long articleId, java.sql.Timestamp begin, java.sql.Timestamp end ); -} + @Query("SELECT co FROM CustomerOrder co WHERE co.customer.id = :userId ORDER BY co.id DESC") + List getOrdersByUserId(long userId); +} \ No newline at end of file diff --git a/prototype/src/main/java/org/hso/ecommerce/repos/supplier/SupplierOrderRepository.java b/prototype/src/main/java/org/hso/ecommerce/repos/supplier/SupplierOrderRepository.java index 9d15e02..06ad249 100644 --- a/prototype/src/main/java/org/hso/ecommerce/repos/supplier/SupplierOrderRepository.java +++ b/prototype/src/main/java/org/hso/ecommerce/repos/supplier/SupplierOrderRepository.java @@ -1,8 +1,11 @@ package org.hso.ecommerce.repos.supplier; +import java.util.List; + import org.hso.ecommerce.entities.supplier.SupplierOrder; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository @@ -11,4 +14,9 @@ public interface SupplierOrderRepository extends JpaRepository findOrderBySupplierID(@Param("supplierId") long supplierId); + + @Query("SELECT a FROM SupplierOrder a") + List findAll(); } diff --git a/prototype/src/main/java/org/hso/ecommerce/repos/supplier/SupplierRepository.java b/prototype/src/main/java/org/hso/ecommerce/repos/supplier/SupplierRepository.java index 2b81659..14b3a75 100644 --- a/prototype/src/main/java/org/hso/ecommerce/repos/supplier/SupplierRepository.java +++ b/prototype/src/main/java/org/hso/ecommerce/repos/supplier/SupplierRepository.java @@ -1,10 +1,19 @@ package org.hso.ecommerce.repos.supplier; +import java.util.List; + import org.hso.ecommerce.entities.supplier.Supplier; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; @Repository public interface SupplierRepository extends JpaRepository { - -} + + @Query("SELECT a FROM Supplier a") + List findAll(); + + @Query("SELECT a FROM Supplier a WHERE a.id = :supplierId") + Supplier findSupplierById(@Param("supplierId") long supplierId); +} \ No newline at end of file diff --git a/prototype/src/main/resources/static/js/editViewUpdateTax.js b/prototype/src/main/resources/static/js/editViewUpdateTax.js new file mode 100644 index 0000000..0724150 --- /dev/null +++ b/prototype/src/main/resources/static/js/editViewUpdateTax.js @@ -0,0 +1,15 @@ +document.addEventListener("DOMContentLoaded", function() { + let priceElm = document.getElementById("price"); + let priceGrossElm = document.getElementById("priceGross"); + let vatPercent = parseInt(document.getElementById("vatPercent").value); + + let updateFn = () => { + let net = Math.floor(priceElm.value*100); + let vat = Math.floor((net * vatPercent) / 100); + let gross = net + vat; + + priceGrossElm.innerText = (gross / 100.0).toFixed(2).replace("\\.", ","); + }; + + priceElm.onchange = updateFn; +}); diff --git a/prototype/src/main/resources/templates/fragments/customer.html b/prototype/src/main/resources/templates/fragments/customer.html index d47a06a..f8ba1ff 100644 --- a/prototype/src/main/resources/templates/fragments/customer.html +++ b/prototype/src/main/resources/templates/fragments/customer.html @@ -12,8 +12,6 @@ diff --git a/prototype/src/main/resources/templates/fragments/header.html b/prototype/src/main/resources/templates/fragments/header.html index 054c332..349f72c 100644 --- a/prototype/src/main/resources/templates/fragments/header.html +++ b/prototype/src/main/resources/templates/fragments/header.html @@ -18,7 +18,6 @@