diff --git a/src/main/java/id/amigogroup/posterminal/FormUtamaController.java b/src/main/java/id/amigogroup/posterminal/FormUtamaController.java index e3071e2..5f453cc 100644 --- a/src/main/java/id/amigogroup/posterminal/FormUtamaController.java +++ b/src/main/java/id/amigogroup/posterminal/FormUtamaController.java @@ -356,7 +356,42 @@ public class FormUtamaController implements Initializable { DialogCetakUlangNotaController dialogCetakUlangNota = new DialogCetakUlangNotaController(); dialogCetakUlangNota.initOwner(bpMain.getScene().getWindow()); - Optional result = dialogCetakUlangNota.showAndWait(); + Optional hasilReturn = dialogCetakUlangNota.showAndWait(); + + if (hasilReturn.get().contains("Tunda:")) { + String noNota = hasilReturn.get().substring(6); + Button buttonBaru = null; + switch (noNota.charAt(0)) { + case Fucout.KODE_NOTA_BON: + removeDuplicateNota(FormConstanta.TRANSAKSI_BON); + break; + case Fucout.KODE_NOTA_BAWA: + removeDuplicateNota(FormConstanta.TRANSAKSI_BAWA); + break; + case Fucout.KODE_NOTA_RETUR: + removeDuplicateNota(FormConstanta.TRANSAKSI_RETUR); + + buttonBaru = generateButtonNota(noNota, + FormConstanta.TRANSAKSI_RETUR, + Fucout.TEKS_TIPE_NOTA_RETUR, + false); + notaContent.setBtnRetur(buttonBaru); + break; + default: + removeDuplicateNota(FormConstanta.TRANSAKSI_TUNAI); + buttonBaru = generateButtonNota(noNota, + FormConstanta.TRANSAKSI_TUNAI, + Fucout.TEKS_TIPE_NOTA_TUNAI, + false); + notaContent.setBtnTunai(buttonBaru); + break; + } + + if (buttonBaru != null) { + navigasi.add(buttonBaru); + vbNavigasi.getChildren().add(buttonBaru); + } + } }; listShortcuts.put(kcCariCetakUlangNota, rnCetakUlangNota); @@ -483,7 +518,7 @@ public class FormUtamaController implements Initializable { notaContent.setBtnTunai(buttonBaru); break; } - + if (buttonBaru != null) { navigasi.add(buttonBaru); vbNavigasi.getChildren().add(buttonBaru); diff --git a/src/main/java/id/amigogroup/posterminal/pencarian/DialogCariNotaTundaController.java b/src/main/java/id/amigogroup/posterminal/pencarian/DialogCariNotaTundaController.java index 84dcd62..285d7dc 100644 --- a/src/main/java/id/amigogroup/posterminal/pencarian/DialogCariNotaTundaController.java +++ b/src/main/java/id/amigogroup/posterminal/pencarian/DialogCariNotaTundaController.java @@ -5,19 +5,33 @@ */ package id.amigogroup.posterminal.pencarian; +import id.amigogroup.posterminal.FormUtamaController; +import id.amigogroup.posterminal.SystemValue; import id.amigogroup.posterminal.api.AmigoPosRx; +import id.amigogroup.posterminal.model.Barang; +import id.amigogroup.posterminal.model.DNotaTunai; import id.amigogroup.posterminal.model.MNotaTunai; import id.amigogroup.posterminal.model.Pagination; +import id.amigogroup.posterminal.transaksi.NotaWithListDetail; import id.amigogroup.posterminal.transaksi.TabelBarangTunai; import id.amigogroup.posterminal.util.AlertUtil; +import id.amigogroup.posterminal.util.AmigoPosCache; +import id.amigogroup.posterminal.util.ButtonUtility; +import id.amigogroup.posterminal.util.Fucout; +import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; +import javafx.application.Platform; import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.collections.FXCollections; import javafx.collections.ObservableList; @@ -27,14 +41,19 @@ import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Parent; import javafx.scene.control.Alert; +import javafx.scene.control.Button; import javafx.scene.control.ButtonBar.ButtonData; import javafx.scene.control.ButtonType; import javafx.scene.control.ComboBox; import javafx.scene.control.Dialog; +import javafx.scene.control.Label; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; +import javafx.scene.control.TextField; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyCodeCombination; +import javafx.scene.input.KeyCombination; import javafx.scene.input.KeyEvent; import javafx.scene.layout.AnchorPane; import javafx.stage.Window; @@ -46,10 +65,12 @@ import retrofit2.HttpException; * @author ronal */ public class DialogCariNotaTundaController extends Dialog implements Initializable { - + @FXML AnchorPane apContent; @FXML + private AnchorPane apMain; + @FXML private ComboBox cbxCariNotaTunda; @FXML private TableView tbvBarangTunda; @@ -62,7 +83,7 @@ public class DialogCariNotaTundaController extends Dialog implements Ini @FXML private TableColumn tcUkur; @FXML - private TableColumn tcJml; + private TableColumn tcJumlah; @FXML private TableColumn tcHarga; @FXML @@ -74,25 +95,42 @@ public class DialogCariNotaTundaController extends Dialog implements Ini @FXML private TableColumn tcPromo; @FXML + private Label lblKasir; private TableColumn tcPramuniaga; final ObservableList daftarTabelBarangTunai = FXCollections.observableArrayList(); AmigoPosRx posRx = new AmigoPosRx(); + private FormUtamaController parent; + private ButtonType btnTambah = new ButtonType("Tambah", ButtonData.YES); + private String noNota = ""; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { + getDialogPane().getButtonTypes().add(btnTambah); getDialogPane().getButtonTypes().add(new ButtonType("Tutup", ButtonData.CANCEL_CLOSE)); -// - } - - + tcNo.setCellValueFactory((TableColumn.CellDataFeatures cell) -> { + return new ReadOnlyObjectWrapper(tbvBarangTunda.getItems().indexOf(cell.getValue()) + 1); + }); + tcKode.setCellValueFactory(new PropertyValueFactory<>("kode")); + tcNama.setCellValueFactory(new PropertyValueFactory<>("nama")); + tcUkur.setCellValueFactory(new PropertyValueFactory<>("ukur")); + tcJumlah.setCellValueFactory(new PropertyValueFactory<>("jumlah")); + tcHarga.setCellValueFactory(new PropertyValueFactory<>("harga")); + tcDisc1.setCellValueFactory(new PropertyValueFactory<>("disc1")); + tcDisc2.setCellValueFactory(new PropertyValueFactory<>("disc2")); + tcPromo.setCellValueFactory(new PropertyValueFactory<>("cbxPromo")); + tcSubTotal.setCellValueFactory(new PropertyValueFactory<>("subTotal")); +// tcPramuniaga.setCellValueFactory(new PropertyValueFactory<>("fldPramuniaga")); + tbvBarangTunda.setItems(daftarTabelBarangTunai); + } + public DialogCariNotaTundaController(/*FormPresensiController parent*/) { try { Window window = getDialogPane().getScene().getWindow(); window.setOnCloseRequest(event -> this.close()); - + FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogCariNotaTunda.fxml")); loader.setController(this); // DialogCariBarangController controller = loader.getController(); @@ -100,51 +138,191 @@ public class DialogCariNotaTundaController extends Dialog implements Ini getDialogPane().setContent(root); setTitle("Cari Nota Tunda"); posRx.getMNotaTunaiByStatus("T", 25).subscribe(getNotaTunaiTundaObserver); -// getDialogPane().getButtonTypes().add(ButtonType.CANCEL); -// setResultConverter(buttonType -> { -// return str; -// }); + + setResultConverter(buttonType -> { + if (buttonType == btnTambah) { + return "Tunda:" + noNota; + } + return "Batal"; + + }); } catch (IOException e) { Logger.getLogger(DialogCariBarangController.class .getName()).log(Level.SEVERE, null, e); } } - - @FXML - void cbxNotaTundaOnAction(ActionEvent event) { - + + private void refreshData(List daftarNotaTunai) { + daftarTabelBarangTunai.clear(); + //hitungTotal(daftarNotaTunai); + + String[] promo = {"Ulang Tahun", "Harbolnas", "Ultah Amigo"}; + for (DNotaTunai dNotaTunai : daftarNotaTunai) { + //ComboBox + ComboBox cbxPromo = new ComboBox<>(FXCollections.observableArrayList(promo)); + cbxPromo.getSelectionModel().select("Ulang Tahun"); + //Button + Button btnBatal = ButtonUtility.generateButton(ButtonUtility.CLOSE_ICON); + btnBatal.setOnAction((t) -> { + Alert alert = AlertUtil.getAlertError( + AlertUtil.DIALOG_KONFIRMASI_MESSAGE, + "Yakin ingin menghapus barang?"); + alert.initOwner(apMain.getScene().getWindow()); + alert.show(); + + }); + //TextField + TextField fldPramuniaga = new TextField(dNotaTunai.getKodePram()); + fldPramuniaga.setOnKeyPressed((t) -> { + if (t.getCode() == KeyCode.ENTER) { + fldPramuniaga.requestFocus(); + } + + }); + + String namaBarang = "..."; + if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { + namaBarang = Fucout.getText(AmigoPosCache.getInstance().getDaftarBarang() + .get(dNotaTunai.getKdBarang()).getNamaBarang()); + } + + daftarTabelBarangTunai.add(new TabelBarangTunai( + Fucout.getText(dNotaTunai.getKdBarang()), + namaBarang, + Fucout.getText(dNotaTunai.getNoBarang()), + Fucout.getText(String.valueOf(dNotaTunai.getJumlah())), + Fucout.getText(Fucout.formatRibuan(dNotaTunai.getHargaJual())), + Fucout.getText(Fucout.formatPersentase(dNotaTunai.getDiskon())), + Fucout.getText(Fucout.formatPersentase(dNotaTunai.getDiskon2())), + cbxPromo, + Fucout.getText(Fucout.formatRibuan( + dNotaTunai.getHargaJual() * dNotaTunai.getJumlah() + )), + fldPramuniaga, + btnBatal)); + + if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { + posRx.getBarangByKodeBarang(dNotaTunai.getKdBarang()).subscribe(getBarangObserver); + } + } + } + + @FXML + void cbxNotaTundaOnAction(ActionEvent event) { + posRx.getDNotaTunaiByNoNota(cbxCariNotaTunda.getSelectionModel().getSelectedItem()) + .subscribe(getDNotaTunaiObserver); + } +// + //OBSERVER + Observer> getDNotaTunaiObserver = new Observer<>() { + @Override + public void onSubscribe(Disposable dspsbl) { } - - public Observer> getNotaTunaiTundaObserver = new Observer>() { - @Override - public void onSubscribe(Disposable dspsbl) { + + @Override + public void onNext(List daftarDNotaTunai) { + if (daftarDNotaTunai.size() > 0) { + noNota = daftarDNotaTunai.get(0).getNoNota(); } + refreshData(daftarDNotaTunai); + } - @Override - public void onNext(Pagination daftarMNotaTunai) { - for (MNotaTunai mNotaTunai : daftarMNotaTunai.getData()){ - cbxCariNotaTunda.getItems().add(mNotaTunai.getNoNota()); + @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, + "Data nota tidak ditemukan."); + alert.initOwner(apMain.getScene().getWindow()); + alert.show(); + }); } + } else { + AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow()); } + } + + @Override + public void onComplete() { + } + + }; + + //Observer untuk menampilkan data sebuah barang ke tabel, yang sudah mempunyai DNotaTunai + Observer getBarangObserver = new Observer<>() { + @Override + public void onSubscribe(Disposable dspsbl) { + } + + @Override + public void onNext(Barang b) { + AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b); + for (TabelBarangTunai tbt : daftarTabelBarangTunai) { + if (tbt.getKode().equals(b.getKodeBarang())) { + tbt.setNama(b.getNamaBarang()); + tbvBarangTunda.refresh(); + System.out.println(".onNext()"); + } + }; + } - @Override - public void onError(Throwable error) { - if (error instanceof HttpException) { - switch (((HttpException) error).code()) { - case HttpURLConnection.HTTP_NOT_FOUND: + @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, - "Nota Tunda Tidak Ditemukan"); - alert.initOwner(apContent.getScene().getWindow()); + "Barang dengan kode tersebut tidak ditemukan."); + alert.initOwner(apMain.getScene().getWindow()); alert.show(); - } - } else { - AmigoPosRx.handleGenericError(error, apContent.getScene().getWindow()); + }); } + } else { + AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow()); } + } + + @Override + public void onComplete() { + } + + }; + //Observer Nota Tunda + public Observer> getNotaTunaiTundaObserver = new Observer>() { + @Override + public void onSubscribe(Disposable dspsbl) { + } + + @Override + public void onNext(Pagination daftarMNotaTunai) { + for (MNotaTunai mNotaTunai : daftarMNotaTunai.getData()) { + cbxCariNotaTunda.getItems().add(mNotaTunai.getNoNota()); + } + } - @Override - public void onComplete() { + @Override + public void onError(Throwable error) { + if (error instanceof HttpException) { + switch (((HttpException) error).code()) { + case HttpURLConnection.HTTP_NOT_FOUND: + Alert alert = AlertUtil.getAlertError( + AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE, + "Nota Tunda Tidak Ditemukan"); + alert.initOwner(apContent.getScene().getWindow()); + alert.show(); + } + } else { + AmigoPosRx.handleGenericError(error, apContent.getScene().getWindow()); } - }; + } + + @Override + public void onComplete() { + } + }; } diff --git a/src/main/resources/fxml/DialogCariNotaTunda.fxml b/src/main/resources/fxml/DialogCariNotaTunda.fxml index 6c2a0ba..2833eaa 100644 --- a/src/main/resources/fxml/DialogCariNotaTunda.fxml +++ b/src/main/resources/fxml/DialogCariNotaTunda.fxml @@ -32,7 +32,7 @@ - +