diff --git a/src/main/java/id/amigogroup/posterminal/FormUtamaController.java b/src/main/java/id/amigogroup/posterminal/FormUtamaController.java index f9196ed..62c8286 100644 --- a/src/main/java/id/amigogroup/posterminal/FormUtamaController.java +++ b/src/main/java/id/amigogroup/posterminal/FormUtamaController.java @@ -3,6 +3,7 @@ package id.amigogroup.posterminal; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import id.amigogroup.posterminal.api.AmigoPosRx; +import id.amigogroup.posterminal.model.Barang; import id.amigogroup.posterminal.model.MNotaRetur; import id.amigogroup.posterminal.model.MNotaTunai; import id.amigogroup.posterminal.model.Pelanggan; @@ -233,7 +234,7 @@ public class FormUtamaController implements Initializable { DialogCariBarangController dialogCariBarang = new DialogCariBarangController(); dialogCariBarang.initOwner(bpMain.getScene().getWindow()); - Optional result = dialogCariBarang.showAndWait(); + Optional result = dialogCariBarang.showAndWait(); System.out.println(result); }; listShortcuts.put(kcCariBarang, rnCariBarang); diff --git a/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java b/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java index 21b91ce..5e701cb 100644 --- a/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java +++ b/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java @@ -5,6 +5,7 @@ */ package id.amigogroup.posterminal.api; +import id.amigogroup.posterminal.model.Barang; import id.amigogroup.posterminal.model.Karyawan; import id.amigogroup.posterminal.model.Pagination; import id.amigogroup.posterminal.model.MNotaRetur; @@ -28,6 +29,14 @@ public class AmigoPosRx { return UtilsApi.getServiceApiBarang().getMNotaReturByNoNota(noNota); } + public Observable getBarangByKodeBarang(String kode){ + return UtilsApi.getServiceApiBarang().getBarangByKodeBarang(kode); + } + + public Observable> getBarangByNamaBarang(String namaBarang){ + return UtilsApi.getServiceApiBarang().getBarangByNamaBarang(namaBarang); + } + //Checkin API public Observable> getAllTas(){ return UtilsApi.getServiceApiCheckin().getAllTas(); diff --git a/src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java b/src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java index f6dbd3c..6736a59 100644 --- a/src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java +++ b/src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java @@ -5,8 +5,10 @@ */ package id.amigogroup.posterminal.api; +import id.amigogroup.posterminal.model.Barang; import id.amigogroup.posterminal.model.MNotaRetur; import id.amigogroup.posterminal.model.MNotaTunai; +import id.amigogroup.posterminal.model.Pagination; import io.reactivex.Observable; import retrofit2.http.GET; import retrofit2.http.Path; @@ -31,4 +33,12 @@ public interface ServiceApiBarang { //Mengambil Master Nota Retur by No Nota @GET("m-nota-retur/no-nota/{noNota}") Observable getMNotaReturByNoNota(@Path("noNota") String noNota); + + //Mengambil Barang Berdasarkan Kode Barang + @GET("barangs/kode/{kode}") + Observable getBarangByKodeBarang(@Path("kode") String kode); + + //Mengambil Barang Berdasarkan Nama Barang + @GET("barangs/nama/{namaBarang}") + Observable> getBarangByNamaBarang(@Path("namaBarang") String namaBarang); } diff --git a/src/main/java/id/amigogroup/posterminal/model/Barang.java b/src/main/java/id/amigogroup/posterminal/model/Barang.java index dc22400..b24c180 100644 --- a/src/main/java/id/amigogroup/posterminal/model/Barang.java +++ b/src/main/java/id/amigogroup/posterminal/model/Barang.java @@ -1,6 +1,7 @@ package id.amigogroup.posterminal.model; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonPropertyOrder; @@ -8,6 +9,7 @@ import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; +@JsonIgnoreProperties(ignoreUnknown = true) @JsonInclude(JsonInclude.Include.NON_NULL) @JsonPropertyOrder({ "kode_barang", diff --git a/src/main/java/id/amigogroup/posterminal/pencarian/DialogCariBarangController.java b/src/main/java/id/amigogroup/posterminal/pencarian/DialogCariBarangController.java index 00450a3..f2b5c67 100644 --- a/src/main/java/id/amigogroup/posterminal/pencarian/DialogCariBarangController.java +++ b/src/main/java/id/amigogroup/posterminal/pencarian/DialogCariBarangController.java @@ -5,9 +5,16 @@ */ package id.amigogroup.posterminal.pencarian; +import id.amigogroup.posterminal.FormUtamaController; +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 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; @@ -19,24 +26,32 @@ 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.Button; import javafx.scene.control.Dialog; +import javafx.scene.control.RadioButton; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.ToggleGroup; import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; import javafx.scene.layout.AnchorPane; import javafx.stage.Window; +import retrofit2.HttpException; /** * FXML Controller class * * @author ronal */ -public class DialogCariBarangController extends Dialog implements Initializable { +public class DialogCariBarangController extends Dialog implements Initializable { @FXML AnchorPane apContent; - + @FXML + private TextField tfPencarian; @FXML private TableView tbvBarang; @FXML @@ -49,11 +64,18 @@ public class DialogCariBarangController extends Dialog implements Initia private TableColumn tcUkur; @FXML private TableColumn tcHarga; +// @FXML +// private TableColumn tcBtnTambah; + @FXML + private ToggleGroup tgTipe; @FXML - private TableColumn tcBtnTambah; + private RadioButton rbKodeBarang; + @FXML + private RadioButton rbNamaBarang; final ObservableList daftarTabelBarang = FXCollections.observableArrayList(); -// String str = "Halo"; + AmigoPosRx posRx = new AmigoPosRx(); + private Barang barang = null; /** * Initializes the controller class. @@ -67,40 +89,149 @@ public class DialogCariBarangController extends Dialog implements Initia tcNama.setCellValueFactory(new PropertyValueFactory<>("nama")); tcUkur.setCellValueFactory(new PropertyValueFactory<>("ukur")); tcHarga.setCellValueFactory(new PropertyValueFactory<>("harga")); - tcBtnTambah.setCellValueFactory(new PropertyValueFactory<>("btnTambah")); +// tcBtnTambah.setCellValueFactory(new PropertyValueFactory<>("btnTambah")); tbvBarang.setItems(daftarTabelBarang); - fillTable(new ArrayList<>()); +// fillTable(new ArrayList<>()); } public DialogCariBarangController(/*FormPresensiController parent*/) { try { Window window = getDialogPane().getScene().getWindow(); window.setOnCloseRequest(event -> this.close()); - + FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogCariBarang.fxml")); loader.setController(this); // DialogCariBarangController controller = loader.getController(); Parent root = loader.load(); getDialogPane().setContent(root); setTitle("Cari Barang"); - + // getDialogPane().getButtonTypes().add(ButtonType.CANCEL); // setResultConverter(buttonType -> { // return str; // }); + setResultConverter(buttonType -> { + return barang; + }); } catch (IOException e) { Logger.getLogger(DialogCariBarangController.class .getName()).log(Level.SEVERE, null, e); } } - public void fillTable(List daftarBarang) { +// public void fillTable(List 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)); +// 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 daftarBarang) { + daftarTabelBarang.clear(); + for (Barang barang : daftarBarang) { +// Button btnTambah = new Button("Tambah"); + daftarTabelBarang.add(new TabelBarangCari( + barang.getKodeBarang(), + barang.getNamaBarang(), + "42", + "14000")); +// btnTambah.setOnAction((event) -> { +// setResult("Barang x"); +// this.close(); +// }); + + } + } + + @FXML + void tfPencarianOnKeyReleased(KeyEvent event) { + if (((RadioButton) tgTipe.getSelectedToggle() == rbKodeBarang + && event.getCode() == KeyCode.ENTER)) { + posRx.getBarangByKodeBarang(tfPencarian.getText()).subscribe(barangKodeObserver); + } else if (((RadioButton) tgTipe.getSelectedToggle() == rbNamaBarang + && tfPencarian.getText().length() >= 3)) { + posRx.getBarangByNamaBarang(tfPencarian.getText()).subscribe(daftarBarangObserver); + } } + + public Observer barangKodeObserver = new Observer() { + @Override + public void onSubscribe(Disposable dspsbl) { + } + + @Override + public void onNext(Barang b) { + if (b != null) { + barang = b; + close(); + } + } + + @Override + public void onError(Throwable error) { + if (error instanceof HttpException) { + switch (((HttpException) error).code()) { + case HttpURLConnection.HTTP_NOT_FOUND: + Alert alert = AlertUtil.getAlertError( + AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE, + "Barang dengan kode tersebut tidak ditemukan."); + alert.initOwner(apContent.getScene().getWindow()); + alert.show(); + } + } else { + Alert alert = AlertUtil.getAlertError( + AlertUtil.ERROR_TIDAK_TERDUGA_TITLE, + "Terjadi kesalahan yang tidak terduga."); + alert.initOwner(apContent.getScene().getWindow()); + alert.show(); + Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, error); + } + } + + @Override + public void onComplete() { + } + }; + + public Observer> daftarBarangObserver = new Observer>() { + @Override + public void onSubscribe(Disposable dspsbl) { + } + + @Override + public void onNext(Pagination b) { + if (b != null) { + updateTabelBarang(b.getData()); + } + } + + @Override + public void onError(Throwable error) { + if (error instanceof HttpException) { + switch (((HttpException) error).code()) { + case HttpURLConnection.HTTP_NOT_FOUND: + Alert alert = AlertUtil.getAlertError( + AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE, + "Barang dengan kode tersebut tidak ditemukan."); + alert.initOwner(apContent.getScene().getWindow()); + alert.show(); + } + } else { + Alert alert = AlertUtil.getAlertError( + AlertUtil.ERROR_TIDAK_TERDUGA_TITLE, + "Terjadi kesalahan yang tidak terduga."); + alert.initOwner(apContent.getScene().getWindow()); + alert.show(); + Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, error); + } + } + + @Override + public void onComplete() { + } + }; + } diff --git a/src/main/java/id/amigogroup/posterminal/pencarian/TabelBarangCari.java b/src/main/java/id/amigogroup/posterminal/pencarian/TabelBarangCari.java index 120eaac..68801c3 100644 --- a/src/main/java/id/amigogroup/posterminal/pencarian/TabelBarangCari.java +++ b/src/main/java/id/amigogroup/posterminal/pencarian/TabelBarangCari.java @@ -18,14 +18,14 @@ public class TabelBarangCari { private final SimpleStringProperty nama; private final SimpleStringProperty ukur; private final SimpleStringProperty harga; - private final SimpleObjectProperty