Aplikasi POS Amigo, dibangun dengan JavaFX dengan Maven
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

238 lines
8.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.pencarian;
  7. import id.amigogroup.posterminal.FormUtamaController;
  8. import id.amigogroup.posterminal.api.AmigoPosRx;
  9. import id.amigogroup.posterminal.model.Pagination;
  10. import id.amigogroup.posterminal.model.Pelanggan;
  11. import id.amigogroup.posterminal.util.AlertUtil;
  12. import io.reactivex.Observer;
  13. import io.reactivex.disposables.Disposable;
  14. import java.io.IOException;
  15. import java.net.HttpURLConnection;
  16. import java.net.URL;
  17. import java.util.List;
  18. import java.util.ResourceBundle;
  19. import java.util.logging.Level;
  20. import java.util.logging.Logger;
  21. import javafx.application.Platform;
  22. import javafx.beans.property.ReadOnlyObjectWrapper;
  23. import javafx.collections.FXCollections;
  24. import javafx.collections.ObservableList;
  25. import javafx.fxml.FXML;
  26. import javafx.fxml.FXMLLoader;
  27. import javafx.fxml.Initializable;
  28. import javafx.scene.Parent;
  29. import javafx.scene.control.Alert;
  30. import javafx.scene.control.ButtonBar.ButtonData;
  31. import javafx.scene.control.ButtonType;
  32. import javafx.scene.control.Dialog;
  33. import javafx.scene.control.RadioButton;
  34. import javafx.scene.control.TableColumn;
  35. import javafx.scene.control.TableView;
  36. import javafx.scene.control.TextField;
  37. import javafx.scene.control.ToggleGroup;
  38. import javafx.scene.control.cell.PropertyValueFactory;
  39. import javafx.scene.input.KeyCode;
  40. import javafx.scene.input.KeyEvent;
  41. import javafx.scene.layout.AnchorPane;
  42. import javafx.stage.Window;
  43. import retrofit2.HttpException;
  44. /**
  45. * FXML Controller class
  46. *
  47. * @author ronal
  48. */
  49. public class DialogCariPelangganController extends Dialog<Pelanggan> implements Initializable {
  50. @FXML
  51. AnchorPane apContent;
  52. @FXML
  53. private TextField tfPencarian;
  54. @FXML
  55. private ToggleGroup tgTipe;
  56. @FXML
  57. private RadioButton rbMember;
  58. @FXML
  59. private RadioButton rbNama;
  60. @FXML
  61. private RadioButton rbNoTelpNoHp;
  62. @FXML
  63. private TableView<TabelPelanggan> tbvPelanggan;
  64. @FXML
  65. private TableColumn<TabelPelanggan, Integer> tcNo;
  66. @FXML
  67. private TableColumn<TabelPelanggan, String> tcKode;
  68. @FXML
  69. private TableColumn<TabelPelanggan, String> tcNama;
  70. @FXML
  71. private TableColumn<TabelPelanggan, String> tcAlamat;
  72. @FXML
  73. private TableColumn<TabelPelanggan, String> tcNoTelp;
  74. @FXML
  75. private TableColumn<TabelPelanggan, String> tcUpline;
  76. final ObservableList<TabelPelanggan> daftarTabelPelanggan = FXCollections.observableArrayList();
  77. AmigoPosRx posRx = new AmigoPosRx();
  78. private Pelanggan pelanggan = null;
  79. /**
  80. * Initializes the controller class.
  81. */
  82. @Override
  83. public void initialize(URL url, ResourceBundle rb) {
  84. Platform.runLater(() -> {
  85. tfPencarian.requestFocus();
  86. });
  87. getDialogPane().getButtonTypes().add(new ButtonType("Tutup", ButtonData.CANCEL_CLOSE));
  88. tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelPelanggan, Integer> cell) -> {
  89. return new ReadOnlyObjectWrapper(tbvPelanggan.getItems().indexOf(cell.getValue()) + 1);
  90. });
  91. tcKode.setCellValueFactory(new PropertyValueFactory<>("kode"));
  92. tcNama.setCellValueFactory(new PropertyValueFactory<>("nama"));
  93. tcAlamat.setCellValueFactory(new PropertyValueFactory<>("alamat"));
  94. tcNoTelp.setCellValueFactory(new PropertyValueFactory<>("noTelp"));
  95. tcUpline.setCellValueFactory(new PropertyValueFactory<>("upline"));
  96. tbvPelanggan.setItems(daftarTabelPelanggan);
  97. }
  98. public DialogCariPelangganController(/*FormPresensiController parent*/) {
  99. try {
  100. Window window = getDialogPane().getScene().getWindow();
  101. window.setOnCloseRequest(event -> this.close());
  102. FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogCariPelanggan.fxml"));
  103. loader.setController(this);
  104. // DialogCariBarangController controller = loader.<DialogCariBarangController>getController();
  105. Parent root = loader.load();
  106. getDialogPane().setContent(root);
  107. setTitle("Cari Pelanggan");
  108. // getDialogPane().getButtonTypes().add(ButtonType.CANCEL);
  109. setResultConverter(buttonType -> {
  110. return pelanggan;
  111. });
  112. } catch (IOException e) {
  113. Logger.getLogger(DialogCariBarangController.class
  114. .getName()).log(Level.SEVERE, null, e);
  115. }
  116. }
  117. public void fillTable() {
  118. // Button btnTambah = new Button("Tambah");
  119. // btnTambah.setOnAction((event) -> {
  120. // setResult("Pak Coba");
  121. // this.close();
  122. // });
  123. }
  124. public void updateTabelPelanggan(List<Pelanggan> daftarPelanggan) {
  125. daftarTabelPelanggan.clear();
  126. for (Pelanggan pelanggan : daftarPelanggan) {
  127. daftarTabelPelanggan.add(new TabelPelanggan(
  128. pelanggan.getAlias(),
  129. pelanggan.getNama(),
  130. pelanggan.getAlamat(),
  131. pelanggan.getTelp() + " / " + pelanggan.getPonsel(),
  132. pelanggan.getUpline()));
  133. }
  134. }
  135. @FXML
  136. void tfPencarianOnKeyReleased(KeyEvent event) {
  137. if (((RadioButton) tgTipe.getSelectedToggle()) == rbMember
  138. && event.getCode() == KeyCode.ENTER) {
  139. System.out.println("MASUK DONGssssssss");
  140. posRx.getPelangganByKodeMember(tfPencarian.getText()).subscribe(pelangganMemberObserver);
  141. } else if (((RadioButton) tgTipe.getSelectedToggle()) == rbNama
  142. && tfPencarian.getText().length() >= 3) {
  143. posRx.getPelangganByNama(tfPencarian.getText()).subscribe(daftarPelangganObserver);
  144. } else if (((RadioButton) tgTipe.getSelectedToggle()) == rbNoTelpNoHp
  145. && tfPencarian.getText().length() >= 3) {
  146. posRx.getPelangganByNoTelpNoHp(tfPencarian.getText()).subscribe(daftarPelangganObserver);
  147. }
  148. }
  149. public Observer<Pelanggan> pelangganMemberObserver = new Observer<Pelanggan>() {
  150. @Override
  151. public void onSubscribe(Disposable dspsbl) {
  152. }
  153. @Override
  154. public void onNext(Pelanggan p) {
  155. System.out.println("COBA AJA");
  156. if (p != null) {
  157. pelanggan = p;
  158. close();
  159. }
  160. }
  161. @Override
  162. public void onError(Throwable error) {
  163. if (error instanceof HttpException) {
  164. switch (((HttpException) error).code()) {
  165. case HttpURLConnection.HTTP_NOT_FOUND:
  166. Alert alert = AlertUtil.getAlertError(
  167. AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
  168. "Pelanggan dengan kode member tersebut tidak ditemukan.");
  169. alert.initOwner(apContent.getScene().getWindow());
  170. alert.show();
  171. }
  172. } else {
  173. Alert alert = AlertUtil.getAlertError(
  174. AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
  175. "Terjadi kesalahan yang tidak terduga.");
  176. alert.initOwner(apContent.getScene().getWindow());
  177. alert.show();
  178. Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, error);
  179. }
  180. }
  181. @Override
  182. public void onComplete() {
  183. }
  184. };
  185. public Observer<Pagination<Pelanggan>> daftarPelangganObserver = new Observer<Pagination<Pelanggan>>() {
  186. @Override
  187. public void onSubscribe(Disposable dspsbl) {
  188. }
  189. @Override
  190. public void onNext(Pagination<Pelanggan> p) {
  191. if (p != null) {
  192. updateTabelPelanggan(p.getData());
  193. }
  194. }
  195. @Override
  196. public void onError(Throwable error) {
  197. if (error instanceof HttpException) {
  198. switch (((HttpException) error).code()) {
  199. case HttpURLConnection.HTTP_NOT_FOUND:
  200. Alert alert = AlertUtil.getAlertError(
  201. AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
  202. "Pelanggan dengan kode member tersebut tidak ditemukan.");
  203. alert.initOwner(apContent.getScene().getWindow());
  204. alert.show();
  205. }
  206. } else {
  207. Alert alert = AlertUtil.getAlertError(
  208. AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
  209. "Terjadi kesalahan yang tidak terduga.");
  210. alert.initOwner(apContent.getScene().getWindow());
  211. alert.show();
  212. Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, error);
  213. }
  214. }
  215. @Override
  216. public void onComplete() {
  217. }
  218. };
  219. }