[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 notapull/7/head
| @@ -1,12 +1,12 @@ | |||||
| package id.amigogroup.posterminal; | package id.amigogroup.posterminal; | ||||
| import id.amigogroup.posterminal.api.AmigoPosRx; | import id.amigogroup.posterminal.api.AmigoPosRx; | ||||
| import id.amigogroup.posterminal.model.Barang; | |||||
| import id.amigogroup.posterminal.model.Pelanggan; | import id.amigogroup.posterminal.model.Pelanggan; | ||||
| import id.amigogroup.posterminal.pencarian.DialogCariBarangController; | import id.amigogroup.posterminal.pencarian.DialogCariBarangController; | ||||
| import id.amigogroup.posterminal.pencarian.DialogCariNotaTundaController; | import id.amigogroup.posterminal.pencarian.DialogCariNotaTundaController; | ||||
| import id.amigogroup.posterminal.pencarian.DialogCariPelangganController; | import id.amigogroup.posterminal.pencarian.DialogCariPelangganController; | ||||
| import id.amigogroup.posterminal.pencarian.DialogCetakUlangNotaController; | import id.amigogroup.posterminal.pencarian.DialogCetakUlangNotaController; | ||||
| import id.amigogroup.posterminal.transaksi.BarangFull; | |||||
| import id.amigogroup.posterminal.transaksi.DialogKonfirmasiReturController; | import id.amigogroup.posterminal.transaksi.DialogKonfirmasiReturController; | ||||
| import id.amigogroup.posterminal.transaksi.DialogTambahNotaController; | import id.amigogroup.posterminal.transaksi.DialogTambahNotaController; | ||||
| import id.amigogroup.posterminal.transaksi.FormTransaksiReturController; | import id.amigogroup.posterminal.transaksi.FormTransaksiReturController; | ||||
| @@ -17,7 +17,6 @@ import io.reactivex.Observer; | |||||
| import io.reactivex.disposables.Disposable; | import io.reactivex.disposables.Disposable; | ||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.net.HttpURLConnection; | import java.net.HttpURLConnection; | ||||
| import java.net.SocketTimeoutException; | |||||
| import java.net.URL; | import java.net.URL; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| import java.util.HashMap; | import java.util.HashMap; | ||||
| @@ -166,13 +165,14 @@ public class FormUtamaController implements Initializable { | |||||
| loader.setLocation(getClass().getResource("/fxml/FormTransaksiTunai.fxml")); | loader.setLocation(getClass().getResource("/fxml/FormTransaksiTunai.fxml")); | ||||
| node = loader.load(); | node = loader.load(); | ||||
| FormTransaksiTunaiController fttc = loader.getController(); | FormTransaksiTunaiController fttc = loader.getController(); | ||||
| fttc.initData(noNota,baru); | |||||
| notaContent.controllerTunai = fttc; | |||||
| fttc.initData(noNota, baru); | |||||
| break; | break; | ||||
| case FormConstanta.TRANSAKSI_RETUR: | case FormConstanta.TRANSAKSI_RETUR: | ||||
| loader.setLocation(getClass().getResource("/fxml/FormTransaksiRetur.fxml")); | loader.setLocation(getClass().getResource("/fxml/FormTransaksiRetur.fxml")); | ||||
| node = loader.load(); | node = loader.load(); | ||||
| FormTransaksiReturController ftrc = loader.getController(); | FormTransaksiReturController ftrc = loader.getController(); | ||||
| ftrc.initData(noNota,baru); | |||||
| ftrc.initData(noNota, baru); | |||||
| break; | break; | ||||
| } | } | ||||
| @@ -230,7 +230,29 @@ public class FormUtamaController implements Initializable { | |||||
| DialogCariBarangController dialogCariBarang = new DialogCariBarangController(); | DialogCariBarangController dialogCariBarang = new DialogCariBarangController(); | ||||
| dialogCariBarang.initOwner(bpMain.getScene().getWindow()); | 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); | listShortcuts.put(kcCariBarang, rnCariBarang); | ||||
| @@ -488,19 +510,8 @@ public class FormUtamaController implements Initializable { | |||||
| alert.initOwner(bpMain.getScene().getWindow()); | alert.initOwner(bpMain.getScene().getWindow()); | ||||
| alert.show(); | 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 { | } 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 { | private class NotaContent { | ||||
| Button btnTunai; | Button btnTunai; | ||||
| FormTransaksiTunaiController controllerTunai = null; | |||||
| Button btnBawa; | Button btnBawa; | ||||
| Button btnBon; | Button btnBon; | ||||
| Button btnRetur; | Button btnRetur; | ||||
| FormTransaksiReturController controllerRetur = null; | |||||
| } | } | ||||
| } | } | ||||
| @@ -14,9 +14,17 @@ import id.amigogroup.posterminal.model.MNotaTunai; | |||||
| import id.amigogroup.posterminal.model.NoBarang; | import id.amigogroup.posterminal.model.NoBarang; | ||||
| import id.amigogroup.posterminal.model.Pelanggan; | import id.amigogroup.posterminal.model.Pelanggan; | ||||
| import id.amigogroup.posterminal.model.Tas; | import id.amigogroup.posterminal.model.Tas; | ||||
| import id.amigogroup.posterminal.util.AlertUtil; | |||||
| import io.reactivex.Observable; | import io.reactivex.Observable; | ||||
| import io.reactivex.schedulers.Schedulers; | import io.reactivex.schedulers.Schedulers; | ||||
| import java.net.SocketException; | |||||
| import java.net.UnknownHostException; | |||||
| import java.util.List; | 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 | //Barang API | ||||
| public Observable<Barang> getBarangByKodeBarang(String kodeBarang) { | 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) { | 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) { | 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) { | public Observable<List<DNotaTunai>> getDNotaTunaiByNoNota(String noNota) { | ||||
| @@ -47,9 +64,10 @@ public class AmigoPosRx { | |||||
| } | } | ||||
| public Observable<MNotaRetur> getMNotaReturByNoNota(String noNota) { | public Observable<MNotaRetur> getMNotaReturByNoNota(String noNota) { | ||||
| return UtilsApi.getServiceApiBarang().getMNotaReturByNoNota(noNota); | |||||
| return UtilsApi.getServiceApiBarang().getMNotaReturByNoNota(noNota) | |||||
| .subscribeOn(Schedulers.trampoline()); | |||||
| } | } | ||||
| //Checkin API | //Checkin API | ||||
| public Observable<List<Tas>> getAllTas() { | public Observable<List<Tas>> getAllTas() { | ||||
| return UtilsApi.getServiceApiCheckin().getAllTas(); | return UtilsApi.getServiceApiCheckin().getAllTas(); | ||||
| @@ -57,19 +75,44 @@ public class AmigoPosRx { | |||||
| //Karyawan API | //Karyawan API | ||||
| public Observable<Karyawan> getKaryawanByNik(String nik) { | public Observable<Karyawan> getKaryawanByNik(String nik) { | ||||
| return UtilsApi.getServiceApiKaryawan().getKaryawanByNik(nik); | |||||
| return UtilsApi.getServiceApiKaryawan().getKaryawanByNik(nik) | |||||
| .subscribeOn(Schedulers.trampoline()); | |||||
| } | } | ||||
| //Pelanggan API | //Pelanggan API | ||||
| public Observable<Pelanggan> getPelangganByKodeMember(String kodeMember) { | 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) { | 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) { | 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); | |||||
| }); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -27,11 +27,20 @@ public interface ServiceApiBarang { | |||||
| Observable<Barang> getBarangByKodeBarang(@Path("kode") String kode); | Observable<Barang> getBarangByKodeBarang(@Path("kode") String kode); | ||||
| //NO-BARANG | //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 | //Mengambil No Barang by Id Gabungan & Ukuran | ||||
| @GET("no-barangs/id-gabungan/{idGabungan}/nomor/{nomor}") | @GET("no-barangs/id-gabungan/{idGabungan}/nomor/{nomor}") | ||||
| Observable<NoBarang> getByIdGabunganNomor( | Observable<NoBarang> getByIdGabunganNomor( | ||||
| @Path("idGabungan") String idGabungan, | @Path("idGabungan") String idGabungan, | ||||
| @Path("nomor") String nomor); | @Path("nomor") String nomor); | ||||
| //Mengambil Barang Berdasarkan Nama Barang | |||||
| @GET("barangs/nama/{namaBarang}") | |||||
| Observable<Pagination<Barang>> getBarangByNamaBarang(@Path("namaBarang") String namaBarang); | |||||
| //M-NOTA-TUNAI | //M-NOTA-TUNAI | ||||
| //Mengambil Master Nota Tunai by No Nota | //Mengambil Master Nota Tunai by No Nota | ||||
| @@ -56,8 +65,4 @@ public interface ServiceApiBarang { | |||||
| //Mengambil Master Nota Retur by No Nota | //Mengambil Master Nota Retur by No Nota | ||||
| @GET("m-nota-retur/no-nota/{noNota}") | @GET("m-nota-retur/no-nota/{noNota}") | ||||
| Observable<MNotaRetur> getMNotaReturByNoNota(@Path("noNota") String 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); | |||||
| } | } | ||||
| @@ -94,24 +94,8 @@ public class FormBayarReturController implements Initializable { | |||||
| alert.show(); | 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 { | } 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()); | |||||
| } | } | ||||
| } | } | ||||
| @@ -117,19 +117,8 @@ public class FormLoginController implements Initializable { | |||||
| alert.initOwner(apMain.getScene().getWindow()); | alert.initOwner(apMain.getScene().getWindow()); | ||||
| alert.show(); | 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 { | } 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()); | |||||
| } | } | ||||
| } | } | ||||
| @@ -5,15 +5,21 @@ | |||||
| */ | */ | ||||
| package id.amigogroup.posterminal.pencarian; | package id.amigogroup.posterminal.pencarian; | ||||
| import id.amigogroup.posterminal.FormUtamaController; | |||||
| import id.amigogroup.posterminal.api.AmigoPosRx; | import id.amigogroup.posterminal.api.AmigoPosRx; | ||||
| import id.amigogroup.posterminal.model.Barang; | import id.amigogroup.posterminal.model.Barang; | ||||
| import id.amigogroup.posterminal.model.NoBarang; | |||||
| import id.amigogroup.posterminal.model.Pagination; | import id.amigogroup.posterminal.model.Pagination; | ||||
| import id.amigogroup.posterminal.transaksi.BarangFull; | |||||
| import id.amigogroup.posterminal.util.AlertUtil; | import id.amigogroup.posterminal.util.AlertUtil; | ||||
| import id.amigogroup.posterminal.util.AmigoPosCache; | |||||
| import id.amigogroup.posterminal.util.Fucout; | import id.amigogroup.posterminal.util.Fucout; | ||||
| import io.reactivex.Observable; | |||||
| import io.reactivex.Observer; | import io.reactivex.Observer; | ||||
| import io.reactivex.disposables.CompositeDisposable; | |||||
| import io.reactivex.disposables.Disposable; | import io.reactivex.disposables.Disposable; | ||||
| import io.reactivex.observers.DisposableObserver; | |||||
| import java.io.IOException; | import java.io.IOException; | ||||
| import java.io.InterruptedIOException; | |||||
| import java.net.HttpURLConnection; | import java.net.HttpURLConnection; | ||||
| import java.net.URL; | import java.net.URL; | ||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||
| @@ -41,6 +47,8 @@ import javafx.scene.control.ToggleGroup; | |||||
| import javafx.scene.control.cell.PropertyValueFactory; | import javafx.scene.control.cell.PropertyValueFactory; | ||||
| import javafx.scene.input.KeyCode; | import javafx.scene.input.KeyCode; | ||||
| import javafx.scene.input.KeyEvent; | import javafx.scene.input.KeyEvent; | ||||
| import javafx.scene.input.MouseButton; | |||||
| import javafx.scene.input.MouseEvent; | |||||
| import javafx.scene.layout.AnchorPane; | import javafx.scene.layout.AnchorPane; | ||||
| import javafx.stage.Window; | import javafx.stage.Window; | ||||
| import retrofit2.HttpException; | import retrofit2.HttpException; | ||||
| @@ -50,7 +58,7 @@ import retrofit2.HttpException; | |||||
| * | * | ||||
| * @author ronal | * @author ronal | ||||
| */ | */ | ||||
| public class DialogCariBarangController extends Dialog<Barang> implements Initializable { | |||||
| public class DialogCariBarangController extends Dialog<BarangFull> implements Initializable { | |||||
| @FXML | @FXML | ||||
| AnchorPane apContent; | AnchorPane apContent; | ||||
| @@ -68,8 +76,6 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia | |||||
| private TableColumn<TabelBarangCari, String> tcUkur; | private TableColumn<TabelBarangCari, String> tcUkur; | ||||
| @FXML | @FXML | ||||
| private TableColumn<TabelBarangCari, String> tcHarga; | private TableColumn<TabelBarangCari, String> tcHarga; | ||||
| // @FXML | |||||
| // private TableColumn<TabelBarangCari, Button> tcBtnTambah; | |||||
| @FXML | @FXML | ||||
| private ToggleGroup tgTipe; | private ToggleGroup tgTipe; | ||||
| @FXML | @FXML | ||||
| @@ -79,7 +85,8 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia | |||||
| final ObservableList<TabelBarangCari> daftarTabelBarang = FXCollections.observableArrayList(); | final ObservableList<TabelBarangCari> daftarTabelBarang = FXCollections.observableArrayList(); | ||||
| AmigoPosRx posRx = new AmigoPosRx(); | AmigoPosRx posRx = new AmigoPosRx(); | ||||
| private Barang barang = null; | |||||
| CompositeDisposable compositeDisposable = new CompositeDisposable(); | |||||
| private BarangFull selectedBarangFull = null; | |||||
| /** | /** | ||||
| * Initializes the controller class. | * Initializes the controller class. | ||||
| @@ -97,29 +104,24 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia | |||||
| tcNama.setCellValueFactory(new PropertyValueFactory<>("nama")); | tcNama.setCellValueFactory(new PropertyValueFactory<>("nama")); | ||||
| tcUkur.setCellValueFactory(new PropertyValueFactory<>("ukur")); | tcUkur.setCellValueFactory(new PropertyValueFactory<>("ukur")); | ||||
| tcHarga.setCellValueFactory(new PropertyValueFactory<>("harga")); | tcHarga.setCellValueFactory(new PropertyValueFactory<>("harga")); | ||||
| // tcBtnTambah.setCellValueFactory(new PropertyValueFactory<>("btnTambah")); | |||||
| tbvBarang.setItems(daftarTabelBarang); | tbvBarang.setItems(daftarTabelBarang); | ||||
| // fillTable(new ArrayList<>()); | |||||
| } | } | ||||
| public DialogCariBarangController(/*FormPresensiController parent*/) { | |||||
| public DialogCariBarangController() { | |||||
| selectedBarangFull = new BarangFull(); | |||||
| try { | try { | ||||
| Window window = getDialogPane().getScene().getWindow(); | Window window = getDialogPane().getScene().getWindow(); | ||||
| window.setOnCloseRequest(event -> this.close()); | window.setOnCloseRequest(event -> this.close()); | ||||
| FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogCariBarang.fxml")); | FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogCariBarang.fxml")); | ||||
| loader.setController(this); | loader.setController(this); | ||||
| // DialogCariBarangController controller = loader.<DialogCariBarangController>getController(); | |||||
| Parent root = loader.load(); | Parent root = loader.load(); | ||||
| getDialogPane().setContent(root); | getDialogPane().setContent(root); | ||||
| setTitle("Cari Barang"); | setTitle("Cari Barang"); | ||||
| // getDialogPane().getButtonTypes().add(ButtonType.CANCEL); | |||||
| // setResultConverter(buttonType -> { | |||||
| // return str; | |||||
| // }); | |||||
| setResultConverter(buttonType -> { | setResultConverter(buttonType -> { | ||||
| return barang; | |||||
| return selectedBarangFull; | |||||
| }); | }); | ||||
| } catch (IOException e) { | } catch (IOException e) { | ||||
| Logger.getLogger(DialogCariBarangController.class | Logger.getLogger(DialogCariBarangController.class | ||||
| @@ -130,18 +132,42 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia | |||||
| public void updateTabelBarang(List<Barang> daftarBarang) { | public void updateTabelBarang(List<Barang> daftarBarang) { | ||||
| daftarTabelBarang.clear(); | daftarTabelBarang.clear(); | ||||
| for (Barang barang : daftarBarang) { | 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) { | void tfPencarianOnKeyReleased(KeyEvent event) { | ||||
| if (((RadioButton) tgTipe.getSelectedToggle() == rbKodeBarang | if (((RadioButton) tgTipe.getSelectedToggle() == rbKodeBarang | ||||
| && event.getCode() == KeyCode.ENTER)) { | && 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 | } else if (((RadioButton) tgTipe.getSelectedToggle() == rbNamaBarang | ||||
| && tfPencarian.getText().length() >= 3)) { | && 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>() { | public Observer<Barang> barangKodeObserver = new Observer<Barang>() { | ||||
| @@ -165,6 +233,9 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia | |||||
| @Override | @Override | ||||
| public void onNext(Barang b) { | public void onNext(Barang b) { | ||||
| if (b != null) { | if (b != null) { | ||||
| if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(b.getKodeBarang())) { | |||||
| AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b); | |||||
| } | |||||
| List<Barang> db = new ArrayList<>(); | List<Barang> db = new ArrayList<>(); | ||||
| db.add(b); | db.add(b); | ||||
| updateTabelBarang(db); | updateTabelBarang(db); | ||||
| @@ -183,12 +254,7 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia | |||||
| alert.show(); | alert.show(); | ||||
| } | } | ||||
| } else { | } 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 | @Override | ||||
| public void onSubscribe(Disposable dspsbl) { | public void onSubscribe(Disposable dspsbl) { | ||||
| } | } | ||||
| @Override | @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) { | if (error instanceof HttpException) { | ||||
| switch (((HttpException) error).code()) { | switch (((HttpException) error).code()) { | ||||
| case HttpURLConnection.HTTP_NOT_FOUND: | 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 { | } 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 | @Override | ||||
| public void onComplete() { | 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() { | |||||
| } | |||||
| }; | |||||
| } | } | ||||
| @@ -107,12 +107,10 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements | |||||
| FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogCariPelanggan.fxml")); | FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogCariPelanggan.fxml")); | ||||
| loader.setController(this); | loader.setController(this); | ||||
| // DialogCariBarangController controller = loader.<DialogCariBarangController>getController(); | |||||
| Parent root = loader.load(); | Parent root = loader.load(); | ||||
| getDialogPane().setContent(root); | getDialogPane().setContent(root); | ||||
| setTitle("Cari Pelanggan"); | setTitle("Cari Pelanggan"); | ||||
| // getDialogPane().getButtonTypes().add(ButtonType.CANCEL); | |||||
| setResultConverter(buttonType -> { | setResultConverter(buttonType -> { | ||||
| return pelanggan; | 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) { | public void updateTabelPelanggan(List<Pelanggan> daftarPelanggan) { | ||||
| daftarTabelPelanggan.clear(); | daftarTabelPelanggan.clear(); | ||||
| for (Pelanggan pelanggan : daftarPelanggan) { | for (Pelanggan pelanggan : daftarPelanggan) { | ||||
| @@ -144,9 +134,9 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements | |||||
| @FXML | @FXML | ||||
| void tfPencarianOnKeyReleased(KeyEvent event) { | void tfPencarianOnKeyReleased(KeyEvent event) { | ||||
| daftarTabelPelanggan.clear(); | |||||
| if (((RadioButton) tgTipe.getSelectedToggle()) == rbMember | if (((RadioButton) tgTipe.getSelectedToggle()) == rbMember | ||||
| && event.getCode() == KeyCode.ENTER) { | && event.getCode() == KeyCode.ENTER) { | ||||
| System.out.println("MASUK DONGssssssss"); | |||||
| posRx.getPelangganByKodeMember(tfPencarian.getText()).subscribe(pelangganMemberObserver); | posRx.getPelangganByKodeMember(tfPencarian.getText()).subscribe(pelangganMemberObserver); | ||||
| } else if (((RadioButton) tgTipe.getSelectedToggle()) == rbNama | } else if (((RadioButton) tgTipe.getSelectedToggle()) == rbNama | ||||
| && tfPencarian.getText().length() >= 3) { | && tfPencarian.getText().length() >= 3) { | ||||
| @@ -155,6 +145,7 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements | |||||
| && tfPencarian.getText().length() >= 3) { | && tfPencarian.getText().length() >= 3) { | ||||
| posRx.getPelangganByNoTelpNoHp(tfPencarian.getText()).subscribe(daftarPelangganObserver); | posRx.getPelangganByNoTelpNoHp(tfPencarian.getText()).subscribe(daftarPelangganObserver); | ||||
| } | } | ||||
| } | } | ||||
| public Observer<Pelanggan> pelangganMemberObserver = new Observer<Pelanggan>() { | public Observer<Pelanggan> pelangganMemberObserver = new Observer<Pelanggan>() { | ||||
| @@ -183,12 +174,7 @@ public class DialogCariPelangganController extends Dialog<Pelanggan> implements | |||||
| alert.show(); | alert.show(); | ||||
| } | } | ||||
| } else { | } 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(); | alert.show(); | ||||
| } | } | ||||
| } else { | } 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()); | |||||
| } | } | ||||
| } | } | ||||
| @@ -5,9 +5,9 @@ | |||||
| */ | */ | ||||
| package id.amigogroup.posterminal.pencarian; | 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.beans.property.SimpleStringProperty; | ||||
| import javafx.scene.control.Button; | |||||
| /** | /** | ||||
| * | * | ||||
| @@ -18,14 +18,15 @@ public class TabelBarangCari { | |||||
| private final SimpleStringProperty nama; | private final SimpleStringProperty nama; | ||||
| private final SimpleStringProperty ukur; | private final SimpleStringProperty ukur; | ||||
| private final SimpleStringProperty harga; | 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) { | public TabelBarangCari(String kode, String nama, String ukur,String harga) { | ||||
| this.kode = new SimpleStringProperty(kode); | this.kode = new SimpleStringProperty(kode); | ||||
| this.nama = new SimpleStringProperty(nama); | this.nama = new SimpleStringProperty(nama); | ||||
| this.ukur = new SimpleStringProperty(ukur); | this.ukur = new SimpleStringProperty(ukur); | ||||
| this.harga = new SimpleStringProperty(harga); | this.harga = new SimpleStringProperty(harga); | ||||
| // this.btnTambah = new SimpleObjectProperty<>(btnTambah); | |||||
| } | } | ||||
| /** | /** | ||||
| @@ -84,17 +85,31 @@ public class TabelBarangCari { | |||||
| this.harga.set(harga); | 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; | |||||
| } | |||||
| } | } | ||||
| @@ -16,6 +16,10 @@ public class BarangFull { | |||||
| private Barang barang; | private Barang barang; | ||||
| private NoBarang noBarang; | private NoBarang noBarang; | ||||
| public BarangFull() { | |||||
| } | |||||
| public BarangFull(Barang barang, NoBarang noBarang) { | public BarangFull(Barang barang, NoBarang noBarang) { | ||||
| this.barang = barang; | this.barang = barang; | ||||
| this.noBarang = noBarang; | this.noBarang = noBarang; | ||||
| @@ -77,8 +77,7 @@ public class DialogTambahNotaController extends Dialog<String> implements Initia | |||||
| FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogTambahNota.fxml")); | FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogTambahNota.fxml")); | ||||
| loader.setController(this); | loader.setController(this); | ||||
| // DialogCariBarangController controller = loader.<DialogCariBarangController>getController(); | |||||
| Parent root = loader.load(); | Parent root = loader.load(); | ||||
| getDialogPane().setContent(root); | getDialogPane().setContent(root); | ||||
| @@ -125,15 +124,8 @@ public class DialogTambahNotaController extends Dialog<String> implements Initia | |||||
| alert.initModality(Modality.APPLICATION_MODAL); | alert.initModality(Modality.APPLICATION_MODAL); | ||||
| alert.show(); | 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) { | if (!notaExists) { | ||||
| @@ -273,16 +273,16 @@ public class FormTransaksiReturController implements Initializable { | |||||
| tbr.setSubTotal(Fucout.getText(Fucout.formatRibuan( | tbr.setSubTotal(Fucout.getText(Fucout.formatRibuan( | ||||
| dNotaRetur.getJumlah() * dNotaRetur.getHargaJual() | dNotaRetur.getJumlah() * dNotaRetur.getHargaJual() | ||||
| ))); | ))); | ||||
| tbvRetur.refresh(); | tbvRetur.refresh(); | ||||
| } else{ | |||||
| } else { | |||||
| Alert alert = AlertUtil.getAlertError( | Alert alert = AlertUtil.getAlertError( | ||||
| "Jumlah Barang Kurang", | |||||
| "Jumlah Barang Kurang", | |||||
| "Barang di Nota Penjualan yang di-Retur sudah mencapai jumlah yang ada."); | "Barang di Nota Penjualan yang di-Retur sudah mencapai jumlah yang ada."); | ||||
| alert.initOwner(apMain.getScene().getWindow()); | alert.initOwner(apMain.getScene().getWindow()); | ||||
| alert.show(); | alert.show(); | ||||
| } | } | ||||
| ada = true; | ada = true; | ||||
| break; | break; | ||||
| } | } | ||||
| @@ -353,24 +353,8 @@ public class FormTransaksiReturController implements Initializable { | |||||
| alert.show(); | 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 { | } 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(); | 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 { | } 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()); | |||||
| } | } | ||||
| } | } | ||||
| @@ -94,7 +94,7 @@ public class FormTransaksiTunaiController implements Initializable { | |||||
| @Override | @Override | ||||
| public void initialize(URL url, ResourceBundle rb) { | public void initialize(URL url, ResourceBundle rb) { | ||||
| fldScan.requestFocus(); | fldScan.requestFocus(); | ||||
| tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangTunai, Integer> cell) -> { | tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangTunai, Integer> cell) -> { | ||||
| return new ReadOnlyObjectWrapper(tbvTransaksi.getItems().indexOf(cell.getValue()) + 1); | 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 (barang != null && noBarang != null) { | ||||
| if (noBarang.getStokOperasional() >= jumlah) { | |||||
| if (noBarang.getStokOperasional() > 0) { | |||||
| boolean ada = false; | boolean ada = false; | ||||
| for (TabelBarangTunai tbt : daftarTabelTransaksi) { | for (TabelBarangTunai tbt : daftarTabelTransaksi) { | ||||
| if (tbt.getKode().equals(barang.getKodeBarang()) && tbt.getUkur().equals(noBarang.getNomor())) { | 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; | ada = true; | ||||
| break; | break; | ||||
| } | } | ||||
| } | } | ||||
| if (!ada) { | if (!ada) { | ||||
| String[] promo = {"Ulang Tahun", "Harbolnas", "Ultah Amigo"}; | String[] promo = {"Ulang Tahun", "Harbolnas", "Ultah Amigo"}; | ||||
| ComboBox<String> cbxPromo = new ComboBox<>(FXCollections.observableArrayList(promo)); | ComboBox<String> cbxPromo = new ComboBox<>(FXCollections.observableArrayList(promo)); | ||||
| @@ -201,30 +210,39 @@ public class FormTransaksiTunaiController implements Initializable { | |||||
| noNota, | noNota, | ||||
| barang.getKodeBarang(), | barang.getKodeBarang(), | ||||
| barang.getNamaBarang(), | barang.getNamaBarang(), | ||||
| jumlah, | |||||
| 1, | |||||
| 0, | 0, | ||||
| 0, | 0, | ||||
| noBarang.getHargaJual(), | noBarang.getHargaJual(), | ||||
| noBarang.getHargaPokok(), | noBarang.getHargaPokok(), | ||||
| "", | "", | ||||
| 0); | 0); | ||||
| TabelBarangTunai tbt = new TabelBarangTunai( | TabelBarangTunai tbt = new TabelBarangTunai( | ||||
| Fucout.getText(barang.getKodeBarang()), | Fucout.getText(barang.getKodeBarang()), | ||||
| Fucout.getText(barang.getNamaBarang()), | Fucout.getText(barang.getNamaBarang()), | ||||
| Fucout.getText(noBarang.getNomor()), | Fucout.getText(noBarang.getNomor()), | ||||
| String.valueOf(jumlah), | |||||
| String.valueOf(1), | |||||
| Fucout.getText(Fucout.formatRibuan(noBarang.getHargaJual())), | Fucout.getText(Fucout.formatRibuan(noBarang.getHargaJual())), | ||||
| "...", | "...", | ||||
| "...", | "...", | ||||
| cbxPromo, | cbxPromo, | ||||
| Fucout.getText(Fucout.formatRibuan( | Fucout.getText(Fucout.formatRibuan( | ||||
| jumlah * noBarang.getHargaJual()) | |||||
| 1 * noBarang.getHargaJual()) | |||||
| ), | ), | ||||
| fldPramuniaga); | fldPramuniaga); | ||||
| tbt.setData(dNotaTunai); | tbt.setData(dNotaTunai); | ||||
| daftarTabelTransaksi.add(tbt); | 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() | NoBarang noBarang = AmigoPosCache.getInstance().getDaftarNoBarang() | ||||
| .get(barang.getIdGabungan() + ukur); | .get(barang.getIdGabungan() + ukur); | ||||
| addToTable(barang, noBarang, 1); | |||||
| addToTable(barang, noBarang); | |||||
| } else { | } else { | ||||
| Observable.zip(posRx.getBarangByKodeBarang(kodeBarang), | Observable.zip(posRx.getBarangByKodeBarang(kodeBarang), | ||||
| posRx.getNoBarangByIdGabunganNomor(barang.getIdGabungan(), ukur), | posRx.getNoBarangByIdGabunganNomor(barang.getIdGabungan(), ukur), | ||||
| (b, nB) -> new BarangFull(b, nB)).subscribe(getBarangFullGetNoBarangFromBarangObserver); | (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(); | 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 { | } 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) { | if (error instanceof HttpException) { | ||||
| switch (((HttpException) error).code()) { | switch (((HttpException) error).code()) { | ||||
| case HttpURLConnection.HTTP_NOT_FOUND: | 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 { | } 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) { | if (error instanceof HttpException) { | ||||
| switch (((HttpException) error).code()) { | switch (((HttpException) error).code()) { | ||||
| case HttpURLConnection.HTTP_NOT_FOUND: | 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 { | } 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 | @Override | ||||
| public void onNext(BarangFull bf) { | public void onNext(BarangFull bf) { | ||||
| addToTable(bf.getBarang(), bf.getNoBarang(), 1); | |||||
| addToTable(bf.getBarang(), bf.getNoBarang()); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -435,26 +419,16 @@ public class FormTransaksiTunaiController implements Initializable { | |||||
| if (error instanceof HttpException) { | if (error instanceof HttpException) { | ||||
| switch (((HttpException) error).code()) { | switch (((HttpException) error).code()) { | ||||
| case HttpURLConnection.HTTP_NOT_FOUND: | 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 { | } 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()); | |||||
| } | } | ||||
| } | } | ||||
| @@ -6,6 +6,7 @@ | |||||
| package id.amigogroup.posterminal.util; | package id.amigogroup.posterminal.util; | ||||
| import javafx.scene.control.Alert; | import javafx.scene.control.Alert; | ||||
| import javafx.scene.control.ButtonBar.ButtonData; | |||||
| import javafx.scene.control.ButtonType; | import javafx.scene.control.ButtonType; | ||||
| import javafx.scene.image.Image; | import javafx.scene.image.Image; | ||||
| import javafx.scene.image.ImageView; | 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_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_TITLE = "Error: Timeout - Koneksi Gagal"; | ||||
| public static final String ERROR_KONEKSI_TIMEOUT_MESSAGE = "Koneksi ke server mengalami kegagalan."; | 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){ | public static Alert getAlertError(String title, String message){ | ||||
| Alert alert = new Alert(Alert.AlertType.ERROR, message, ButtonType.OK); | Alert alert = new Alert(Alert.AlertType.ERROR, message, ButtonType.OK); | ||||
| @@ -25,12 +25,12 @@ | |||||
| </toggleGroup> | </toggleGroup> | ||||
| </RadioButton> | </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" /> | <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> | <columns> | ||||
| <TableColumn fx:id="tcNo" maxWidth="30.0" minWidth="30.0" prefWidth="30.0" resizable="false" text="No" /> | <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="tcKode" prefWidth="75.0" text="Kode" /> | ||||
| <TableColumn fx:id="tcNama" prefWidth="75.0" text="Nama" /> | <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" /> | <TableColumn fx:id="tcHarga" prefWidth="75.0" text="Harga" /> | ||||
| </columns> | </columns> | ||||
| <columnResizePolicy> | <columnResizePolicy> | ||||