Implements orders list
This commit is contained in:
@@ -65,7 +65,7 @@ public class OrdersController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public Optional<OrderModel> showDialog(Parent parent, Parent content, Collection<OfferDescModel> offers, double balance, long max) {
|
public Collection<OrderModel> showDialog(Parent parent, Parent content, Collection<OfferDescModel> offers, double balance, long max) {
|
||||||
|
|
||||||
init(offers, balance, max);
|
init(offers, balance, max);
|
||||||
|
|
||||||
@@ -73,7 +73,11 @@ public class OrdersController {
|
|||||||
dlg.setContent(content);
|
dlg.setContent(content);
|
||||||
dlg.getActions().addAll(OK, Dialog.Actions.CANCEL);
|
dlg.getActions().addAll(OK, Dialog.Actions.CANCEL);
|
||||||
dlg.setResizable(false);
|
dlg.setResizable(false);
|
||||||
return Optional.ofNullable(dlg.show() == OK ? tblOrders.getSelectionModel().getSelectedItem() : null);
|
return dlg.show() == OK ? getOrders() : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Collection<OrderModel> getOrders() {
|
||||||
|
return tblOrders.getItems().filtered((o) -> o.getCount()>0 && o.getBuyer()!=null);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void init(Collection<OfferDescModel> offers, double balance, long max) {
|
private void init(Collection<OfferDescModel> offers, double balance, long max) {
|
||||||
@@ -93,7 +97,7 @@ public class OrdersController {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void setBuyer(OfferModel offer) {
|
private void setBuyer(OfferModel offer) {
|
||||||
if (order != null) {
|
if (order != null && offer!=null) {
|
||||||
order.setBuyer(offer);
|
order.setBuyer(offer);
|
||||||
order.setCount(order.getMax());
|
order.setCount(order.getMax());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,14 +1,21 @@
|
|||||||
package ru.trader.controllers;
|
package ru.trader.controllers;
|
||||||
|
|
||||||
|
|
||||||
|
import javafx.collections.FXCollections;
|
||||||
|
import javafx.collections.ListChangeListener;
|
||||||
|
import javafx.event.ActionEvent;
|
||||||
import javafx.fxml.FXML;
|
import javafx.fxml.FXML;
|
||||||
import javafx.scene.control.Button;
|
import javafx.scene.control.Button;
|
||||||
import javafx.scene.control.ComboBox;
|
import javafx.scene.control.ComboBox;
|
||||||
|
import javafx.scene.control.TableView;
|
||||||
import ru.trader.core.Vendor;
|
import ru.trader.core.Vendor;
|
||||||
import ru.trader.model.MarketModel;
|
import ru.trader.model.MarketModel;
|
||||||
import ru.trader.model.OfferDescModel;
|
import ru.trader.model.OfferDescModel;
|
||||||
|
import ru.trader.model.OrderModel;
|
||||||
import ru.trader.view.support.NumberField;
|
import ru.trader.view.support.NumberField;
|
||||||
|
|
||||||
|
|
||||||
|
import java.awt.*;
|
||||||
import java.util.Collection;
|
import java.util.Collection;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -22,25 +29,44 @@ public class RoutersController {
|
|||||||
private NumberField cargo;
|
private NumberField cargo;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private Button buy;
|
private Button add;
|
||||||
|
|
||||||
@FXML
|
|
||||||
private Button sell;
|
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private ComboBox<Vendor> vendors;
|
private ComboBox<Vendor> vendors;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private TableView<OrderModel> tblOrders;
|
||||||
|
|
||||||
|
@FXML
|
||||||
|
private NumberField totalProfit;
|
||||||
|
|
||||||
@FXML
|
@FXML
|
||||||
private void initialize(){
|
private void initialize(){
|
||||||
init();
|
init();
|
||||||
buy.disableProperty().bind(this.balance.wrongProperty().or(this.cargo.wrongProperty()));
|
add.disableProperty().bind(this.balance.wrongProperty().or(this.cargo.wrongProperty()));
|
||||||
buy.setOnAction((e) -> Screeners.showOrders(getOffers(), balance.getValue().doubleValue(), cargo.getValue().longValue()));
|
tblOrders.setItems(FXCollections.observableArrayList());
|
||||||
|
tblOrders.getItems().addListener((ListChangeListener<OrderModel>) c -> {
|
||||||
|
while (c.next()) {
|
||||||
|
if (c.wasRemoved()){
|
||||||
|
for (OrderModel o : c.getRemoved()) {
|
||||||
|
totalProfit.setValue(totalProfit.getValue().doubleValue()-o.getProfit());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (c.wasAdded()){
|
||||||
|
for (OrderModel o : c.getAddedSubList()) {
|
||||||
|
totalProfit.setValue(totalProfit.getValue().doubleValue()+o.getProfit());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void init(){
|
void init(){
|
||||||
MarketModel market = MainController.getMarket();
|
MarketModel market = MainController.getMarket();
|
||||||
vendors.setItems(market.vendorsProperty());
|
vendors.setItems(market.vendorsProperty());
|
||||||
vendors.getSelectionModel().selectFirst();
|
vendors.getSelectionModel().selectFirst();
|
||||||
|
tblOrders.getItems().clear();
|
||||||
|
totalProfit.setValue(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Collection<OfferDescModel> getOffers(){
|
private Collection<OfferDescModel> getOffers(){
|
||||||
@@ -48,4 +74,19 @@ public class RoutersController {
|
|||||||
Vendor vendor = vendors.getSelectionModel().getSelectedItem();
|
Vendor vendor = vendors.getSelectionModel().getSelectedItem();
|
||||||
return vendor.getAllSellOffers().stream().map(market::asOfferDescModel).collect(Collectors.toList());
|
return vendor.getAllSellOffers().stream().map(market::asOfferDescModel).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void addOrders(ActionEvent e){
|
||||||
|
Collection<OrderModel> orders = Screeners.showOrders(getOffers(), balance.getValue().doubleValue(), cargo.getValue().longValue());
|
||||||
|
if (orders!=null){
|
||||||
|
tblOrders.getItems().addAll(orders);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void removeSelected(ActionEvent e){
|
||||||
|
TableView.TableViewSelectionModel<OrderModel> select = tblOrders.getSelectionModel();
|
||||||
|
if (!select.isEmpty()){
|
||||||
|
int index = select.getSelectedIndex();
|
||||||
|
tblOrders.getItems().remove(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -98,7 +98,7 @@ public class Screeners {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public static Optional<OrderModel> showOrders(Collection<OfferDescModel> offers, double balance, long cargo) {
|
public static Collection<OrderModel> showOrders(Collection<OfferDescModel> offers, double balance, long cargo) {
|
||||||
return ordersController.showDialog(mainScreen, ordersScreen, offers, balance, cargo);
|
return ordersController.showDialog(mainScreen, ordersScreen, offers, balance, cargo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -83,6 +83,10 @@ public class OrderModel {
|
|||||||
return buyer.priceProperty().subtract(offer.getOffer().priceProperty()).multiply(max).asObject();
|
return buyer.priceProperty().subtract(offer.getOffer().priceProperty()).multiply(max).asObject();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public double getProfit() {
|
||||||
|
return profitProperty().get();
|
||||||
|
}
|
||||||
|
|
||||||
public ObjectProperty<OfferModel> buyerProperty() {
|
public ObjectProperty<OfferModel> buyerProperty() {
|
||||||
return buyer;
|
return buyer;
|
||||||
}
|
}
|
||||||
@@ -95,6 +99,10 @@ public class OrderModel {
|
|||||||
return buyer.get();
|
return buyer.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public VendorModel getVendor() {
|
||||||
|
return offer.getOffer().getVendor();
|
||||||
|
}
|
||||||
|
|
||||||
public long getMax() {
|
public long getMax() {
|
||||||
return max;
|
return max;
|
||||||
}
|
}
|
||||||
@@ -106,4 +114,5 @@ public class OrderModel {
|
|||||||
public List<OfferModel> getBuyers(){
|
public List<OfferModel> getBuyers(){
|
||||||
return offer.getBuyer();
|
return offer.getBuyer();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -58,7 +58,7 @@
|
|||||||
</TableColumn>
|
</TableColumn>
|
||||||
</columns>
|
</columns>
|
||||||
<columnResizePolicy>
|
<columnResizePolicy>
|
||||||
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY"/>
|
<TableView fx:constant="UNCONSTRAINED_RESIZE_POLICY"/>
|
||||||
</columnResizePolicy>
|
</columnResizePolicy>
|
||||||
<sortOrder>
|
<sortOrder>
|
||||||
<fx:reference source="maxProfit"/>
|
<fx:reference source="maxProfit"/>
|
||||||
|
|||||||
@@ -57,7 +57,7 @@
|
|||||||
</TableColumn>
|
</TableColumn>
|
||||||
</columns>
|
</columns>
|
||||||
<columnResizePolicy>
|
<columnResizePolicy>
|
||||||
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY"/>
|
<TableView fx:constant="UNCONSTRAINED_RESIZE_POLICY"/>
|
||||||
</columnResizePolicy>
|
</columnResizePolicy>
|
||||||
<sortOrder>
|
<sortOrder>
|
||||||
<fx:reference source="sortSell"/>
|
<fx:reference source="sortSell"/>
|
||||||
@@ -95,7 +95,7 @@
|
|||||||
</TableColumn>
|
</TableColumn>
|
||||||
</columns>
|
</columns>
|
||||||
<columnResizePolicy>
|
<columnResizePolicy>
|
||||||
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY"/>
|
<TableView fx:constant="UNCONSTRAINED_RESIZE_POLICY"/>
|
||||||
</columnResizePolicy>
|
</columnResizePolicy>
|
||||||
<sortOrder>
|
<sortOrder>
|
||||||
<fx:reference source="sortBuy"/>
|
<fx:reference source="sortBuy"/>
|
||||||
|
|||||||
@@ -44,7 +44,7 @@
|
|||||||
</TableColumn>
|
</TableColumn>
|
||||||
</columns>
|
</columns>
|
||||||
<columnResizePolicy>
|
<columnResizePolicy>
|
||||||
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY"/>
|
<TableView fx:constant="UNCONSTRAINED_RESIZE_POLICY"/>
|
||||||
</columnResizePolicy>
|
</columnResizePolicy>
|
||||||
<sortOrder>
|
<sortOrder>
|
||||||
<fx:reference source="bestProfit"/>
|
<fx:reference source="bestProfit"/>
|
||||||
@@ -62,7 +62,7 @@
|
|||||||
</TableColumn>
|
</TableColumn>
|
||||||
</columns>
|
</columns>
|
||||||
<columnResizePolicy>
|
<columnResizePolicy>
|
||||||
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY"/>
|
<TableView fx:constant="UNCONSTRAINED_RESIZE_POLICY"/>
|
||||||
</columnResizePolicy>
|
</columnResizePolicy>
|
||||||
<sortOrder>
|
<sortOrder>
|
||||||
<fx:reference source="curProfit"/>
|
<fx:reference source="curProfit"/>
|
||||||
|
|||||||
@@ -4,6 +4,10 @@
|
|||||||
<?import javafx.scene.layout.*?>
|
<?import javafx.scene.layout.*?>
|
||||||
|
|
||||||
<?import ru.trader.view.support.NumberField?>
|
<?import ru.trader.view.support.NumberField?>
|
||||||
|
<?import javafx.scene.control.cell.PropertyValueFactory?>
|
||||||
|
<?import ru.trader.view.support.cells.DoubleCell?>
|
||||||
|
<?import ru.trader.view.support.cells.OfferCellValueImpl?>
|
||||||
|
|
||||||
<VBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
|
<VBox xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
|
||||||
fx:controller="ru.trader.controllers.RoutersController">
|
fx:controller="ru.trader.controllers.RoutersController">
|
||||||
<HBox>
|
<HBox>
|
||||||
@@ -17,7 +21,35 @@
|
|||||||
</HBox>
|
</HBox>
|
||||||
<Label text="Станция:"/>
|
<Label text="Станция:"/>
|
||||||
<ComboBox fx:id="vendors"/>
|
<ComboBox fx:id="vendors"/>
|
||||||
<Button fx:id="buy" text="Купить"/>
|
<Button fx:id="add" text="Добавить" onAction="#addOrders"/>
|
||||||
<Button fx:id="sell" text="Продать"/>
|
<Button text="Удалить" onAction="#removeSelected"/>
|
||||||
</HBox>
|
</HBox>
|
||||||
|
<TableView fx:id="tblOrders">
|
||||||
|
<columns>
|
||||||
|
<TableColumn minWidth="120.0" prefWidth="120.0" text="Продавец">
|
||||||
|
<cellValueFactory><PropertyValueFactory property="vendor"/></cellValueFactory>
|
||||||
|
</TableColumn>
|
||||||
|
<TableColumn minWidth="200.0" prefWidth="200.0" text="Товар">
|
||||||
|
<cellValueFactory><PropertyValueFactory property="name"/></cellValueFactory>
|
||||||
|
</TableColumn>
|
||||||
|
<TableColumn minWidth="80.0" prefWidth="80.0" text="Цена">
|
||||||
|
<cellFactory><DoubleCell/></cellFactory>
|
||||||
|
<cellValueFactory><PropertyValueFactory property="price"/></cellValueFactory>
|
||||||
|
</TableColumn>
|
||||||
|
<TableColumn minWidth="80.0" prefWidth="80.0" text="Кол-во">
|
||||||
|
<cellValueFactory><PropertyValueFactory property="count"/></cellValueFactory>
|
||||||
|
</TableColumn>
|
||||||
|
<TableColumn minWidth="120.0" prefWidth="120.0" text="Покупатель">
|
||||||
|
<cellValueFactory><OfferCellValueImpl property="buyer"/></cellValueFactory>
|
||||||
|
</TableColumn>
|
||||||
|
<TableColumn minWidth="80.0" prefWidth="80.0" text="Прибыль">
|
||||||
|
<cellFactory><DoubleCell/></cellFactory>
|
||||||
|
<cellValueFactory><PropertyValueFactory property="profit"/></cellValueFactory>
|
||||||
|
</TableColumn>
|
||||||
|
</columns>
|
||||||
|
<columnResizePolicy>
|
||||||
|
<TableView fx:constant="UNCONSTRAINED_RESIZE_POLICY"/>
|
||||||
|
</columnResizePolicy>
|
||||||
|
</TableView>
|
||||||
|
<HBox><Label text="Итого:"/><NumberField editable="false" fx:id="totalProfit"/></HBox>
|
||||||
</VBox>
|
</VBox>
|
||||||
|
|||||||
Reference in New Issue
Block a user