-Set fokus di text field setiap membuka form cari pelanggan, cari barang, tambah nota -Set close setiap form menggunakan tombol esc -Menambahkan model noBarangpull/4/head
| @@ -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(); | |||
| } | |||
| } | |||
| @@ -6,6 +6,7 @@ | |||
| package id.amigogroup.posterminal.pencarian; | |||
| import id.amigogroup.posterminal.model.Barang; | |||
| import id.amigogroup.posterminal.model.NoBarang; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| @@ -16,7 +17,8 @@ import java.util.Map; | |||
| public class BarangCache { | |||
| private static BarangCache instance; | |||
| private Map<String, Barang> daftarBarang; | |||
| private Map<String, NoBarang> daftarNoBarang; | |||
| private BarangCache(){ | |||
| daftarBarang = new HashMap<>(); | |||
| } | |||
| @@ -29,4 +31,8 @@ public class BarangCache { | |||
| public Map<String, Barang> getDaftarBarang(){ | |||
| return daftarBarang; | |||
| } | |||
| public Map<String, NoBarang> getDaftarNoBarang() { | |||
| return daftarNoBarang; | |||
| } | |||
| } | |||
| @@ -10,15 +10,18 @@ import id.amigogroup.posterminal.api.AmigoPosRx; | |||
| import id.amigogroup.posterminal.model.Barang; | |||
| import id.amigogroup.posterminal.model.Pagination; | |||
| import id.amigogroup.posterminal.util.AlertUtil; | |||
| import id.amigogroup.posterminal.util.Fucout; | |||
| import io.reactivex.Observer; | |||
| import io.reactivex.disposables.Disposable; | |||
| import java.io.IOException; | |||
| import java.net.HttpURLConnection; | |||
| import java.net.URL; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| import java.util.ResourceBundle; | |||
| import java.util.logging.Level; | |||
| import java.util.logging.Logger; | |||
| import javafx.application.Platform; | |||
| import javafx.beans.property.ReadOnlyObjectWrapper; | |||
| import javafx.collections.FXCollections; | |||
| import javafx.collections.ObservableList; | |||
| @@ -27,7 +30,8 @@ import javafx.fxml.FXMLLoader; | |||
| import javafx.fxml.Initializable; | |||
| import javafx.scene.Parent; | |||
| 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.RadioButton; | |||
| import javafx.scene.control.TableColumn; | |||
| @@ -82,6 +86,10 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia | |||
| */ | |||
| @Override | |||
| 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) -> { | |||
| 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) { | |||
| daftarTabelBarang.clear(); | |||
| 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( | |||
| // Fucout.getText(barang.getKodeBarang()), | |||
| barang.getKodeBarang(), | |||
| 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)) { | |||
| posRx.getBarangByNamaBarang(tfPencarian.getText()).subscribe(daftarBarangObserver); | |||
| } | |||
| tfPencarian.requestFocus(); | |||
| } | |||
| public Observer<Barang> barangKodeObserver = new Observer<Barang>() { | |||
| @@ -165,8 +165,9 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia | |||
| @Override | |||
| public void onNext(Barang b) { | |||
| if (b != null) { | |||
| barang = b; | |||
| close(); | |||
| List<Barang> db = new ArrayList<>(); | |||
| db.add(b); | |||
| updateTabelBarang(db); | |||
| } | |||
| } | |||
| @@ -13,6 +13,8 @@ import java.util.logging.Logger; | |||
| import javafx.fxml.FXMLLoader; | |||
| import javafx.fxml.Initializable; | |||
| import javafx.scene.Parent; | |||
| import javafx.scene.control.ButtonBar.ButtonData; | |||
| import javafx.scene.control.ButtonType; | |||
| import javafx.scene.control.Dialog; | |||
| import javafx.stage.Window; | |||
| @@ -28,7 +30,7 @@ public class DialogCariNotaTundaController extends Dialog<String> implements Ini | |||
| */ | |||
| @Override | |||
| public void initialize(URL url, ResourceBundle rb) { | |||
| // TODO | |||
| getDialogPane().getButtonTypes().add(new ButtonType("Tutup", ButtonData.CANCEL_CLOSE)); | |||
| } | |||
| public DialogCariNotaTundaController(/*FormPresensiController parent*/) { | |||
| @@ -5,10 +5,7 @@ | |||
| */ | |||
| 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.SystemValue; | |||
| import id.amigogroup.posterminal.api.AmigoPosRx; | |||
| import id.amigogroup.posterminal.model.Pagination; | |||
| import id.amigogroup.posterminal.model.Pelanggan; | |||
| @@ -22,15 +19,16 @@ import java.util.List; | |||
| import java.util.ResourceBundle; | |||
| import java.util.logging.Level; | |||
| import java.util.logging.Logger; | |||
| import javafx.application.Platform; | |||
| import javafx.beans.property.ReadOnlyObjectWrapper; | |||
| import javafx.collections.FXCollections; | |||
| import javafx.collections.ObservableList; | |||
| import javafx.event.ActionEvent; | |||
| import javafx.fxml.FXML; | |||
| import javafx.fxml.FXMLLoader; | |||
| import javafx.fxml.Initializable; | |||
| import javafx.scene.Parent; | |||
| import javafx.scene.control.Alert; | |||
| import javafx.scene.control.ButtonBar.ButtonData; | |||
| import javafx.scene.control.ButtonType; | |||
| import javafx.scene.control.Dialog; | |||
| import javafx.scene.control.RadioButton; | |||
| @@ -88,7 +86,10 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements | |||
| */ | |||
| @Override | |||
| 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) -> { | |||
| return new ReadOnlyObjectWrapper(tbvPelanggan.getItems().indexOf(cell.getValue()) + 1); | |||
| }); | |||
| @@ -137,7 +138,7 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements | |||
| pelanggan.getAlias(), | |||
| pelanggan.getNama(), | |||
| pelanggan.getAlamat(), | |||
| pelanggan.getTelp() + " / " +pelanggan.getPonsel(), | |||
| pelanggan.getTelp() + " / " + pelanggan.getPonsel(), | |||
| pelanggan.getUpline())); | |||
| } | |||
| } | |||
| @@ -24,6 +24,7 @@ import javafx.fxml.Initializable; | |||
| import javafx.scene.Parent; | |||
| 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.ComboBox; | |||
| import javafx.scene.control.Dialog; | |||
| @@ -55,8 +56,8 @@ public class DialogTambahNotaController extends Dialog<String> implements Initia | |||
| private TextField tfAmbilDariCheckout; | |||
| 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 | |||
| public void initialize(URL url, ResourceBundle rb) { | |||
| @@ -66,6 +67,7 @@ public class DialogTambahNotaController extends Dialog<String> implements Initia | |||
| "Bawa Dulu", | |||
| "Retur" | |||
| ); | |||
| cbxPilihNota.getSelectionModel().select(0); | |||
| } | |||
| public DialogTambahNotaController() { | |||
| @@ -84,6 +86,7 @@ public class DialogTambahNotaController extends Dialog<String> implements Initia | |||
| getDialogPane().getButtonTypes().add(btnLanjutkan); | |||
| Button btnLanjutkanR = (Button) getDialogPane().lookupButton(btnLanjutkan); | |||
| btnLanjutkanR.setDefaultButton(true); | |||
| btnLanjutkanR.addEventFilter(ActionEvent.ACTION, event -> { | |||
| if (((RadioButton) tgTipe.getSelectedToggle()) == rbAmbilDariCheckout) { | |||
| boolean notaExists = false; | |||
| @@ -166,5 +169,6 @@ public class DialogTambahNotaController extends Dialog<String> implements Initia | |||
| void rbAmbilDariCheckoutOnAction(ActionEvent event) { | |||
| cbxPilihNota.setDisable(true); | |||
| tfAmbilDariCheckout.setDisable(false); | |||
| tfAmbilDariCheckout.requestFocus(); | |||
| } | |||
| } | |||
| @@ -24,7 +24,7 @@ | |||
| <ToggleGroup fx:id="tgTipe" /> | |||
| </toggleGroup> | |||
| </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"> | |||
| <columns> | |||
| <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="tcUkur" text="Ukur" /> | |||
| <TableColumn fx:id="tcHarga" prefWidth="75.0" text="Harga" /> | |||
| <TableColumn fx:id="tcTambah" prefWidth="75.0" text="Tambah" /> | |||
| </columns> | |||
| <columnResizePolicy> | |||
| <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> | |||
| @@ -24,7 +24,7 @@ | |||
| <ToggleGroup fx:id="tgTipe" /> | |||
| </toggleGroup> | |||
| </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" /> | |||
| <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> | |||