Aplikasi POS Amigo, dibangun dengan JavaFX dengan Maven
Ви не можете вибрати більше 25 тем Теми мають розпочинатися з літери або цифри, можуть містити дефіси (-) і не повинні перевищувати 35 символів.

168 рядки
6.8 KiB

  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6. package id.amigogroup.posterminal.transaksi;
  7. import id.amigogroup.posterminal.api.AmigoPosRx;
  8. import id.amigogroup.posterminal.model.MNotaRetur;
  9. import id.amigogroup.posterminal.model.MNotaTunai;
  10. import id.amigogroup.posterminal.util.AlertUtil;
  11. import id.amigogroup.posterminal.util.Fucout;
  12. import io.reactivex.Observable;
  13. import java.io.IOException;
  14. import java.net.HttpURLConnection;
  15. import java.net.URL;
  16. import java.util.ResourceBundle;
  17. import java.util.logging.Level;
  18. import java.util.logging.Logger;
  19. import javafx.event.ActionEvent;
  20. import javafx.fxml.FXML;
  21. import javafx.fxml.FXMLLoader;
  22. import javafx.fxml.Initializable;
  23. import javafx.scene.Parent;
  24. import javafx.scene.control.Alert;
  25. import javafx.scene.control.Button;
  26. import javafx.scene.control.ButtonBar.ButtonData;
  27. import javafx.scene.control.ButtonType;
  28. import javafx.scene.control.ComboBox;
  29. import javafx.scene.control.Dialog;
  30. import javafx.scene.control.RadioButton;
  31. import javafx.scene.control.TextField;
  32. import javafx.scene.control.ToggleGroup;
  33. import javafx.scene.layout.AnchorPane;
  34. import javafx.stage.Modality;
  35. import javafx.stage.Window;
  36. import retrofit2.HttpException;
  37. /**
  38. *
  39. * @author Josua
  40. */
  41. public class DialogTambahNotaController extends Dialog<String> implements Initializable {
  42. @FXML
  43. private AnchorPane apTambahNota;
  44. @FXML
  45. private ToggleGroup tgTipe;
  46. @FXML
  47. private RadioButton rbBaru;
  48. @FXML
  49. private ComboBox<String> cbxPilihNota;
  50. @FXML
  51. private RadioButton rbAmbilDariCheckout;
  52. @FXML
  53. private TextField tfAmbilDariCheckout;
  54. private AmigoPosRx posRx = new AmigoPosRx();
  55. public static final ButtonType btnLanjutkan = new ButtonType("Lanjutkan", ButtonData.YES);
  56. public static final ButtonType btnBatal = new ButtonType("Batal", ButtonData.CANCEL_CLOSE);
  57. @Override
  58. public void initialize(URL url, ResourceBundle rb) {
  59. cbxPilihNota.getItems().setAll(
  60. "Tunai",
  61. "Bon",
  62. "Bawa Dulu",
  63. "Retur"
  64. );
  65. cbxPilihNota.getSelectionModel().select(0);
  66. tgTipe.selectedToggleProperty().addListener(((observable, oldValue, newValue) -> {
  67. if (newValue.equals(rbBaru)) {
  68. cbxPilihNota.setDisable(false);
  69. tfAmbilDariCheckout.setDisable(true);
  70. } else if (newValue.equals(rbAmbilDariCheckout)) {
  71. cbxPilihNota.setDisable(true);
  72. tfAmbilDariCheckout.setDisable(false);
  73. tfAmbilDariCheckout.requestFocus();
  74. }
  75. }));
  76. }
  77. public DialogTambahNotaController() {
  78. try {
  79. Window window = getDialogPane().getScene().getWindow();
  80. window.setOnCloseRequest(event -> this.close());
  81. FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogTambahNota.fxml"));
  82. loader.setController(this);
  83. Parent root = loader.load();
  84. getDialogPane().setContent(root);
  85. getDialogPane().getButtonTypes().add(btnBatal);
  86. getDialogPane().getButtonTypes().add(btnLanjutkan);
  87. Button btnLanjutkanR = (Button) getDialogPane().lookupButton(btnLanjutkan);
  88. btnLanjutkanR.setDefaultButton(true);
  89. btnLanjutkanR.addEventFilter(ActionEvent.ACTION, event -> {
  90. if (((RadioButton) tgTipe.getSelectedToggle()) == rbAmbilDariCheckout) {
  91. boolean notaExists = false;
  92. try {
  93. switch (tfAmbilDariCheckout.getText().charAt(0)) {
  94. case Fucout.KODE_NOTA_BON:
  95. break;
  96. case Fucout.KODE_NOTA_BAWA:
  97. break;
  98. case Fucout.KODE_NOTA_RETUR:
  99. Observable<MNotaRetur> mNotaReturObservable
  100. = posRx.getMNotaReturByNoNota(tfAmbilDariCheckout.getText());
  101. MNotaRetur resultMNotaRetur
  102. = mNotaReturObservable.blockingFirst();
  103. if (resultMNotaRetur != null) {
  104. notaExists = true;
  105. }
  106. break;
  107. default:
  108. Observable<MNotaTunai> mNotaTunaiObservable
  109. = posRx.getMNotaTunaiByNoNota(tfAmbilDariCheckout.getText());
  110. MNotaTunai resultMNotaTunai
  111. = mNotaTunaiObservable.blockingFirst();
  112. if (resultMNotaTunai != null) {
  113. notaExists = true;
  114. }
  115. break;
  116. }
  117. } catch (HttpException he) {
  118. switch (he.code()) {
  119. case HttpURLConnection.HTTP_NOT_FOUND:
  120. Alert alert = AlertUtil.getAlertError(
  121. AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
  122. "Data nota dengan nomor tersebut tidak ditemukan");
  123. alert.initOwner(apTambahNota.getScene().getWindow());
  124. alert.initModality(Modality.APPLICATION_MODAL);
  125. alert.show();
  126. break;
  127. default:
  128. Logger.getLogger(DialogTambahNotaController.class.getName()).log(Level.SEVERE, null, he);
  129. }
  130. } catch (Exception error) {
  131. AmigoPosRx.handleGenericError(error, apTambahNota.getScene().getWindow());
  132. }
  133. if (!notaExists) {
  134. event.consume();
  135. }
  136. }
  137. });
  138. setResultConverter(buttonType -> {
  139. if (buttonType == btnLanjutkan) {
  140. //radio button mana yang dipilih
  141. if (((RadioButton) tgTipe.getSelectedToggle()) == rbBaru) {
  142. return "Baru:" + cbxPilihNota.getValue();
  143. } else if (((RadioButton) tgTipe.getSelectedToggle()) == rbAmbilDariCheckout) {
  144. return "Checkout:" + tfAmbilDariCheckout.getText();
  145. }
  146. }
  147. return "Batal";
  148. });
  149. setTitle("Tambah Nota");
  150. } catch (IOException ex) {
  151. Logger.getLogger(DialogKonfirmasiReturController.class.getName()).log(Level.SEVERE, null, ex);
  152. }
  153. }
  154. }