diff --git a/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java b/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java index 4ee9863..71ccaea 100644 --- a/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java +++ b/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java @@ -5,8 +5,8 @@ */ package id.amigogroup.posterminal.api; -import com.fasterxml.jackson.databind.JsonNode; import id.amigogroup.posterminal.model.Barang; +import id.amigogroup.posterminal.model.DNotaRetur; import id.amigogroup.posterminal.model.DNotaTunai; import id.amigogroup.posterminal.model.Karyawan; import id.amigogroup.posterminal.model.Pagination; @@ -91,6 +91,11 @@ public class AmigoPosRx { return UtilsApi.getServiceApiBarang().getMNotaReturByNoNota(noNota) .subscribeOn(Schedulers.trampoline()); } + + public Observable> getDNotaReturByNoNota(String noNota) { + return UtilsApi.getServiceApiBarang().getDNotaReturByNoNota(noNota) + .subscribeOn(Schedulers.io()); + } //Checkin API public Observable> getAllTas() { diff --git a/src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java b/src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java index 441fdb8..f8e2396 100644 --- a/src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java +++ b/src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java @@ -6,6 +6,7 @@ package id.amigogroup.posterminal.api; import id.amigogroup.posterminal.model.Barang; +import id.amigogroup.posterminal.model.DNotaRetur; import id.amigogroup.posterminal.model.DNotaTunai; import id.amigogroup.posterminal.model.MNotaRetur; import id.amigogroup.posterminal.model.MNotaTunai; @@ -99,4 +100,9 @@ public interface ServiceApiBarang { //Mengambil Master Nota Retur by No Nota @GET("m-nota-retur/no-nota/{noNota}") Observable getMNotaReturByNoNota(@Path("noNota") String noNota); + + //D-NOTA-RETUR + //Mengambil Detail Nota Tunai by No Nota + @GET("d-nota-retur/no-nota/{noNota}") + Observable> getDNotaReturByNoNota(@Path("noNota") String noNota); } diff --git a/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java b/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java index 71035ad..6d9044e 100644 --- a/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java +++ b/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java @@ -112,7 +112,7 @@ public class FormTransaksiReturController implements Initializable { private StackPane stpReturDrop; @FXML private Label lblTambahKeTabelRetur; - + private final AmigoPosRx posRx = new AmigoPosRx(); private String noNota = ""; private final ObservableList daftarTabelPenjualan = FXCollections.observableArrayList(); @@ -136,7 +136,7 @@ public class FormTransaksiReturController implements Initializable { tcDisc2.setCellValueFactory(new PropertyValueFactory<>("disc2")); tcSubTotal.setCellValueFactory(new PropertyValueFactory<>("subTotal")); tcPramuniaga.setCellValueFactory(new PropertyValueFactory<>("fldPramuniaga")); - tcBtnBatal.setCellValueFactory(new PropertyValueFactory<>("btnBatal")); +// tcBtnBatal.setCellValueFactory(new PropertyValueFactory<>("btnBatal")); tbvPenjualan.setItems(daftarTabelPenjualan); tcNoRetur.setCellValueFactory((TableColumn.CellDataFeatures cell) -> { @@ -160,23 +160,22 @@ public class FormTransaksiReturController implements Initializable { public void initData(String noNota, boolean baru) { this.noNota = noNota; - if(!baru){ - + if (!baru) { + posRx.getDNotaReturByNoNota(noNota).subscribe(getDaftarDNotaReturObserver); } - if(SystemValue.karyawanLogin != null){ + if (SystemValue.karyawanLogin != null) { lblKasir.setText(Fucout.getTextColon(SystemValue.karyawanLogin.getNama())); } - + lblNomorNota.setText(Fucout.getTextColon(noNota)); } - private void refreshData(List daftarNotaTunai) { + private void refreshDataPenjualan(List daftarNotaTunai) { daftarTabelPenjualan.clear(); - daftarTabelRetur.clear(); for (DNotaTunai dNotaTunai : daftarNotaTunai) { - //Button - Button btnBatal = ButtonUtility.generateButton(ButtonUtility.CLOSE_ICON); + //Button + Button btnBatal = ButtonUtility.generateButton(ButtonUtility.CLOSE_ICON); btnBatal.setOnAction((t) -> { Alert alert = AlertUtil.getAlertDialogKonfirmasi( AlertUtil.DIALOG_KONFIRMASI_MESSAGE, @@ -214,7 +213,44 @@ public class FormTransaksiReturController implements Initializable { daftarTabelPenjualan.add(tbt); if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { - posRx.getBarangByKodeBarang(dNotaTunai.getKdBarang()).subscribe(getBarangObserver); + posRx.getBarangByKodeBarang(dNotaTunai.getKdBarang()).subscribe(getBarangPenjualanObserver); + } + } + } + + private void refreshDataRetur(List daftarDNotaRetur) { + daftarTabelRetur.clear(); + + for(DNotaRetur dNotaRetur : daftarDNotaRetur){ + //Button + TextField fldPramuniaga = new TextField(dNotaRetur.getKodePram()); + + String namaBarang = "..."; + if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaRetur.getKdBarang())) { + Barang barang = AmigoPosCache.getInstance().getDaftarBarang() + .get(dNotaRetur.getKdBarang()); + namaBarang = Fucout.getText(barang.getNamaBarang()); + dNotaRetur.setBarang(barang); + } + + TabelBarangRetur tbr = new TabelBarangRetur( + Fucout.getText(dNotaRetur.getKdBarang()), + namaBarang, + Fucout.getText(dNotaRetur.getNoBarang()), + Fucout.getText(String.valueOf(dNotaRetur.getJumlah())), + Fucout.getText(Fucout.formatRibuan(dNotaRetur.getHargaJual())), + Fucout.getText(Fucout.formatPersentase(dNotaRetur.getDiskon())), + Fucout.getText(Fucout.formatPersentase(dNotaRetur.getDiskon2())), + Fucout.getText(Fucout.formatRibuan( + dNotaRetur.getHargaJual() * dNotaRetur.getJumlah() + )), + fldPramuniaga); + + tbr.setData(dNotaRetur); + daftarTabelRetur.add(tbr); + + if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaRetur.getKdBarang())) { + posRx.getBarangByKodeBarang(dNotaRetur.getKdBarang()).subscribe(getBarangReturObserver); } } } @@ -227,7 +263,7 @@ public class FormTransaksiReturController implements Initializable { ObjectMapper mapper = new ObjectMapper(); JsonNode jsonNode = mapper.readTree(response.string()); ObjectNode node = jsonNode.deepCopy(); - + if (node.get("result") != null && node.get("result").asBoolean()) { posRx.getDNotaTunaiByNoNota(fldNotaPenjualan.getText()).subscribe(getDNotaTunaiObserver); } else { @@ -393,7 +429,7 @@ public class FormTransaksiReturController implements Initializable { @Override public void onNext(List daftarDNotaTunai) { fldNotaPenjualan.clear(); - refreshData(daftarDNotaTunai); + refreshDataPenjualan(daftarDNotaTunai); } @Override @@ -420,7 +456,7 @@ public class FormTransaksiReturController implements Initializable { }; - Observer getBarangObserver = new Observer<>() { + Observer getBarangPenjualanObserver = new Observer<>() { @Override public void onSubscribe(Disposable dspsbl) { } @@ -461,4 +497,79 @@ public class FormTransaksiReturController implements Initializable { } }; + + Observer> getDaftarDNotaReturObserver = new Observer<>() { + @Override + public void onSubscribe(Disposable dspsbl) { + } + + @Override + public void onNext(List daftarDNotaRetur) { + refreshDataRetur(daftarDNotaRetur); + } + + @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(apMain.getScene().getWindow()); + alert.show(); + }); + } + } else { + AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow()); + } + } + + @Override + public void onComplete() { + } + }; + + Observer getBarangReturObserver = new Observer<>() { + @Override + public void onSubscribe(Disposable dspsbl) { + } + + @Override + public void onNext(Barang b) { + AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b); + for (TabelBarangRetur tbr : tbvRetur.getItems()) { + if (tbr.getData().getKdBarang().equals(b.getKodeBarang())) { + tbr.setNama(b.getNamaBarang()); + + tbr.getData().setBarang(b); + tbvRetur.refresh(); + } + } + } + + @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(apMain.getScene().getWindow()); + alert.show(); + }); + } + } else { + AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow()); + } + } + + @Override + public void onComplete() { + } + + }; } diff --git a/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java b/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java index a6e23a6..8839caf 100644 --- a/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java +++ b/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java @@ -136,10 +136,10 @@ public class FormTransaksiTunaiController implements Initializable { if (!baru) { posRx.getDNotaTunaiByNoNota(noNota).subscribe(getDNotaTunaiObserver); } - if(SystemValue.karyawanLogin != null){ + if (SystemValue.karyawanLogin != null) { lblKasir.setText(Fucout.getTextColon(SystemValue.karyawanLogin.getNama())); } - + this.parent = parent; this.noNota = noNota; lblNoNota.setText(Fucout.getTextColon(noNota)); @@ -216,7 +216,7 @@ public class FormTransaksiTunaiController implements Initializable { ComboBox cbxPromo = new ComboBox<>(FXCollections.observableArrayList(promo)); cbxPromo.getSelectionModel().select("Ulang Tahun"); //Button - Button btnBatal = ButtonUtility.generateButton(ButtonUtility.CLOSE_ICON); + Button btnBatal = ButtonUtility.generateButton(ButtonUtility.CLOSE_ICON); btnBatal.setOnAction((t) -> { Alert alert = AlertUtil.getAlertError( AlertUtil.DIALOG_KONFIRMASI_MESSAGE, @@ -299,7 +299,7 @@ public class FormTransaksiTunaiController implements Initializable { ComboBox cbxPromo = new ComboBox<>(FXCollections.observableArrayList(promo)); cbxPromo.getSelectionModel().select("Ulang Tahun"); - Button btnAction = ButtonUtility.generateButton(ButtonUtility.CLOSE_ICON); + Button btnAction = ButtonUtility.generateButton(ButtonUtility.CLOSE_ICON); btnAction.setOnAction((t) -> { Alert alert = AlertUtil.getAlertDialogKonfirmasi( AlertUtil.DIALOG_KONFIRMASI_MESSAGE, @@ -597,6 +597,13 @@ public class FormTransaksiTunaiController implements Initializable { @Override public void onComplete() { + Platform.runLater(() -> { + Alert alert = AlertUtil.getAlertInfo( + "Berhasil Ditunda", + "Nota berhasil ditunda!"); + alert.initOwner(parent.getWindow()); + alert.show(); + }); } }; @@ -620,20 +627,12 @@ public class FormTransaksiTunaiController implements Initializable { @Override public void onComplete() { - Platform.runLater(() -> { - Alert alert = AlertUtil.getAlertInfo( - "Berhasil Ditunda", - "Nota berhasil ditunda!"); - alert.initOwner(parent.getWindow()); - alert.show(); - - if (parent != null) { - parent.notaContent.setControllerTunai(null); - parent.notaContent.setNodeTunai(null); + if (parent != null) { + parent.notaContent.setControllerTunai(null); + parent.notaContent.setNodeTunai(null); - parent.removeNota(parent.notaContent.getBtnTunai()); - } - }); + parent.removeNota(parent.notaContent.getBtnTunai()); + } } }; }