Преглед изворни кода

Penggabungan Error Handling RxJava, Dialog Cari Barang

[Logic] Semua error handling generic (mis. tidak ada internet) rxjava digabungkan ke AmigoPosRx
[Logic + UI] Menampilkan data no barang di dialog cari barang, dan bisa digunakan untuk menambahkan barang ke nota
pull/7/head
Ronaldo Christnawan пре 5 година
родитељ
комит
9c3acf6f6a
14 измењених фајлова са 483 додато и 294 уклоњено
  1. +30
    -17
      src/main/java/id/amigogroup/posterminal/FormUtamaController.java
  2. +56
    -13
      src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java
  3. +9
    -4
      src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java
  4. +1
    -17
      src/main/java/id/amigogroup/posterminal/bayar/FormBayarReturController.java
  5. +1
    -12
      src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java
  6. +261
    -49
      src/main/java/id/amigogroup/posterminal/pencarian/DialogCariBarangController.java
  7. +4
    -23
      src/main/java/id/amigogroup/posterminal/pencarian/DialogCariPelangganController.java
  8. +32
    -17
      src/main/java/id/amigogroup/posterminal/pencarian/TabelBarangCari.java
  9. +4
    -0
      src/main/java/id/amigogroup/posterminal/transaksi/BarangFull.java
  10. +3
    -11
      src/main/java/id/amigogroup/posterminal/transaksi/DialogTambahNotaController.java
  11. +6
    -38
      src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java
  12. +65
    -91
      src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java
  13. +9
    -0
      src/main/java/id/amigogroup/posterminal/util/AlertUtil.java
  14. +2
    -2
      src/main/resources/fxml/DialogCariBarang.fxml

+ 30
- 17
src/main/java/id/amigogroup/posterminal/FormUtamaController.java Прегледај датотеку

@@ -1,12 +1,12 @@
package id.amigogroup.posterminal;

import id.amigogroup.posterminal.api.AmigoPosRx;
import id.amigogroup.posterminal.model.Barang;
import id.amigogroup.posterminal.model.Pelanggan;
import id.amigogroup.posterminal.pencarian.DialogCariBarangController;
import id.amigogroup.posterminal.pencarian.DialogCariNotaTundaController;
import id.amigogroup.posterminal.pencarian.DialogCariPelangganController;
import id.amigogroup.posterminal.pencarian.DialogCetakUlangNotaController;
import id.amigogroup.posterminal.transaksi.BarangFull;
import id.amigogroup.posterminal.transaksi.DialogKonfirmasiReturController;
import id.amigogroup.posterminal.transaksi.DialogTambahNotaController;
import id.amigogroup.posterminal.transaksi.FormTransaksiReturController;
@@ -17,7 +17,6 @@ import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
@@ -166,13 +165,14 @@ public class FormUtamaController implements Initializable {
loader.setLocation(getClass().getResource("/fxml/FormTransaksiTunai.fxml"));
node = loader.load();
FormTransaksiTunaiController fttc = loader.getController();
fttc.initData(noNota,baru);
notaContent.controllerTunai = fttc;
fttc.initData(noNota, baru);
break;
case FormConstanta.TRANSAKSI_RETUR:
loader.setLocation(getClass().getResource("/fxml/FormTransaksiRetur.fxml"));
node = loader.load();
FormTransaksiReturController ftrc = loader.getController();
ftrc.initData(noNota,baru);
ftrc.initData(noNota, baru);
break;

}
@@ -230,7 +230,29 @@ public class FormUtamaController implements Initializable {
DialogCariBarangController dialogCariBarang = new DialogCariBarangController();
dialogCariBarang.initOwner(bpMain.getScene().getWindow());

Optional<Barang> result = dialogCariBarang.showAndWait();
Optional<BarangFull> result = dialogCariBarang.showAndWait();

if (result.isPresent()) {
BarangFull barangFull = result.get();
switch (tipeTransaksiState) {
case FormConstanta.TRANSAKSI_TUNAI:
if (notaContent.controllerTunai != null) {
if (barangFull.getBarang() != null && barangFull.getNoBarang() != null
&& barangFull.getBarang().getIdGabungan().equals(barangFull.getNoBarang().getIdGabungan())) {
notaContent.controllerTunai.addToTable(barangFull.getBarang(), barangFull.getNoBarang());
} else {
Alert alert = AlertUtil.getAlertWarning(
AlertUtil.ERROR_TIDAK_LENGKAP_TITLE,
"Data Barang yang didapat tidak lengkap sehingga tidak bisa ditambahkan ke nota.");
alert.initOwner(bpMain.getScene().getWindow());
alert.show();
}
}
break;
case FormConstanta.TRANSAKSI_RETUR:
break;
}
}
};
listShortcuts.put(kcCariBarang, rnCariBarang);

@@ -488,19 +510,8 @@ public class FormUtamaController implements Initializable {
alert.initOwner(bpMain.getScene().getWindow());
alert.show();
}
} else if (error instanceof SocketTimeoutException) {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_KONEKSI_TIMEOUT_TITLE,
AlertUtil.ERROR_KONEKSI_TIMEOUT_MESSAGE);
alert.initOwner(bpMain.getScene().getWindow());
alert.show();
} else {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
AlertUtil.ERROR_TIDAK_TERDUGA_MESSAGE);
alert.initOwner(bpMain.getScene().getWindow());
alert.show();
Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, error);
AmigoPosRx.handleGenericError(error, bpMain.getScene().getWindow());
}
}

@@ -512,8 +523,10 @@ public class FormUtamaController implements Initializable {
private class NotaContent {

Button btnTunai;
FormTransaksiTunaiController controllerTunai = null;
Button btnBawa;
Button btnBon;
Button btnRetur;
FormTransaksiReturController controllerRetur = null;
}
}

+ 56
- 13
src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java Прегледај датотеку

@@ -14,9 +14,17 @@ import id.amigogroup.posterminal.model.MNotaTunai;
import id.amigogroup.posterminal.model.NoBarang;
import id.amigogroup.posterminal.model.Pelanggan;
import id.amigogroup.posterminal.model.Tas;
import id.amigogroup.posterminal.util.AlertUtil;
import io.reactivex.Observable;
import io.reactivex.schedulers.Schedulers;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Platform;
import javafx.scene.control.Alert;
import javafx.stage.Window;

/**
*
@@ -26,19 +34,28 @@ public class AmigoPosRx {

//Barang API
public Observable<Barang> getBarangByKodeBarang(String kodeBarang) {
return UtilsApi.getServiceApiBarang().getBarangByKodeBarang(kodeBarang);
return UtilsApi.getServiceApiBarang().getBarangByKodeBarang(kodeBarang)
.subscribeOn(Schedulers.trampoline());
}
public Observable<Pagination<Barang>> getBarangByNamaBarang(String namaBarang){
return UtilsApi.getServiceApiBarang().getBarangByNamaBarang(namaBarang);

public Observable<Pagination<Barang>> getBarangByNamaBarang(String namaBarang) {
return UtilsApi.getServiceApiBarang().getBarangByNamaBarang(namaBarang)
.subscribeOn(Schedulers.io());
}

public Observable<List<NoBarang>> getNoBarangByIdGabunganSortNomor(String idGabungan) {
return UtilsApi.getServiceApiBarang().getByIdGabunganSortNomor(idGabungan)
.subscribeOn(Schedulers.trampoline());
}
public Observable<NoBarang> getNoBarangByIdGabunganNomor(String idGabungan, String nomor) {
return UtilsApi.getServiceApiBarang().getByIdGabunganNomor(idGabungan, nomor);
return UtilsApi.getServiceApiBarang().getByIdGabunganNomor(idGabungan, nomor)
.subscribeOn(Schedulers.io());
}

public Observable<MNotaTunai> getMNotaTunaiByNoNota(String noNota) {
return UtilsApi.getServiceApiBarang().getMNotaTunaiByNoNota(noNota);
return UtilsApi.getServiceApiBarang().getMNotaTunaiByNoNota(noNota)
.subscribeOn(Schedulers.trampoline());
}

public Observable<List<DNotaTunai>> getDNotaTunaiByNoNota(String noNota) {
@@ -47,9 +64,10 @@ public class AmigoPosRx {
}

public Observable<MNotaRetur> getMNotaReturByNoNota(String noNota) {
return UtilsApi.getServiceApiBarang().getMNotaReturByNoNota(noNota);
return UtilsApi.getServiceApiBarang().getMNotaReturByNoNota(noNota)
.subscribeOn(Schedulers.trampoline());
}
//Checkin API
public Observable<List<Tas>> getAllTas() {
return UtilsApi.getServiceApiCheckin().getAllTas();
@@ -57,19 +75,44 @@ public class AmigoPosRx {

//Karyawan API
public Observable<Karyawan> getKaryawanByNik(String nik) {
return UtilsApi.getServiceApiKaryawan().getKaryawanByNik(nik);
return UtilsApi.getServiceApiKaryawan().getKaryawanByNik(nik)
.subscribeOn(Schedulers.trampoline());
}

//Pelanggan API
public Observable<Pelanggan> getPelangganByKodeMember(String kodeMember) {
return UtilsApi.getServiceApiPelanggan().getPelangganByKodeMember(kodeMember);
return UtilsApi.getServiceApiPelanggan().getPelangganByKodeMember(kodeMember)
.subscribeOn(Schedulers.trampoline());
}

public Observable<Pagination<Pelanggan>> getPelangganByNama(String nama) {
return UtilsApi.getServiceApiPelanggan().getPelangganByNama(nama);
return UtilsApi.getServiceApiPelanggan().getPelangganByNama(nama)
.subscribeOn(Schedulers.io());
}

public Observable<Pagination<Pelanggan>> getPelangganByNoTelpNoHp(String no) {
return UtilsApi.getServiceApiPelanggan().getPelangganByNoTelpNoHp(no);
return UtilsApi.getServiceApiPelanggan().getPelangganByNoTelpNoHp(no)
.subscribeOn(Schedulers.io());
}

public static void handleGenericError(Throwable error, Window window) {
if (error instanceof SocketException || error instanceof UnknownHostException) {
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_KONEKSI_TIMEOUT_TITLE,
AlertUtil.ERROR_KONEKSI_TIMEOUT_MESSAGE);
alert.initOwner(window);
alert.show();
});
} else {
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
AlertUtil.ERROR_TIDAK_TERDUGA_MESSAGE);
alert.initOwner(window);
alert.show();
Logger.getLogger(AmigoPosRx.class.getName()).log(Level.SEVERE, null, error);
});
}
}
}

+ 9
- 4
src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java Прегледај датотеку

@@ -27,11 +27,20 @@ public interface ServiceApiBarang {
Observable<Barang> getBarangByKodeBarang(@Path("kode") String kode);
//NO-BARANG
//Mengambil No Barang by Id Gabungan & Ukuran
@GET("no-barangs/id-gabungan/{idGabungan}/kolom-urut/nomor")
Observable<List<NoBarang>> getByIdGabunganSortNomor(
@Path("idGabungan") String idGabungan);
//Mengambil No Barang by Id Gabungan & Ukuran
@GET("no-barangs/id-gabungan/{idGabungan}/nomor/{nomor}")
Observable<NoBarang> getByIdGabunganNomor(
@Path("idGabungan") String idGabungan,
@Path("nomor") String nomor);

//Mengambil Barang Berdasarkan Nama Barang
@GET("barangs/nama/{namaBarang}")
Observable<Pagination<Barang>> getBarangByNamaBarang(@Path("namaBarang") String namaBarang);
//M-NOTA-TUNAI
//Mengambil Master Nota Tunai by No Nota
@@ -56,8 +65,4 @@ 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 Nama Barang
@GET("barangs/nama/{namaBarang}")
Observable<Pagination<Barang>> getBarangByNamaBarang(@Path("namaBarang") String namaBarang);
}

+ 1
- 17
src/main/java/id/amigogroup/posterminal/bayar/FormBayarReturController.java Прегледај датотеку

@@ -94,24 +94,8 @@ public class FormBayarReturController implements Initializable {
alert.show();
});
}
} else if (error instanceof SocketTimeoutException) {
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_KONEKSI_TIMEOUT_TITLE,
AlertUtil.ERROR_KONEKSI_TIMEOUT_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
});
} else {
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
AlertUtil.ERROR_TIDAK_TERDUGA_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
Logger.getLogger(FormUtamaController.class
.getName()).log(Level.SEVERE, null, error);
});
AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
}
}



+ 1
- 12
src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java Прегледај датотеку

@@ -117,19 +117,8 @@ public class FormLoginController implements Initializable {
alert.initOwner(apMain.getScene().getWindow());
alert.show();
}
} else if (error instanceof SocketTimeoutException || error instanceof UnknownHostException) {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_KONEKSI_TIMEOUT_TITLE,
AlertUtil.ERROR_KONEKSI_TIMEOUT_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
} else {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
"Terjadi kesalahan yang tidak terduga.");
alert.initOwner(apMain.getScene().getWindow());
alert.show();
Logger.getLogger(FormLoginController.class.getName()).log(Level.SEVERE, null, error);
AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
}
}



+ 261
- 49
src/main/java/id/amigogroup/posterminal/pencarian/DialogCariBarangController.java Прегледај датотеку

@@ -5,15 +5,21 @@
*/
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.NoBarang;
import id.amigogroup.posterminal.model.Pagination;
import id.amigogroup.posterminal.transaksi.BarangFull;
import id.amigogroup.posterminal.util.AlertUtil;
import id.amigogroup.posterminal.util.AmigoPosCache;
import id.amigogroup.posterminal.util.Fucout;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.CompositeDisposable;
import io.reactivex.disposables.Disposable;
import io.reactivex.observers.DisposableObserver;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
@@ -41,6 +47,8 @@ import javafx.scene.control.ToggleGroup;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseButton;
import javafx.scene.input.MouseEvent;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Window;
import retrofit2.HttpException;
@@ -50,7 +58,7 @@ import retrofit2.HttpException;
*
* @author ronal
*/
public class DialogCariBarangController extends Dialog<Barang> implements Initializable {
public class DialogCariBarangController extends Dialog<BarangFull> implements Initializable {

@FXML
AnchorPane apContent;
@@ -68,8 +76,6 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
private TableColumn<TabelBarangCari, String> tcUkur;
@FXML
private TableColumn<TabelBarangCari, String> tcHarga;
// @FXML
// private TableColumn<TabelBarangCari, Button> tcBtnTambah;
@FXML
private ToggleGroup tgTipe;
@FXML
@@ -79,7 +85,8 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia

final ObservableList<TabelBarangCari> daftarTabelBarang = FXCollections.observableArrayList();
AmigoPosRx posRx = new AmigoPosRx();
private Barang barang = null;
CompositeDisposable compositeDisposable = new CompositeDisposable();
private BarangFull selectedBarangFull = null;

/**
* Initializes the controller class.
@@ -97,29 +104,24 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
tcNama.setCellValueFactory(new PropertyValueFactory<>("nama"));
tcUkur.setCellValueFactory(new PropertyValueFactory<>("ukur"));
tcHarga.setCellValueFactory(new PropertyValueFactory<>("harga"));
// tcBtnTambah.setCellValueFactory(new PropertyValueFactory<>("btnTambah"));
tbvBarang.setItems(daftarTabelBarang);
// fillTable(new ArrayList<>());
}

public DialogCariBarangController(/*FormPresensiController parent*/) {
public DialogCariBarangController() {
selectedBarangFull = new BarangFull();
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;
return selectedBarangFull;
});
} catch (IOException e) {
Logger.getLogger(DialogCariBarangController.class
@@ -130,18 +132,42 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
public void updateTabelBarang(List<Barang> daftarBarang) {
daftarTabelBarang.clear();
for (Barang barang : daftarBarang) {
// 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(),
"-",
"-"));
TabelBarangCari tbc = new TabelBarangCari(
Fucout.getText(barang.getKodeBarang()),
Fucout.getText(barang.getNamaBarang()),
"...",
"...");

tbc.setDataBarang(barang);
daftarTabelBarang.add(tbc);

Disposable d = posRx.getNoBarangByIdGabunganSortNomor(barang.getIdGabungan())
.subscribeWith(getDaftarNoBarangObserver());
compositeDisposable.add(d);
}
}

@FXML
void tbvBarangOnKeyPressed(KeyEvent event) {
if (event.getCode() == KeyCode.ENTER) {
if (tbvBarang.getSelectionModel().getSelectedItem() != null) {
selectedBarangFull.setBarang(tbvBarang.getSelectionModel().getSelectedItem().getDataBarang());
selectedBarangFull.setNoBarang(tbvBarang.getSelectionModel().getSelectedItem().getDataNoBarang());
close();
}
}
}

@FXML
void tbvBarangOnMouseClicked(MouseEvent event) {
if (event.getButton().equals(MouseButton.PRIMARY)) {
if (event.getClickCount() >= 2) {
if (tbvBarang.getSelectionModel().getSelectedItem() != null) {
selectedBarangFull.setBarang(tbvBarang.getSelectionModel().getSelectedItem().getDataBarang());
selectedBarangFull.setNoBarang(tbvBarang.getSelectionModel().getSelectedItem().getDataNoBarang());
close();
}
}
}
}

@@ -149,12 +175,54 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
void tfPencarianOnKeyReleased(KeyEvent event) {
if (((RadioButton) tgTipe.getSelectedToggle() == rbKodeBarang
&& event.getCode() == KeyCode.ENTER)) {
posRx.getBarangByKodeBarang(tfPencarian.getText()).subscribe(barangKodeObserver);
idx = 0;

if (tfPencarian.getText().length() <= 9) {
posRx.getBarangByKodeBarang(tfPencarian.getText()).subscribe(barangKodeObserver);
} else {
String kodeFull = tfPencarian.getText();
String kodeBarang = Fucout.getKodeBarangFromKodeFull(kodeFull);
String ukur = Fucout.getNomorBarangFromKodeFull(kodeFull);

if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(kodeBarang)) {
Barang barang = AmigoPosCache.getInstance().getDaftarBarang().get(kodeBarang);

selectedBarangFull.setBarang(barang);
if (AmigoPosCache.getInstance().getDaftarNoBarang().containsKey(
barang.getIdGabungan() + ukur)) {
NoBarang noBarang = AmigoPosCache.getInstance().getDaftarNoBarang()
.get(barang.getIdGabungan() + ukur);
selectedBarangFull.setNoBarang(noBarang);
} else {
Observable.zip(posRx.getBarangByKodeBarang(kodeBarang),
posRx.getNoBarangByIdGabunganNomor(barang.getIdGabungan(), ukur),
(b, nB) -> new BarangFull(b, nB)).subscribe(getBarangFullGetNoBarangFromBarangObserver);
}
}
if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(kodeBarang)) {
Observable.zip(posRx.getBarangByKodeBarang(kodeBarang),
Observable.just(ukur),
(barang, nomor) -> {
barang.setNomor(nomor);
return barang;
}).subscribe(getTambahBarangObserver);
}
}

} else if (((RadioButton) tgTipe.getSelectedToggle() == rbNamaBarang
&& tfPencarian.getText().length() >= 3)) {
posRx.getBarangByNamaBarang(tfPencarian.getText()).subscribe(daftarBarangObserver);
compositeDisposable.clear();
daftarTabelBarang.clear();
idx = 0;
Disposable d = posRx.getBarangByNamaBarang(tfPencarian.getText())
.subscribeWith(getDaftarBarangObserver());
compositeDisposable.add(d);
} else if ((RadioButton) tgTipe.getSelectedToggle() == rbNamaBarang
&& tfPencarian.getText().length() < 3) {
compositeDisposable.clear();
daftarTabelBarang.clear();
}
tfPencarian.requestFocus();
}

public Observer<Barang> barangKodeObserver = new Observer<Barang>() {
@@ -165,6 +233,9 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
@Override
public void onNext(Barang b) {
if (b != null) {
if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(b.getKodeBarang())) {
AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b);
}
List<Barang> db = new ArrayList<>();
db.add(b);
updateTabelBarang(db);
@@ -183,12 +254,7 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
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);
AmigoPosRx.handleGenericError(error, apContent.getScene().getWindow());
}
}

@@ -197,15 +263,131 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
}
};

public Observer<Pagination<Barang>> daftarBarangObserver = new Observer<Pagination<Barang>>() {
private DisposableObserver<Pagination<Barang>> getDaftarBarangObserver() {
return new DisposableObserver<Pagination<Barang>>() {
@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:
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
"Barang dengan kode tersebut tidak ditemukan.");
alert.initOwner(apContent.getScene().getWindow());
alert.show();
});
}
} else {
AmigoPosRx.handleGenericError(error, apContent.getScene().getWindow());
}
}

@Override
public void onComplete() {
}
};
}

int idx = 0;

public DisposableObserver<List<NoBarang>> getDaftarNoBarangObserver() {
return new DisposableObserver<List<NoBarang>>() {
@Override
public void onNext(List<NoBarang> daftarNb) {
if (idx < daftarTabelBarang.size()) {
TabelBarangCari tbc = daftarTabelBarang.get(idx);
String idGabungan = daftarNb.get(0).getIdGabungan();
// System.out.println("Barang " + (i + 1) + ": " + daftarTabelBarang.get(i).getDataBarang().getIdGabungan());

if (tbc.getDataBarang() != null && tbc.getDataBarang().getIdGabungan().equals(idGabungan)) {
Barang b = tbc.getDataBarang();
// System.out.println("### Ditemukan id gabungan sama dengan hasil api: " + b.getNamaBarang()
// + "(Urutan ke: " + (i + 1) + ") ###");
int j = 0;
for (NoBarang nb : daftarNb) {
if (j == 0) {
// System.out.println("Nomor pertama: " + nb.getNomor());
b.setNomor(nb.getNomor());
tbc.setDataNoBarang(nb);
tbc.setUkur(Fucout.getText(nb.getNomor()));
tbc.setHarga(Fucout.getText(Fucout.formatRibuan(nb.getHargaJual())));

tbvBarang.refresh();
} else {
// System.out.println("Nomor " + (j + 1) + ": " + nb.getNomor());
TabelBarangCari tbcBaru = new TabelBarangCari(
Fucout.getText(b.getKodeBarang()),
Fucout.getText(b.getNamaBarang()),
Fucout.getText(nb.getNomor()),
Fucout.getText(Fucout.formatRibuan(nb.getHargaJual())));
tbcBaru.setDataBarang(b);
tbcBaru.setDataNoBarang(nb);
daftarTabelBarang.add(idx + j, tbcBaru);
}
// System.out.println("Masuk di urutan: " + (i + j + 1));
j++;
}
idx += daftarNb.size();
// System.out.println("### SELESAI ###\n");
}
}
}

@Override
public void onError(Throwable error) {
if (error instanceof HttpException) {
switch (((HttpException) error).code()) {
case HttpURLConnection.HTTP_NOT_FOUND:
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
"Barang dengan kode tersebut tidak ditemukan.");
alert.initOwner(apContent.getScene().getWindow());
alert.show();
});
}
} else if (error instanceof InterruptedIOException) {
daftarTabelBarang.clear();
} else {
AmigoPosRx.handleGenericError(error, apContent.getScene().getWindow());
}
}

@Override
public void onComplete() {
}
};
}
Observer<Barang> getTambahBarangObserver = new Observer<>() {
@Override
public void onSubscribe(Disposable dspsbl) {
}

@Override
public void onNext(Pagination<Barang> b) {
if (b != null) {
updateTabelBarang(b.getData());
public void onNext(Barang b) {
Barang bClone = new Barang(b);

bClone.setNomor(null);
AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), bClone);

if (b.getNomor() != null && !b.getNomor().equals("")) {
if (!AmigoPosCache.getInstance().getDaftarNoBarang().containsKey(
b.getIdGabungan() + b.getNomor())) {
Observable.zip(
Observable.just(b),
posRx.getNoBarangByIdGabunganNomor(b.getIdGabungan(), b.getNomor()),
(barang, noBarang) -> new BarangFull(barang, noBarang))
.subscribe(getBarangFullGetNoBarangFromBarangObserver);
}
}
}

@@ -214,25 +396,55 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
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();
Platform.runLater(() -> {
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);
AmigoPosRx.handleGenericError(error, apContent.getScene().getWindow());
}
}

@Override
public void onComplete() {
}

};

Observer<BarangFull> getBarangFullGetNoBarangFromBarangObserver = new Observer<>() {
@Override
public void onSubscribe(Disposable dspsbl) {
}

@Override
public void onNext(BarangFull bf) {
selectedBarangFull = bf;
}

@Override
public void onError(Throwable error) {
if (error instanceof HttpException) {
switch (((HttpException) error).code()) {
case HttpURLConnection.HTTP_NOT_FOUND:
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
"Barang dengan kode tersebut tidak ditemukan.");
alert.initOwner(apContent.getScene().getWindow());
alert.show();
});
}
} else {
AmigoPosRx.handleGenericError(error, apContent.getScene().getWindow());
}
}

@Override
public void onComplete() {
}
};
}

+ 4
- 23
src/main/java/id/amigogroup/posterminal/pencarian/DialogCariPelangganController.java Прегледај датотеку

@@ -107,12 +107,10 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements

FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogCariPelanggan.fxml"));
loader.setController(this);
// DialogCariBarangController controller = loader.<DialogCariBarangController>getController();
Parent root = loader.load();
getDialogPane().setContent(root);
setTitle("Cari Pelanggan");

// getDialogPane().getButtonTypes().add(ButtonType.CANCEL);
setResultConverter(buttonType -> {
return pelanggan;
});
@@ -122,14 +120,6 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements
}
}

public void fillTable() {
// Button btnTambah = new Button("Tambah");
// btnTambah.setOnAction((event) -> {
// setResult("Pak Coba");
// this.close();
// });
}

public void updateTabelPelanggan(List<Pelanggan> daftarPelanggan) {
daftarTabelPelanggan.clear();
for (Pelanggan pelanggan : daftarPelanggan) {
@@ -144,9 +134,9 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements

@FXML
void tfPencarianOnKeyReleased(KeyEvent event) {
daftarTabelPelanggan.clear();
if (((RadioButton) tgTipe.getSelectedToggle()) == rbMember
&& event.getCode() == KeyCode.ENTER) {
System.out.println("MASUK DONGssssssss");
posRx.getPelangganByKodeMember(tfPencarian.getText()).subscribe(pelangganMemberObserver);
} else if (((RadioButton) tgTipe.getSelectedToggle()) == rbNama
&& tfPencarian.getText().length() >= 3) {
@@ -155,6 +145,7 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements
&& tfPencarian.getText().length() >= 3) {
posRx.getPelangganByNoTelpNoHp(tfPencarian.getText()).subscribe(daftarPelangganObserver);
}

}

public Observer<Pelanggan> pelangganMemberObserver = new Observer<Pelanggan>() {
@@ -183,12 +174,7 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements
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);
AmigoPosRx.handleGenericError(error, apContent.getScene().getWindow());
}
}

@@ -221,12 +207,7 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements
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);
AmigoPosRx.handleGenericError(error, apContent.getScene().getWindow());
}
}



+ 32
- 17
src/main/java/id/amigogroup/posterminal/pencarian/TabelBarangCari.java Прегледај датотеку

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

import javafx.beans.property.SimpleObjectProperty;
import id.amigogroup.posterminal.model.Barang;
import id.amigogroup.posterminal.model.NoBarang;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.control.Button;

/**
*
@@ -18,14 +18,15 @@ public class TabelBarangCari {
private final SimpleStringProperty nama;
private final SimpleStringProperty ukur;
private final SimpleStringProperty harga;
// private final SimpleObjectProperty<Button> btnTambah;
private Barang dataBarang;
private NoBarang dataNoBarang;

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

/**
@@ -84,17 +85,31 @@ 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 data
*/
public Barang getDataBarang() {
return dataBarang;
}

/**
* @param dataBarang the dataBarang to set
*/
public void setDataBarang(Barang dataBarang) {
this.dataBarang = dataBarang;
}

/**
* @return the dataNoBarang
*/
public NoBarang getDataNoBarang() {
return dataNoBarang;
}

/**
* @param dataNoBarang the dataNoBarang to set
*/
public void setDataNoBarang(NoBarang dataNoBarang) {
this.dataNoBarang = dataNoBarang;
}
}

+ 4
- 0
src/main/java/id/amigogroup/posterminal/transaksi/BarangFull.java Прегледај датотеку

@@ -16,6 +16,10 @@ public class BarangFull {
private Barang barang;
private NoBarang noBarang;

public BarangFull() {
}
public BarangFull(Barang barang, NoBarang noBarang) {
this.barang = barang;
this.noBarang = noBarang;


+ 3
- 11
src/main/java/id/amigogroup/posterminal/transaksi/DialogTambahNotaController.java Прегледај датотеку

@@ -77,8 +77,7 @@ public class DialogTambahNotaController extends Dialog<String> implements Initia

FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogTambahNota.fxml"));
loader.setController(this);
// DialogCariBarangController controller = loader.<DialogCariBarangController>getController();

Parent root = loader.load();
getDialogPane().setContent(root);

@@ -125,15 +124,8 @@ public class DialogTambahNotaController extends Dialog<String> implements Initia
alert.initModality(Modality.APPLICATION_MODAL);
alert.show();
}
} catch (Exception e) {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
AlertUtil.ERROR_TIDAK_TERDUGA_MESSAGE);
alert.initOwner(apTambahNota.getScene().getWindow());
alert.initModality(Modality.APPLICATION_MODAL);
alert.show();

Logger.getLogger(DialogTambahNotaController.class.getName()).log(Level.SEVERE, null, e);
} catch (Exception error) {
AmigoPosRx.handleGenericError(error, apTambahNota.getScene().getWindow());
}

if (!notaExists) {


+ 6
- 38
src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java Прегледај датотеку

@@ -273,16 +273,16 @@ public class FormTransaksiReturController implements Initializable {
tbr.setSubTotal(Fucout.getText(Fucout.formatRibuan(
dNotaRetur.getJumlah() * dNotaRetur.getHargaJual()
)));
tbvRetur.refresh();
} else{
} else {
Alert alert = AlertUtil.getAlertError(
"Jumlah Barang Kurang",
"Jumlah Barang Kurang",
"Barang di Nota Penjualan yang di-Retur sudah mencapai jumlah yang ada.");
alert.initOwner(apMain.getScene().getWindow());
alert.show();
}
ada = true;
break;
}
@@ -353,24 +353,8 @@ public class FormTransaksiReturController implements Initializable {
alert.show();
});
}
} else if (error instanceof SocketTimeoutException) {
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_KONEKSI_TIMEOUT_TITLE,
AlertUtil.ERROR_KONEKSI_TIMEOUT_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
});
} else {
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
AlertUtil.ERROR_TIDAK_TERDUGA_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
Logger.getLogger(FormUtamaController.class
.getName()).log(Level.SEVERE, null, error);
});
AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
}
}

@@ -411,24 +395,8 @@ public class FormTransaksiReturController implements Initializable {
alert.show();
});
}
} else if (error instanceof SocketTimeoutException) {
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_KONEKSI_TIMEOUT_TITLE,
AlertUtil.ERROR_KONEKSI_TIMEOUT_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
});
} else {
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
AlertUtil.ERROR_TIDAK_TERDUGA_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
Logger.getLogger(FormUtamaController.class
.getName()).log(Level.SEVERE, null, error);
});
AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
}
}



+ 65
- 91
src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java Прегледај датотеку

@@ -94,7 +94,7 @@ public class FormTransaksiTunaiController implements Initializable {
@Override
public void initialize(URL url, ResourceBundle rb) {
fldScan.requestFocus();
tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangTunai, Integer> cell) -> {
return new ReadOnlyObjectWrapper(tbvTransaksi.getItems().indexOf(cell.getValue()) + 1);
});
@@ -169,23 +169,32 @@ public class FormTransaksiTunaiController implements Initializable {
}
}

public void addToTable(Barang barang, NoBarang noBarang, int jumlah) {
public void addToTable(Barang barang, NoBarang noBarang) {
if (barang != null && noBarang != null) {

if (noBarang.getStokOperasional() >= jumlah) {
if (noBarang.getStokOperasional() > 0) {
boolean ada = false;
for (TabelBarangTunai tbt : daftarTabelTransaksi) {
if (tbt.getKode().equals(barang.getKodeBarang()) && tbt.getUkur().equals(noBarang.getNomor())) {
noBarang.setStokOperasional(noBarang.getStokOperasional() - jumlah);
if (noBarang.getStokOperasional() >= tbt.getData().getJumlah() + 1) {
tbt.getData().setJumlah(tbt.getData().getJumlah() + 1);
tbt.setJumlah(String.valueOf(tbt.getData().getJumlah()));
tbvTransaksi.refresh();
} else {
System.out.println("Halo");
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertWarning(
"Stok Habis",
"Tidak bisa menambahkan barang karena stok barang habis");
alert.initOwner(apMain.getScene().getWindow());
alert.show();
});

}

tbt.getData().setJumlah(tbt.getData().getJumlah() + jumlah);
tbt.setJumlah(String.valueOf(tbt.getData().getJumlah()));
tbvTransaksi.refresh();
ada = true;
break;
}
}

if (!ada) {
String[] promo = {"Ulang Tahun", "Harbolnas", "Ultah Amigo"};
ComboBox<String> cbxPromo = new ComboBox<>(FXCollections.observableArrayList(promo));
@@ -201,30 +210,39 @@ public class FormTransaksiTunaiController implements Initializable {
noNota,
barang.getKodeBarang(),
barang.getNamaBarang(),
jumlah,
1,
0,
0,
noBarang.getHargaJual(),
noBarang.getHargaPokok(),
"",
0);

TabelBarangTunai tbt = new TabelBarangTunai(
Fucout.getText(barang.getKodeBarang()),
Fucout.getText(barang.getNamaBarang()),
Fucout.getText(noBarang.getNomor()),
String.valueOf(jumlah),
String.valueOf(1),
Fucout.getText(Fucout.formatRibuan(noBarang.getHargaJual())),
"...",
"...",
cbxPromo,
Fucout.getText(Fucout.formatRibuan(
jumlah * noBarang.getHargaJual())
1 * noBarang.getHargaJual())
),
fldPramuniaga);
tbt.setData(dNotaTunai);

daftarTabelTransaksi.add(tbt);
}
} else {
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertWarning(
"Stok Habis",
"Tidak bisa menambahkan barang karena stok barang habis");
alert.initOwner(apMain.getScene().getWindow());
alert.show();
});
}
}
}
@@ -245,19 +263,21 @@ public class FormTransaksiTunaiController implements Initializable {
NoBarang noBarang = AmigoPosCache.getInstance().getDaftarNoBarang()
.get(barang.getIdGabungan() + ukur);

addToTable(barang, noBarang, 1);
addToTable(barang, noBarang);
} else {
Observable.zip(posRx.getBarangByKodeBarang(kodeBarang),
posRx.getNoBarangByIdGabunganNomor(barang.getIdGabungan(), ukur),
(b, nB) -> new BarangFull(b, nB)).subscribe(getBarangFullGetNoBarangFromBarangObserver);
}
}
Observable.zip(posRx.getBarangByKodeBarang(kodeBarang),
Observable.just(ukur),
(barang, nomor) -> {
barang.setNomor(nomor);
return barang;
}).subscribe(getTambahBarangObserver);
if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(kodeBarang)) {
Observable.zip(posRx.getBarangByKodeBarang(kodeBarang),
Observable.just(ukur),
(barang, nomor) -> {
barang.setNomor(nomor);
return barang;
}).subscribe(getTambahBarangObserver);
}
}

}
@@ -285,24 +305,8 @@ public class FormTransaksiTunaiController implements Initializable {
alert.show();
});
}
} else if (error instanceof SocketTimeoutException) {
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_KONEKSI_TIMEOUT_TITLE,
AlertUtil.ERROR_KONEKSI_TIMEOUT_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
});
} else {
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
AlertUtil.ERROR_TIDAK_TERDUGA_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
Logger.getLogger(FormUtamaController.class
.getName()).log(Level.SEVERE, null, error);
});
AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
}
}

@@ -333,26 +337,16 @@ public class FormTransaksiTunaiController implements Initializable {
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(apMain.getScene().getWindow());
alert.show();
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
"Barang dengan kode tersebut tidak ditemukan.");
alert.initOwner(apMain.getScene().getWindow());
alert.show();
});
}
} else if (error instanceof SocketTimeoutException) {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_KONEKSI_TIMEOUT_TITLE,
AlertUtil.ERROR_KONEKSI_TIMEOUT_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
} else {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
AlertUtil.ERROR_TIDAK_TERDUGA_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
Logger.getLogger(FormUtamaController.class
.getName()).log(Level.SEVERE, null, error);
AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
}
}

@@ -391,26 +385,16 @@ public class FormTransaksiTunaiController implements Initializable {
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(apMain.getScene().getWindow());
alert.show();
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
"Barang dengan kode tersebut tidak ditemukan.");
alert.initOwner(apMain.getScene().getWindow());
alert.show();
});
}
} else if (error instanceof SocketTimeoutException) {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_KONEKSI_TIMEOUT_TITLE,
AlertUtil.ERROR_KONEKSI_TIMEOUT_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
} else {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
AlertUtil.ERROR_TIDAK_TERDUGA_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
Logger.getLogger(FormUtamaController.class
.getName()).log(Level.SEVERE, null, error);
AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
}
}

@@ -427,7 +411,7 @@ public class FormTransaksiTunaiController implements Initializable {

@Override
public void onNext(BarangFull bf) {
addToTable(bf.getBarang(), bf.getNoBarang(), 1);
addToTable(bf.getBarang(), bf.getNoBarang());
}

@Override
@@ -435,26 +419,16 @@ public class FormTransaksiTunaiController implements Initializable {
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(apMain.getScene().getWindow());
alert.show();
Platform.runLater(() -> {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
"Barang dengan kode tersebut tidak ditemukan.");
alert.initOwner(apMain.getScene().getWindow());
alert.show();
});
}
} else if (error instanceof SocketTimeoutException) {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_KONEKSI_TIMEOUT_TITLE,
AlertUtil.ERROR_KONEKSI_TIMEOUT_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
} else {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
AlertUtil.ERROR_TIDAK_TERDUGA_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
Logger.getLogger(FormUtamaController.class
.getName()).log(Level.SEVERE, null, error);
AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
}
}



+ 9
- 0
src/main/java/id/amigogroup/posterminal/util/AlertUtil.java Прегледај датотеку

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

import javafx.scene.control.Alert;
import javafx.scene.control.ButtonBar.ButtonData;
import javafx.scene.control.ButtonType;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
@@ -20,6 +21,14 @@ public class AlertUtil {
public static final String ERROR_TIDAK_TERDUGA_MESSAGE = "Terjadi kesalahan yang tidak terduga.";
public static final String ERROR_KONEKSI_TIMEOUT_TITLE = "Error: Timeout - Koneksi Gagal";
public static final String ERROR_KONEKSI_TIMEOUT_MESSAGE = "Koneksi ke server mengalami kegagalan.";
public static final String ERROR_TIDAK_LENGKAP_TITLE = "Error: Data Tidak Lengkap";
public static Alert getAlertWarning(String title, String message){
Alert alert = new Alert(Alert.AlertType.WARNING, message, ButtonType.OK);
alert.setTitle(title);
alert.setHeaderText(null);
return alert;
}
public static Alert getAlertError(String title, String message){
Alert alert = new Alert(Alert.AlertType.ERROR, message, ButtonType.OK);


+ 2
- 2
src/main/resources/fxml/DialogCariBarang.fxml Прегледај датотеку

@@ -25,12 +25,12 @@
</toggleGroup>
</RadioButton>
<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" onKeyPressed="#tbvBarangOnKeyPressed" onMouseClicked="#tbvBarangOnMouseClicked" 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" text="Ukur" />
<TableColumn fx:id="tcUkur" maxWidth="40.0" minWidth="40.0" prefWidth="40.0" resizable="false" text="Ukur" />
<TableColumn fx:id="tcHarga" prefWidth="75.0" text="Harga" />
</columns>
<columnResizePolicy>


Loading…
Откажи
Сачувај