Ver código fonte

menambah RadioButton Di UI cari Barang, menambahkan API Barang(cari nama barang, kode barang), membuat pencarian barang berdasarkan nama barang, kode barang

pull/3/head
Josua Pascario 5 anos atrás
pai
commit
d4cc73197d
7 arquivos alterados com 200 adições e 38 exclusões
  1. +2
    -1
      src/main/java/id/amigogroup/posterminal/FormUtamaController.java
  2. +9
    -0
      src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java
  3. +10
    -0
      src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java
  4. +2
    -0
      src/main/java/id/amigogroup/posterminal/model/Barang.java
  5. +147
    -16
      src/main/java/id/amigogroup/posterminal/pencarian/DialogCariBarangController.java
  6. +16
    -16
      src/main/java/id/amigogroup/posterminal/pencarian/TabelBarangCari.java
  7. +14
    -5
      src/main/resources/fxml/DialogCariBarang.fxml

+ 2
- 1
src/main/java/id/amigogroup/posterminal/FormUtamaController.java Ver arquivo

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


+ 9
- 0
src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java Ver arquivo

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


+ 10
- 0
src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java Ver arquivo

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

+ 2
- 0
src/main/java/id/amigogroup/posterminal/model/Barang.java Ver arquivo

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


+ 147
- 16
src/main/java/id/amigogroup/posterminal/pencarian/DialogCariBarangController.java Ver arquivo

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

}

+ 16
- 16
src/main/java/id/amigogroup/posterminal/pencarian/TabelBarangCari.java Ver arquivo

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

+ 14
- 5
src/main/resources/fxml/DialogCariBarang.fxml Ver arquivo

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


Carregando…
Cancelar
Salvar