У меня есть продукты в одной таблице продуктов, которая загружается при запуске, из этой таблицы я хочу добавить элемент выбора из первого просмотра таблицы в таблицу корзины.
Итак, вот проблема, я знаю как добавить выбранный элемент из одной таблицы в другую. Но если элемент уже существует в таблице, он должен увеличить количество и не добавлять дублирующую строку. Я пробовал несколько способов, которые вроде бы работают, за исключением того, что они всегда имеют ошибки.
Logi c находится под addButton()
.
public class OrderController implements Initializable {
OrderRepository or = new OrderRepository();
ShoeRepository sr = new ShoeRepository();
LogInController logInController = new LogInController();
private int customer_ID;
private int total;
private List<ProductCart> productCarts = new LinkedList<>();
@FXML
private Label label_total;
@FXML
private Button button_makeOrder;
@FXML
private Button button_add;
@FXML
private Button button_remove;
@FXML
private TableView<ProductCart> table_cart;
@FXML
private TableView<Product> tableProduct;
@FXML
private TableColumn<Product, String> col_shoe;
@FXML
private TableColumn<Product, String> col_brand;
@FXML
private TableColumn<Product, String> col_color;
@FXML
private TableColumn<Product, Integer> col_size;
@FXML
private TableColumn<Product, Integer> col_price;
@FXML
private TableColumn<Product, Integer> col_stock;
@FXML
private TableColumn<ProductCart, String> col_cart_Shoe;
@FXML
private TableColumn<ProductCart, String> col_cart_brand;
@FXML
private TableColumn<ProductCart, String> col_cart_color;
@FXML
private TableColumn<ProductCart, Integer> col_cart_size;
@FXML
private TableColumn<ProductCart, Integer> col_cart_price;
@FXML
private TableColumn<ProductCart, Integer> col_cart_quantity;
public void a() {
System.out.println(customer_ID);
}
@Override
public void initialize(URL url, ResourceBundle resourceBundle) {
col_shoe.setCellValueFactory(new PropertyValueFactory<>("shoeName"));
col_brand.setCellValueFactory(new PropertyValueFactory<>("shoeBrand"));
col_color.setCellValueFactory(new PropertyValueFactory<>("shoeColor"));
col_size.setCellValueFactory(new PropertyValueFactory<>("shoeSize"));
col_price.setCellValueFactory(new PropertyValueFactory<>("shoePrice"));
col_stock.setCellValueFactory(new PropertyValueFactory<>("stock"));
col_cart_Shoe.setCellValueFactory(new PropertyValueFactory<>("name"));
col_cart_brand.setCellValueFactory(new PropertyValueFactory<>("brand"));
col_cart_color.setCellValueFactory(new PropertyValueFactory<>("color"));
col_cart_size.setCellValueFactory(new PropertyValueFactory<>("size"));
col_cart_price.setCellValueFactory(new PropertyValueFactory<>("price"));
col_cart_quantity.setCellValueFactory(new PropertyValueFactory<>("quantity"));
getProducts();
tableProduct.setItems(observableList);
customer_ID = logInController.getCustomer_ID();
}
ObservableList<Product> observableList = FXCollections.observableArrayList();
ObservableList<ProductCart> observableListC = FXCollections.observableArrayList();
public void getProducts() {
List<Product> products = new ArrayList<>();
List<Shoe> shoes = sr.getAllShoes();
shoes.forEach(shoe -> products.add(new Product(shoe.getShoe_ID(), shoe.getName(), shoe.getBrand().getName(),
shoe.getColor().getName(), shoe.getShoeSize().getShoeSize(), shoe.getInStock().getStock(),
shoe.getPrice().getPrice())));
products.forEach(product -> observableList.add(product));
}
public int getCustomer_ID() {
return customer_ID;
}
public void addButton() {
Product product = tableProduct.getSelectionModel().getSelectedItem();
ProductCart productCart = new ProductCart(product.getID(), product.getShoeName(), product.getShoeBrand(), product.getShoeColor(),
product.getShoeSize(),1, product.getShoePrice());
System.out.println(productCart.getName());
for (ProductCart item: productCarts) {
if (item.getName().equals(productCart.getName())) {
item.setQuantity(item.getQuantity() + 1);
table_cart.getItems().clear();
observableListC.remove(item);
observableListC.add(item);
}
else {
productCarts.add(item);
observableListC.add(item);
}
}
table_cart.setItems(observableListC);
updateTotal();
}
public void removeButton() {
}
public void makeOrder() {
}
public void updateTotal() {
total = 0;
List<ProductCart> productCarts = table_cart.getItems();
productCarts.forEach(productCart -> total += productCart.getPrice());
label_total.setText(total+"");
}
}
Изменение только количества и запаса в таблицы теперь работают намного лучше. Однако, как только элемент добавляется в таблицу, добавление той же строки кажется мне невозможным без каких-либо ошибок.
Версия 1: Добавление количества в существующую строку, невозможность добавления новых строк других продуктов
Версия 2: возможность добавлять строки отключает возможность добавления количества к существующей строке.
https://i.stack.imgur.com/EYoJ3.png
public void addButton() {
ProductCart productCart;
Product product = tableProduct.getSelectionModel().getSelectedItem();
productCart = new ProductCart(product.getID(), product.getShoeName(), product.getShoeBrand(),
product.getShoeColor(), product.getShoeSize(), product.getSold()+1, product.getShoePrice());
if (product.getStock() != 0) {
table_cart.getItems().add(productCart);
}
updateStock();
updateTotal();
}