| @@ -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<String> result = dialogCariBarang.showAndWait(); | |||
| Optional<Barang> result = dialogCariBarang.showAndWait(); | |||
| System.out.println(result); | |||
| }; | |||
| listShortcuts.put(kcCariBarang, rnCariBarang); | |||
| @@ -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<Barang> getBarangByKodeBarang(String kode){ | |||
| return UtilsApi.getServiceApiBarang().getBarangByKodeBarang(kode); | |||
| } | |||
| public Observable<Pagination<Barang>> getBarangByNamaBarang(String namaBarang){ | |||
| return UtilsApi.getServiceApiBarang().getBarangByNamaBarang(namaBarang); | |||
| } | |||
| //Checkin API | |||
| public Observable<List<Tas>> getAllTas(){ | |||
| return UtilsApi.getServiceApiCheckin().getAllTas(); | |||
| @@ -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<MNotaRetur> getMNotaReturByNoNota(@Path("noNota") String noNota); | |||
| //Mengambil Barang Berdasarkan Kode Barang | |||
| @GET("barangs/kode/{kode}") | |||
| Observable<Barang> getBarangByKodeBarang(@Path("kode") String kode); | |||
| //Mengambil Barang Berdasarkan Nama Barang | |||
| @GET("barangs/nama/{namaBarang}") | |||
| Observable<Pagination<Barang>> getBarangByNamaBarang(@Path("namaBarang") String namaBarang); | |||
| } | |||
| @@ -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", | |||
| @@ -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<String> implements Initializable { | |||
| public class DialogCariBarangController extends Dialog<Barang> implements Initializable { | |||
| @FXML | |||
| AnchorPane apContent; | |||
| @FXML | |||
| private TextField tfPencarian; | |||
| @FXML | |||
| private TableView<TabelBarangCari> tbvBarang; | |||
| @FXML | |||
| @@ -49,11 +64,18 @@ public class DialogCariBarangController extends Dialog<String> implements Initia | |||
| private TableColumn<TabelBarangCari, String> tcUkur; | |||
| @FXML | |||
| private TableColumn<TabelBarangCari, String> tcHarga; | |||
| // @FXML | |||
| // private TableColumn<TabelBarangCari, Button> tcBtnTambah; | |||
| @FXML | |||
| private ToggleGroup tgTipe; | |||
| @FXML | |||
| private TableColumn<TabelBarangCari, Button> tcBtnTambah; | |||
| private RadioButton rbKodeBarang; | |||
| @FXML | |||
| private RadioButton rbNamaBarang; | |||
| final ObservableList<TabelBarangCari> 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<String> 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.<DialogCariBarangController>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<TabelBarangCari> daftarBarang) { | |||
| // 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)); | |||
| // 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"); | |||
| 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<Barang> barangKodeObserver = new Observer<Barang>() { | |||
| @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<Pagination<Barang>> daftarBarangObserver = new Observer<Pagination<Barang>>() { | |||
| @Override | |||
| public void onSubscribe(Disposable dspsbl) { | |||
| } | |||
| @Override | |||
| public void onNext(Pagination<Barang> 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() { | |||
| } | |||
| }; | |||
| } | |||
| @@ -18,14 +18,14 @@ public class TabelBarangCari { | |||
| private final SimpleStringProperty nama; | |||
| private final SimpleStringProperty ukur; | |||
| private final SimpleStringProperty harga; | |||
| private final SimpleObjectProperty<Button> btnTambah; | |||
| // private final SimpleObjectProperty<Button> btnTambah; | |||
| public TabelBarangCari(String kode, String nama, String ukur,String harga,Button btnTambah) { | |||
| public TabelBarangCari(String kode, String nama, String ukur,String harga) { | |||
| this.kode = new SimpleStringProperty(kode); | |||
| this.nama = new SimpleStringProperty(nama); | |||
| this.ukur = new SimpleStringProperty(ukur); | |||
| this.harga = new SimpleStringProperty(harga); | |||
| this.btnTambah = new SimpleObjectProperty<>(btnTambah); | |||
| // this.btnTambah = new SimpleObjectProperty<>(btnTambah); | |||
| } | |||
| /** | |||
| @@ -84,17 +84,17 @@ public class TabelBarangCari { | |||
| this.harga.set(harga); | |||
| } | |||
| /** | |||
| * @return the btnTambah | |||
| */ | |||
| public Button getBtnTambah() { | |||
| return btnTambah.get(); | |||
| } | |||
| /** | |||
| * @param btnTambah the btnTambah to set | |||
| */ | |||
| public void setBtnTambah(Button btnTambah) { | |||
| this.btnTambah.set(btnTambah); | |||
| } | |||
| // /** | |||
| // * @return the btnTambah | |||
| // */ | |||
| // public Button getBtnTambah() { | |||
| // return btnTambah.get(); | |||
| // } | |||
| // | |||
| // /** | |||
| // * @param btnTambah the btnTambah to set | |||
| // */ | |||
| // public void setBtnTambah(Button btnTambah) { | |||
| // this.btnTambah.set(btnTambah); | |||
| // } | |||
| } | |||
| @@ -1,9 +1,11 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <?import javafx.scene.control.Label?> | |||
| <?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.layout.AnchorPane?> | |||
| <?import javafx.scene.text.Font?> | |||
| @@ -14,16 +16,23 @@ | |||
| <Font size="16.0" /> | |||
| </font> | |||
| </Label> | |||
| <TextField layoutX="14.0" layoutY="56.0" promptText="Nama Barang" AnchorPane.leftAnchor="4.0" AnchorPane.rightAnchor="4.0" AnchorPane.topAnchor="46.0" /> | |||
| <Label layoutX="14.0" layoutY="39.0" text="Nama Barang" AnchorPane.leftAnchor="4.0" AnchorPane.topAnchor="29.0" /> | |||
| <TableView fx:id="tbvBarang" layoutX="14.0" layoutY="91.0" AnchorPane.bottomAnchor="-5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="81.0"> | |||
| <TextField fx:id="tfPencarian" layoutX="14.0" layoutY="56.0" onKeyReleased="#tfPencarianOnKeyReleased" promptText="Input Kode Barang / Nama Barang" AnchorPane.leftAnchor="4.0" AnchorPane.rightAnchor="4.0" AnchorPane.topAnchor="46.0" /> | |||
| <Label layoutX="14.0" layoutY="39.0" text="Pencarian" AnchorPane.leftAnchor="4.0" AnchorPane.topAnchor="29.0" /> | |||
| <Label layoutX="4.0" layoutY="76.0" text="Cari Berdasarkan :" AnchorPane.leftAnchor="4.0" AnchorPane.topAnchor="76.0" /> | |||
| <RadioButton fx:id="rbKodeBarang" layoutX="3.0" layoutY="93.0" mnemonicParsing="false" text="Kode Barang" AnchorPane.leftAnchor="4.0" AnchorPane.topAnchor="93.0"> | |||
| <toggleGroup> | |||
| <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" /> | |||
| <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" /> | |||
| <TableColumn fx:id="tcKode" prefWidth="75.0" text="Kode" /> | |||
| <TableColumn fx:id="tcNama" prefWidth="75.0" text="Nama" /> | |||
| <TableColumn fx:id="tcUkur" maxWidth="35.0" minWidth="35.0" prefWidth="35.0" resizable="false" text="Ukur" /> | |||
| <TableColumn fx:id="tcUkur" text="Ukur" /> | |||
| <TableColumn fx:id="tcHarga" prefWidth="75.0" text="Harga" /> | |||
| <TableColumn fx:id="tcBtnTambah" maxWidth="80.0" minWidth="80.0" resizable="false" text="Tambah" /> | |||
| <TableColumn fx:id="tcTambah" prefWidth="75.0" text="Tambah" /> | |||
| </columns> | |||
| <columnResizePolicy> | |||
| <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> | |||