Archived
0

Implements orders list

This commit is contained in:
iMoHax
2014-07-17 21:18:55 +04:00
parent d8c3c16e9c
commit b98d53048c
8 changed files with 103 additions and 17 deletions

View File

@@ -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());
} }

View File

@@ -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);
}
}
} }

View File

@@ -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);
} }

View File

@@ -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();
} }
} }

View File

@@ -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"/>

View File

@@ -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"/>

View File

@@ -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"/>

View File

@@ -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>