浏览代码

-Sistem bisa mencari barang berdasarkan kode barang dan nama barang menggunakan tombol F5

-Set fokus di text field setiap membuka form cari pelanggan, cari barang, tambah nota
-Set close setiap form menggunakan tombol esc
-Menambahkan model noBarang
pull/4/head
Josua Pascario 5 年前
父节点
当前提交
859214a84f
共有 8 个文件被更改,包括 190 次插入34 次删除
  1. +143
    -0
      src/main/java/id/amigogroup/posterminal/model/NoBarang.java
  2. +7
    -1
      src/main/java/id/amigogroup/posterminal/pencarian/BarangCache.java
  3. +22
    -21
      src/main/java/id/amigogroup/posterminal/pencarian/DialogCariBarangController.java
  4. +3
    -1
      src/main/java/id/amigogroup/posterminal/pencarian/DialogCariNotaTundaController.java
  5. +7
    -6
      src/main/java/id/amigogroup/posterminal/pencarian/DialogCariPelangganController.java
  6. +6
    -2
      src/main/java/id/amigogroup/posterminal/transaksi/DialogTambahNotaController.java
  7. +1
    -2
      src/main/resources/fxml/DialogCariBarang.fxml
  8. +1
    -1
      src/main/resources/fxml/DialogCariPelanggan.fxml

+ 143
- 0
src/main/java/id/amigogroup/posterminal/model/NoBarang.java 查看文件

@@ -0,0 +1,143 @@

package id.amigogroup.posterminal.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"id",
"id_gabungan",
"nomor",
"harga_pokok",
"harga_jual",
"stok_min",
"stok",
"stok_operasional"
})
public class NoBarang {

@JsonProperty("id")
private int id;
@JsonProperty("id_gabungan")
private String idGabungan;
@JsonProperty("nomor")
private String nomor;
@JsonProperty("harga_pokok")
private String hargaPokok;
@JsonProperty("harga_jual")
private int hargaJual;
@JsonProperty("stok_min")
private int stokMin;
@JsonProperty("stok")
private int stok;
@JsonProperty("stok_operasional")
private int stokOperasional;

@JsonProperty("id")
public int getId() {
return id;
}

@JsonProperty("id")
public void setId(int id) {
this.id = id;
}

@JsonProperty("id_gabungan")
public String getIdGabungan() {
return idGabungan;
}

@JsonProperty("id_gabungan")
public void setIdGabungan(String idGabungan) {
this.idGabungan = idGabungan;
}

@JsonProperty("nomor")
public String getNomor() {
return nomor;
}

@JsonProperty("nomor")
public void setNomor(String nomor) {
this.nomor = nomor;
}

@JsonProperty("harga_pokok")
public String getHargaPokok() {
return hargaPokok;
}

@JsonProperty("harga_pokok")
public void setHargaPokok(String hargaPokok) {
this.hargaPokok = hargaPokok;
}

@JsonProperty("harga_jual")
public int getHargaJual() {
return hargaJual;
}

@JsonProperty("harga_jual")
public void setHargaJual(int hargaJual) {
this.hargaJual = hargaJual;
}

@JsonProperty("stok_min")
public int getStokMin() {
return stokMin;
}

@JsonProperty("stok_min")
public void setStokMin(int stokMin) {
this.stokMin = stokMin;
}

@JsonProperty("stok")
public int getStok() {
return stok;
}

@JsonProperty("stok")
public void setStok(int stok) {
this.stok = stok;
}

@JsonProperty("stok_operasional")
public int getStokOperasional() {
return stokOperasional;
}

@JsonProperty("stok_operasional")
public void setStokOperasional(int stokOperasional) {
this.stokOperasional = stokOperasional;
}

@Override
public String toString() {
return new ToStringBuilder(this).append("id", id).append("idGabungan", idGabungan).append("nomor", nomor).append("hargaPokok", hargaPokok).append("hargaJual", hargaJual).append("stokMin", stokMin).append("stok", stok).append("stokOperasional", stokOperasional).toString();
}

@Override
public int hashCode() {
return new HashCodeBuilder().append(idGabungan).append(hargaPokok).append(stokMin).append(stokOperasional).append(id).append(hargaJual).append(stok).append(nomor).toHashCode();
}

@Override
public boolean equals(Object other) {
if (other == this) {
return true;
}
if ((other instanceof NoBarang) == false) {
return false;
}
NoBarang rhs = ((NoBarang) other);
return new EqualsBuilder().append(idGabungan, rhs.idGabungan).append(hargaPokok, rhs.hargaPokok).append(stokMin, rhs.stokMin).append(stokOperasional, rhs.stokOperasional).append(id, rhs.id).append(hargaJual, rhs.hargaJual).append(stok, rhs.stok).append(nomor, rhs.nomor).isEquals();
}

}

+ 7
- 1
src/main/java/id/amigogroup/posterminal/pencarian/BarangCache.java 查看文件

@@ -6,6 +6,7 @@
package id.amigogroup.posterminal.pencarian; package id.amigogroup.posterminal.pencarian;


import id.amigogroup.posterminal.model.Barang; import id.amigogroup.posterminal.model.Barang;
import id.amigogroup.posterminal.model.NoBarang;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;


@@ -16,7 +17,8 @@ import java.util.Map;
public class BarangCache { public class BarangCache {
private static BarangCache instance; private static BarangCache instance;
private Map<String, Barang> daftarBarang; private Map<String, Barang> daftarBarang;
private Map<String, NoBarang> daftarNoBarang;
private BarangCache(){ private BarangCache(){
daftarBarang = new HashMap<>(); daftarBarang = new HashMap<>();
} }
@@ -29,4 +31,8 @@ public class BarangCache {
public Map<String, Barang> getDaftarBarang(){ public Map<String, Barang> getDaftarBarang(){
return daftarBarang; return daftarBarang;
} }

public Map<String, NoBarang> getDaftarNoBarang() {
return daftarNoBarang;
}
} }

+ 22
- 21
src/main/java/id/amigogroup/posterminal/pencarian/DialogCariBarangController.java 查看文件

@@ -10,15 +10,18 @@ import id.amigogroup.posterminal.api.AmigoPosRx;
import id.amigogroup.posterminal.model.Barang; import id.amigogroup.posterminal.model.Barang;
import id.amigogroup.posterminal.model.Pagination; import id.amigogroup.posterminal.model.Pagination;
import id.amigogroup.posterminal.util.AlertUtil; import id.amigogroup.posterminal.util.AlertUtil;
import id.amigogroup.posterminal.util.Fucout;
import io.reactivex.Observer; import io.reactivex.Observer;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import java.io.IOException; import java.io.IOException;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import javafx.application.Platform;
import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
@@ -27,7 +30,8 @@ import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog; import javafx.scene.control.Dialog;
import javafx.scene.control.RadioButton; import javafx.scene.control.RadioButton;
import javafx.scene.control.TableColumn; import javafx.scene.control.TableColumn;
@@ -82,6 +86,10 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
*/ */
@Override @Override
public void initialize(URL url, ResourceBundle rb) { public void initialize(URL url, ResourceBundle rb) {
Platform.runLater(() -> {
tfPencarian.requestFocus();
});
getDialogPane().getButtonTypes().add(new ButtonType("Tutup", ButtonData.CANCEL_CLOSE));
tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangCari, Integer> cell) -> { tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangCari, Integer> cell) -> {
return new ReadOnlyObjectWrapper(tbvBarang.getItems().indexOf(cell.getValue()) + 1); return new ReadOnlyObjectWrapper(tbvBarang.getItems().indexOf(cell.getValue()) + 1);
}); });
@@ -119,30 +127,21 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
} }
} }


// public void fillTable(List<TabelBarangCari> daftarBarang) {
//STATIC FUNCTION, hilangkan jika sudah tidak dipakai
// Button btnTambah = new Button("Tambah");
// btnTambah.setOnAction((event) -> {
// setResult("Barang x");
// this.close();
// });
// daftarTabelBarang.add(new TabelBarangCari("AACOBA001ABCDXL", "Barang x", "XL", "79.900", btnTambah));
// }

public void updateTabelBarang(List<Barang> daftarBarang) { public void updateTabelBarang(List<Barang> daftarBarang) {
daftarTabelBarang.clear(); daftarTabelBarang.clear();
for (Barang barang : daftarBarang) { for (Barang barang : daftarBarang) {
// Button btnTambah = new Button("Tambah");
// String noBarang = "...";
// if (BarangCache.getInstance().getDaftarNoBarang().containsKey(barang.getKodeBarang())) {
// noBarang = Fucout.getText(BarangCache.getInstance().getDaftarNoBarang()
// .get(barang.getKodeBarang()).getNomor());
// }
daftarTabelBarang.add(new TabelBarangCari( daftarTabelBarang.add(new TabelBarangCari(
// Fucout.getText(barang.getKodeBarang()),
barang.getKodeBarang(), barang.getKodeBarang(),
barang.getNamaBarang(), barang.getNamaBarang(),
"42",
"14000"));
// btnTambah.setOnAction((event) -> {
// setResult("Barang x");
// this.close();
// });
"-",
"-"));

} }
} }


@@ -155,6 +154,7 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
&& tfPencarian.getText().length() >= 3)) { && tfPencarian.getText().length() >= 3)) {
posRx.getBarangByNamaBarang(tfPencarian.getText()).subscribe(daftarBarangObserver); posRx.getBarangByNamaBarang(tfPencarian.getText()).subscribe(daftarBarangObserver);
} }
tfPencarian.requestFocus();
} }


public Observer<Barang> barangKodeObserver = new Observer<Barang>() { public Observer<Barang> barangKodeObserver = new Observer<Barang>() {
@@ -165,8 +165,9 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
@Override @Override
public void onNext(Barang b) { public void onNext(Barang b) {
if (b != null) { if (b != null) {
barang = b;
close();
List<Barang> db = new ArrayList<>();
db.add(b);
updateTabelBarang(db);
} }
} }




+ 3
- 1
src/main/java/id/amigogroup/posterminal/pencarian/DialogCariNotaTundaController.java 查看文件

@@ -13,6 +13,8 @@ import java.util.logging.Logger;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog; import javafx.scene.control.Dialog;
import javafx.stage.Window; import javafx.stage.Window;


@@ -28,7 +30,7 @@ public class DialogCariNotaTundaController extends Dialog<String> implements Ini
*/ */
@Override @Override
public void initialize(URL url, ResourceBundle rb) { public void initialize(URL url, ResourceBundle rb) {
// TODO
getDialogPane().getButtonTypes().add(new ButtonType("Tutup", ButtonData.CANCEL_CLOSE));
} }
public DialogCariNotaTundaController(/*FormPresensiController parent*/) { public DialogCariNotaTundaController(/*FormPresensiController parent*/) {


+ 7
- 6
src/main/java/id/amigogroup/posterminal/pencarian/DialogCariPelangganController.java 查看文件

@@ -5,10 +5,7 @@
*/ */
package id.amigogroup.posterminal.pencarian; package id.amigogroup.posterminal.pencarian;


import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import id.amigogroup.posterminal.FormUtamaController; import id.amigogroup.posterminal.FormUtamaController;
import id.amigogroup.posterminal.SystemValue;
import id.amigogroup.posterminal.api.AmigoPosRx; import id.amigogroup.posterminal.api.AmigoPosRx;
import id.amigogroup.posterminal.model.Pagination; import id.amigogroup.posterminal.model.Pagination;
import id.amigogroup.posterminal.model.Pelanggan; import id.amigogroup.posterminal.model.Pelanggan;
@@ -22,15 +19,16 @@ import java.util.List;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
import javafx.application.Platform;
import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.beans.property.ReadOnlyObjectWrapper;
import javafx.collections.FXCollections; import javafx.collections.FXCollections;
import javafx.collections.ObservableList; import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML; import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader; import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable; import javafx.fxml.Initializable;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
import javafx.scene.control.Dialog; import javafx.scene.control.Dialog;
import javafx.scene.control.RadioButton; import javafx.scene.control.RadioButton;
@@ -88,7 +86,10 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements
*/ */
@Override @Override
public void initialize(URL url, ResourceBundle rb) { public void initialize(URL url, ResourceBundle rb) {
getDialogPane().getButtonTypes().add(ButtonType.CLOSE);
Platform.runLater(() -> {
tfPencarian.requestFocus();
});
getDialogPane().getButtonTypes().add(new ButtonType("Tutup", ButtonData.CANCEL_CLOSE));
tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelPelanggan, Integer> cell) -> { tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelPelanggan, Integer> cell) -> {
return new ReadOnlyObjectWrapper(tbvPelanggan.getItems().indexOf(cell.getValue()) + 1); return new ReadOnlyObjectWrapper(tbvPelanggan.getItems().indexOf(cell.getValue()) + 1);
}); });
@@ -137,7 +138,7 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements
pelanggan.getAlias(), pelanggan.getAlias(),
pelanggan.getNama(), pelanggan.getNama(),
pelanggan.getAlamat(), pelanggan.getAlamat(),
pelanggan.getTelp() + " / " +pelanggan.getPonsel(),
pelanggan.getTelp() + " / " + pelanggan.getPonsel(),
pelanggan.getUpline())); pelanggan.getUpline()));
} }
} }


+ 6
- 2
src/main/java/id/amigogroup/posterminal/transaksi/DialogTambahNotaController.java 查看文件

@@ -24,6 +24,7 @@ import javafx.fxml.Initializable;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
import javafx.scene.control.ComboBox; import javafx.scene.control.ComboBox;
import javafx.scene.control.Dialog; import javafx.scene.control.Dialog;
@@ -55,8 +56,8 @@ public class DialogTambahNotaController extends Dialog<String> implements Initia
private TextField tfAmbilDariCheckout; private TextField tfAmbilDariCheckout;


private AmigoPosRx posRx = new AmigoPosRx(); private AmigoPosRx posRx = new AmigoPosRx();
public static final ButtonType btnLanjutkan = new ButtonType("Lanjutkan");
public static final ButtonType btnBatal = new ButtonType("Batal");
public static final ButtonType btnLanjutkan = new ButtonType("Lanjutkan", ButtonData.YES);
public static final ButtonType btnBatal = new ButtonType("Batal", ButtonData.CANCEL_CLOSE);


@Override @Override
public void initialize(URL url, ResourceBundle rb) { public void initialize(URL url, ResourceBundle rb) {
@@ -66,6 +67,7 @@ public class DialogTambahNotaController extends Dialog<String> implements Initia
"Bawa Dulu", "Bawa Dulu",
"Retur" "Retur"
); );
cbxPilihNota.getSelectionModel().select(0);
} }


public DialogTambahNotaController() { public DialogTambahNotaController() {
@@ -84,6 +86,7 @@ public class DialogTambahNotaController extends Dialog<String> implements Initia
getDialogPane().getButtonTypes().add(btnLanjutkan); getDialogPane().getButtonTypes().add(btnLanjutkan);


Button btnLanjutkanR = (Button) getDialogPane().lookupButton(btnLanjutkan); Button btnLanjutkanR = (Button) getDialogPane().lookupButton(btnLanjutkan);
btnLanjutkanR.setDefaultButton(true);
btnLanjutkanR.addEventFilter(ActionEvent.ACTION, event -> { btnLanjutkanR.addEventFilter(ActionEvent.ACTION, event -> {
if (((RadioButton) tgTipe.getSelectedToggle()) == rbAmbilDariCheckout) { if (((RadioButton) tgTipe.getSelectedToggle()) == rbAmbilDariCheckout) {
boolean notaExists = false; boolean notaExists = false;
@@ -166,5 +169,6 @@ public class DialogTambahNotaController extends Dialog<String> implements Initia
void rbAmbilDariCheckoutOnAction(ActionEvent event) { void rbAmbilDariCheckoutOnAction(ActionEvent event) {
cbxPilihNota.setDisable(true); cbxPilihNota.setDisable(true);
tfAmbilDariCheckout.setDisable(false); tfAmbilDariCheckout.setDisable(false);
tfAmbilDariCheckout.requestFocus();
} }
} }

+ 1
- 2
src/main/resources/fxml/DialogCariBarang.fxml 查看文件

@@ -24,7 +24,7 @@
<ToggleGroup fx:id="tgTipe" /> <ToggleGroup fx:id="tgTipe" />
</toggleGroup> </toggleGroup>
</RadioButton> </RadioButton>
<RadioButton fx:id="rbNamaBarang" layoutX="103.0" layoutY="93.0" mnemonicParsing="false" text="Nama Barang" toggleGroup="$tgTipe" AnchorPane.leftAnchor="103.0" AnchorPane.topAnchor="93.0" />
<RadioButton fx:id="rbNamaBarang" layoutX="103.0" layoutY="93.0" mnemonicParsing="false" selected="true" text="Nama Barang" toggleGroup="$tgTipe" AnchorPane.leftAnchor="103.0" AnchorPane.topAnchor="93.0" />
<TableView fx:id="tbvBarang" layoutX="14.0" layoutY="117.0" prefHeight="338.0" prefWidth="500.0" AnchorPane.bottomAnchor="-5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="117.0"> <TableView fx:id="tbvBarang" layoutX="14.0" layoutY="117.0" prefHeight="338.0" prefWidth="500.0" AnchorPane.bottomAnchor="-5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="117.0">
<columns> <columns>
<TableColumn fx:id="tcNo" maxWidth="30.0" minWidth="30.0" prefWidth="30.0" resizable="false" text="No" /> <TableColumn fx:id="tcNo" maxWidth="30.0" minWidth="30.0" prefWidth="30.0" resizable="false" text="No" />
@@ -32,7 +32,6 @@
<TableColumn fx:id="tcNama" prefWidth="75.0" text="Nama" /> <TableColumn fx:id="tcNama" prefWidth="75.0" text="Nama" />
<TableColumn fx:id="tcUkur" text="Ukur" /> <TableColumn fx:id="tcUkur" text="Ukur" />
<TableColumn fx:id="tcHarga" prefWidth="75.0" text="Harga" /> <TableColumn fx:id="tcHarga" prefWidth="75.0" text="Harga" />
<TableColumn fx:id="tcTambah" prefWidth="75.0" text="Tambah" />
</columns> </columns>
<columnResizePolicy> <columnResizePolicy>
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />


+ 1
- 1
src/main/resources/fxml/DialogCariPelanggan.fxml 查看文件

@@ -24,7 +24,7 @@
<ToggleGroup fx:id="tgTipe" /> <ToggleGroup fx:id="tgTipe" />
</toggleGroup> </toggleGroup>
</RadioButton> </RadioButton>
<RadioButton fx:id="rbNama" layoutX="80.0" layoutY="93.0" mnemonicParsing="false" text="Nama" toggleGroup="$tgTipe" AnchorPane.leftAnchor="80.0" AnchorPane.topAnchor="93.0" />
<RadioButton fx:id="rbNama" layoutX="80.0" layoutY="93.0" mnemonicParsing="false" selected="true" text="Nama" toggleGroup="$tgTipe" AnchorPane.leftAnchor="80.0" AnchorPane.topAnchor="93.0" />
<RadioButton fx:id="rbNoTelpNoHp" layoutX="143.0" layoutY="93.0" mnemonicParsing="false" text="NoTelp/No.Hp" toggleGroup="$tgTipe" AnchorPane.leftAnchor="143.0" AnchorPane.topAnchor="93.0" /> <RadioButton fx:id="rbNoTelpNoHp" layoutX="143.0" layoutY="93.0" mnemonicParsing="false" text="NoTelp/No.Hp" toggleGroup="$tgTipe" AnchorPane.leftAnchor="143.0" AnchorPane.topAnchor="93.0" />
<TableView fx:id="tbvPelanggan" layoutX="14.0" layoutY="117.0" prefHeight="338.0" prefWidth="500.0" AnchorPane.bottomAnchor="-5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="117.0"> <TableView fx:id="tbvPelanggan" layoutX="14.0" layoutY="117.0" prefHeight="338.0" prefWidth="500.0" AnchorPane.bottomAnchor="-5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="117.0">
<columns> <columns>


正在加载...
取消
保存