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.

576 lines
23 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 com.fasterxml.jackson.databind.JsonNode;
  8. import com.fasterxml.jackson.databind.ObjectMapper;
  9. import com.fasterxml.jackson.databind.node.ObjectNode;
  10. import id.amigogroup.posterminal.SystemValue;
  11. import id.amigogroup.posterminal.api.AmigoPosRx;
  12. import id.amigogroup.posterminal.model.Barang;
  13. import id.amigogroup.posterminal.model.DNotaRetur;
  14. import id.amigogroup.posterminal.model.DNotaTunai;
  15. import id.amigogroup.posterminal.util.AmigoPosCache;
  16. import id.amigogroup.posterminal.util.AlertUtil;
  17. import id.amigogroup.posterminal.util.ButtonUtility;
  18. import id.amigogroup.posterminal.util.Fucout;
  19. import io.reactivex.Observer;
  20. import io.reactivex.disposables.Disposable;
  21. import java.net.HttpURLConnection;
  22. import java.net.URL;
  23. import java.util.List;
  24. import java.util.ResourceBundle;
  25. import javafx.application.Platform;
  26. import javafx.beans.property.ReadOnlyObjectWrapper;
  27. import javafx.collections.FXCollections;
  28. import javafx.collections.ObservableList;
  29. import javafx.fxml.FXML;
  30. import javafx.fxml.Initializable;
  31. import javafx.scene.control.Alert;
  32. import javafx.scene.control.Button;
  33. import javafx.scene.control.Label;
  34. import javafx.scene.control.TableColumn;
  35. import javafx.scene.control.TableView;
  36. import javafx.scene.control.TextField;
  37. import javafx.scene.control.cell.PropertyValueFactory;
  38. import javafx.scene.input.ClipboardContent;
  39. import javafx.scene.input.DragEvent;
  40. import javafx.scene.input.Dragboard;
  41. import javafx.scene.input.KeyCode;
  42. import javafx.scene.input.KeyEvent;
  43. import javafx.scene.input.MouseEvent;
  44. import javafx.scene.input.TransferMode;
  45. import javafx.scene.layout.AnchorPane;
  46. import javafx.scene.layout.StackPane;
  47. import retrofit2.HttpException;
  48. /**
  49. * FXML Controller class
  50. *
  51. * @author ronal
  52. */
  53. public class FormTransaksiReturController implements Initializable {
  54. @FXML
  55. private AnchorPane apMain;
  56. @FXML
  57. private TextField fldNotaPenjualan;
  58. @FXML
  59. private TableView<TabelBarangTunai> tbvPenjualan;
  60. @FXML
  61. private TableColumn<TabelBarangTunai, Integer> tcNo;
  62. @FXML
  63. private TableColumn<TabelBarangTunai, String> tcKode;
  64. @FXML
  65. private TableColumn<TabelBarangTunai, String> tcNama;
  66. @FXML
  67. private TableColumn<TabelBarangTunai, String> tcUkur;
  68. @FXML
  69. private TableColumn<TabelBarangTunai, String> tcJumlah;
  70. @FXML
  71. private TableColumn<TabelBarangTunai, String> tcHarga;
  72. @FXML
  73. private TableColumn<TabelBarangTunai, String> tcDisc1;
  74. @FXML
  75. private TableColumn<TabelBarangTunai, String> tcDisc2;
  76. @FXML
  77. private TableColumn<TabelBarangTunai, String> tcSubTotal;
  78. @FXML
  79. private TableColumn<TabelBarangTunai, TextField> tcPramuniaga;
  80. @FXML
  81. private Label lblNomorNota;
  82. @FXML
  83. private Label lblKasir;
  84. @FXML
  85. private TableView<TabelBarangRetur> tbvRetur;
  86. @FXML
  87. private TableColumn<TabelBarangRetur, Integer> tcNoRetur;
  88. @FXML
  89. private TableColumn<TabelBarangRetur, String> tcKodeRetur;
  90. @FXML
  91. private TableColumn<TabelBarangRetur, String> tcNamaRetur;
  92. @FXML
  93. private TableColumn<TabelBarangRetur, String> tcUkurRetur;
  94. @FXML
  95. private TableColumn<TabelBarangRetur, String> tcJumlahRetur;
  96. @FXML
  97. private TableColumn<TabelBarangRetur, String> tcHargaRetur;
  98. @FXML
  99. private TableColumn<TabelBarangRetur, String> tcDisc1Retur;
  100. @FXML
  101. private TableColumn<TabelBarangRetur, String> tcDisc2Retur;
  102. @FXML
  103. private TableColumn<TabelBarangRetur, String> tcSubTotalRetur;
  104. @FXML
  105. private TableColumn<TabelBarangRetur, TextField> tcPramuniagaRetur;
  106. @FXML
  107. private TableColumn<TabelBarangRetur, Button> tcBtnBatal;
  108. @FXML
  109. private StackPane stpReturDrop;
  110. @FXML
  111. private Label lblTambahKeTabelRetur;
  112. private final AmigoPosRx posRx = new AmigoPosRx();
  113. private String noNota = "";
  114. private final ObservableList<TabelBarangTunai> daftarTabelPenjualan = FXCollections.observableArrayList();
  115. public final ObservableList<TabelBarangRetur> daftarTabelRetur = FXCollections.observableArrayList();
  116. private TabelBarangTunai draggedTabelBarangTunai = null;
  117. /**
  118. * Initializes the controller class.
  119. */
  120. @Override
  121. public void initialize(URL url, ResourceBundle rb) {
  122. tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangTunai, Integer> cell) -> {
  123. return new ReadOnlyObjectWrapper(tbvPenjualan.getItems().indexOf(cell.getValue()) + 1);
  124. });
  125. tcKode.setCellValueFactory(new PropertyValueFactory<>("kode"));
  126. tcNama.setCellValueFactory(new PropertyValueFactory<>("nama"));
  127. tcUkur.setCellValueFactory(new PropertyValueFactory<>("ukur"));
  128. tcJumlah.setCellValueFactory(new PropertyValueFactory<>("jumlah"));
  129. tcHarga.setCellValueFactory(new PropertyValueFactory<>("harga"));
  130. tcDisc1.setCellValueFactory(new PropertyValueFactory<>("disc1"));
  131. tcDisc2.setCellValueFactory(new PropertyValueFactory<>("disc2"));
  132. tcSubTotal.setCellValueFactory(new PropertyValueFactory<>("subTotal"));
  133. tcPramuniaga.setCellValueFactory(new PropertyValueFactory<>("fldPramuniaga"));
  134. // tcBtnBatal.setCellValueFactory(new PropertyValueFactory<>("btnBatal"));
  135. tbvPenjualan.setItems(daftarTabelPenjualan);
  136. tcNoRetur.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangRetur, Integer> cell) -> {
  137. return new ReadOnlyObjectWrapper(tbvRetur.getItems().indexOf(cell.getValue()) + 1);
  138. });
  139. tcKodeRetur.setCellValueFactory(new PropertyValueFactory<>("kode"));
  140. tcNamaRetur.setCellValueFactory(new PropertyValueFactory<>("nama"));
  141. tcUkurRetur.setCellValueFactory(new PropertyValueFactory<>("ukur"));
  142. tcJumlahRetur.setCellValueFactory(new PropertyValueFactory<>("jumlah"));
  143. tcHargaRetur.setCellValueFactory(new PropertyValueFactory<>("harga"));
  144. tcDisc1Retur.setCellValueFactory(new PropertyValueFactory<>("disc1"));
  145. tcDisc2Retur.setCellValueFactory(new PropertyValueFactory<>("disc2"));
  146. tcSubTotalRetur.setCellValueFactory(new PropertyValueFactory<>("subTotal"));
  147. tcPramuniagaRetur.setCellValueFactory(new PropertyValueFactory<>("fldPramuniaga"));
  148. tbvRetur.setItems(daftarTabelRetur);
  149. Platform.runLater(() -> {
  150. fldNotaPenjualan.requestFocus();
  151. });
  152. }
  153. public void initData(String noNota, boolean baru) {
  154. this.noNota = noNota;
  155. if (!baru) {
  156. posRx.getDNotaReturByNoNota(noNota).subscribe(getDaftarDNotaReturObserver);
  157. }
  158. if (SystemValue.karyawanLogin != null) {
  159. lblKasir.setText(Fucout.getTextColon(SystemValue.karyawanLogin.getNama()));
  160. }
  161. lblNomorNota.setText(Fucout.getTextColon(noNota));
  162. }
  163. private void refreshDataPenjualan(List<DNotaTunai> daftarNotaTunai) {
  164. daftarTabelPenjualan.clear();
  165. for (DNotaTunai dNotaTunai : daftarNotaTunai) {
  166. //Button
  167. Button btnBatal = ButtonUtility.generateButton(ButtonUtility.CLOSE_ICON);
  168. btnBatal.setOnAction((t) -> {
  169. Alert alert = AlertUtil.getAlertDialogKonfirmasi(
  170. AlertUtil.DIALOG_KONFIRMASI_MESSAGE,
  171. "Yakin ingin menghapus barang?");
  172. alert.initOwner(apMain.getScene().getWindow());
  173. alert.show();
  174. });
  175. TextField fldPramuniaga = new TextField(dNotaTunai.getKodePram());
  176. String namaBarang = "...";
  177. if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
  178. Barang barang = AmigoPosCache.getInstance().getDaftarBarang()
  179. .get(dNotaTunai.getKdBarang());
  180. namaBarang = Fucout.getText(barang.getNamaBarang());
  181. dNotaTunai.setBarang(barang);
  182. }
  183. TabelBarangTunai tbt = new TabelBarangTunai(
  184. Fucout.getText(dNotaTunai.getKdBarang()),
  185. namaBarang,
  186. Fucout.getText(dNotaTunai.getNoBarang()),
  187. Fucout.getText(String.valueOf(dNotaTunai.getJumlah())),
  188. Fucout.getText(Fucout.formatRibuan(dNotaTunai.getHargaJual())),
  189. Fucout.getText(Fucout.formatPersentase(dNotaTunai.getDiskon())),
  190. Fucout.getText(Fucout.formatPersentase(dNotaTunai.getDiskon2())),
  191. null,
  192. Fucout.getText(Fucout.formatRibuan(
  193. dNotaTunai.getHargaJual() * dNotaTunai.getJumlah()
  194. )),
  195. fldPramuniaga,
  196. btnBatal);
  197. tbt.setData(dNotaTunai);
  198. daftarTabelPenjualan.add(tbt);
  199. if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
  200. posRx.getBarangByKodeBarang(dNotaTunai.getKdBarang()).subscribe(getBarangPenjualanObserver);
  201. }
  202. }
  203. }
  204. private void refreshDataRetur(List<DNotaRetur> daftarDNotaRetur) {
  205. daftarTabelRetur.clear();
  206. for(DNotaRetur dNotaRetur : daftarDNotaRetur){
  207. //Button
  208. TextField fldPramuniaga = new TextField(dNotaRetur.getKodePram());
  209. String namaBarang = "...";
  210. if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaRetur.getKdBarang())) {
  211. Barang barang = AmigoPosCache.getInstance().getDaftarBarang()
  212. .get(dNotaRetur.getKdBarang());
  213. namaBarang = Fucout.getText(barang.getNamaBarang());
  214. dNotaRetur.setBarang(barang);
  215. }
  216. TabelBarangRetur tbr = new TabelBarangRetur(
  217. Fucout.getText(dNotaRetur.getKdBarang()),
  218. namaBarang,
  219. Fucout.getText(dNotaRetur.getNoBarang()),
  220. Fucout.getText(String.valueOf(dNotaRetur.getJumlah())),
  221. Fucout.getText(Fucout.formatRibuan(dNotaRetur.getHargaJual())),
  222. Fucout.getText(Fucout.formatPersentase(dNotaRetur.getDiskon())),
  223. Fucout.getText(Fucout.formatPersentase(dNotaRetur.getDiskon2())),
  224. Fucout.getText(Fucout.formatRibuan(
  225. dNotaRetur.getHargaJual() * dNotaRetur.getJumlah()
  226. )),
  227. fldPramuniaga);
  228. tbr.setData(dNotaRetur);
  229. daftarTabelRetur.add(tbr);
  230. if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaRetur.getKdBarang())) {
  231. posRx.getBarangByKodeBarang(dNotaRetur.getKdBarang()).subscribe(getBarangReturObserver);
  232. }
  233. }
  234. }
  235. @FXML
  236. void fldNotaPenjualanOnKeyPressed(KeyEvent event) {
  237. if (event.getCode() == KeyCode.ENTER) {
  238. Disposable disposable = posRx.validasiMNotaTunaiByNoNotaTanggal(fldNotaPenjualan.getText())
  239. .subscribe((response) -> {
  240. ObjectMapper mapper = new ObjectMapper();
  241. JsonNode jsonNode = mapper.readTree(response.string());
  242. ObjectNode node = jsonNode.deepCopy();
  243. if (node.get("result") != null && node.get("result").asBoolean()) {
  244. posRx.getDNotaTunaiByNoNota(fldNotaPenjualan.getText()).subscribe(getDNotaTunaiObserver);
  245. } else {
  246. Alert alert = AlertUtil.getAlertError(
  247. "Nota Tidak Bisa Digunakan",
  248. node.get("message").asText());
  249. alert.initOwner(apMain.getScene().getWindow());
  250. alert.show();
  251. }
  252. }, (error) -> {
  253. if (error instanceof HttpException) {
  254. switch (((HttpException) error).code()) {
  255. case HttpURLConnection.HTTP_NOT_FOUND:
  256. Platform.runLater(() -> {
  257. Alert alert = AlertUtil.getAlertError(
  258. AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
  259. "Data nota tidak ditemukan.");
  260. alert.initOwner(apMain.getScene().getWindow());
  261. alert.show();
  262. });
  263. }
  264. } else {
  265. AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
  266. }
  267. });
  268. }
  269. }
  270. @FXML
  271. void tbvPenjualanOnDragDetected(MouseEvent event) {
  272. Dragboard db = tbvPenjualan.startDragAndDrop(TransferMode.COPY);
  273. if (tbvPenjualan.getSelectionModel().getSelectedItem() != null) {
  274. stpReturDrop.setVisible(true);
  275. ClipboardContent content = new ClipboardContent();
  276. content.putString(tbvPenjualan.getSelectionModel().getSelectedItem().getNama());
  277. db.setContent(content);
  278. draggedTabelBarangTunai = tbvPenjualan.getSelectionModel().getSelectedItem();
  279. }
  280. event.consume();
  281. }
  282. @FXML
  283. void stpReturDropOnDragOver(DragEvent event) {
  284. if (event.getGestureSource() != tbvRetur
  285. && event.getDragboard().hasString()) {
  286. event.acceptTransferModes(TransferMode.COPY);
  287. }
  288. event.consume();
  289. }
  290. @FXML
  291. void stpReturDropOnDragEntered(DragEvent event) {
  292. if (event.getGestureSource() != stpReturDrop
  293. && event.getDragboard().hasString()) {
  294. lblTambahKeTabelRetur.setText("Tambah Barang " + event.getDragboard().getString() + " ke Nota Retur");
  295. lblTambahKeTabelRetur.setVisible(true);
  296. if (!stpReturDrop.getStyleClass().contains("table-drag-over")) {
  297. stpReturDrop.getStyleClass().add("table-drag-over");
  298. }
  299. }
  300. event.consume();
  301. }
  302. @FXML
  303. void stpReturDropOnDragExited(DragEvent event) {
  304. lblTambahKeTabelRetur.setVisible(false);
  305. if (stpReturDrop.getStyleClass().contains("table-drag-over")) {
  306. lblTambahKeTabelRetur.setText("Tambah Barang ke Nota Retur");
  307. stpReturDrop.getStyleClass().remove("table-drag-over");
  308. }
  309. event.consume();
  310. }
  311. @FXML
  312. void stpReturDropOnDragDropped(DragEvent event) {
  313. /* data dropped
  314. * if there is a string data on dragboard, read it and use it */
  315. Dragboard db = event.getDragboard();
  316. boolean success = false;
  317. if (db.hasString()) {
  318. }
  319. if (draggedTabelBarangTunai != null) {
  320. boolean ada = false;
  321. for (TabelBarangRetur tbr : daftarTabelRetur) {
  322. if (tbr.getData() != null && draggedTabelBarangTunai.getData() != null) {
  323. DNotaRetur dNotaRetur = tbr.getData();
  324. DNotaTunai dNotaTunai = draggedTabelBarangTunai.getData();
  325. if (dNotaRetur.getKdBarang().equals(dNotaTunai.getKdBarang())
  326. && dNotaRetur.getNoBarang().equals(dNotaTunai.getNoBarang())) {
  327. if ((dNotaRetur.getJumlah() + 1) <= dNotaTunai.getJumlah()) {
  328. dNotaRetur.setJumlah(dNotaRetur.getJumlah() + 1);
  329. tbr.setJumlah(Fucout.getText(String.valueOf(dNotaRetur.getJumlah())));
  330. tbr.setSubTotal(Fucout.getText(Fucout.formatRibuan(
  331. dNotaRetur.getJumlah() * dNotaRetur.getHargaJual()
  332. )));
  333. tbvRetur.refresh();
  334. } else {
  335. Alert alert = AlertUtil.getAlertError(
  336. "Jumlah Barang Kurang",
  337. "Barang di Nota Penjualan yang di-Retur sudah mencapai jumlah yang ada.");
  338. alert.initOwner(apMain.getScene().getWindow());
  339. alert.show();
  340. }
  341. ada = true;
  342. break;
  343. }
  344. }
  345. }
  346. success = true;
  347. if (!ada) {
  348. TextField fldPramuniaga = new TextField();
  349. DNotaRetur dNotaRetur = new DNotaRetur(noNota, draggedTabelBarangTunai.getData());
  350. TabelBarangRetur tbr = new TabelBarangRetur(
  351. draggedTabelBarangTunai.getKode(),
  352. draggedTabelBarangTunai.getNama(),
  353. draggedTabelBarangTunai.getUkur(),
  354. Fucout.getText(String.valueOf(dNotaRetur.getJumlah())),
  355. draggedTabelBarangTunai.getHarga(),
  356. draggedTabelBarangTunai.getDisc1(),
  357. draggedTabelBarangTunai.getDisc2(),
  358. Fucout.getText(Fucout.formatRibuan(
  359. dNotaRetur.getJumlah() * dNotaRetur.getHargaJual()
  360. )),
  361. fldPramuniaga);
  362. tbr.setData(dNotaRetur);
  363. daftarTabelRetur.add(tbr);
  364. }
  365. }
  366. /* let the source know whether the string was successfully
  367. * transferred and used */
  368. event.setDropCompleted(success);
  369. event.consume();
  370. }
  371. @FXML
  372. void tbvPenjualanOnDragDone(DragEvent event) {
  373. /* the drag and drop gesture ended
  374. * if the data was successfully moved, clear it */
  375. stpReturDrop.setVisible(false);
  376. // if (event.getTransferMode() == TransferMode.MOVE) {
  377. // }
  378. event.consume();
  379. }
  380. Observer<List<DNotaTunai>> getDNotaTunaiObserver = new Observer<>() {
  381. @Override
  382. public void onSubscribe(Disposable dspsbl) {
  383. }
  384. @Override
  385. public void onNext(List<DNotaTunai> daftarDNotaTunai) {
  386. fldNotaPenjualan.clear();
  387. refreshDataPenjualan(daftarDNotaTunai);
  388. }
  389. @Override
  390. public void onError(Throwable error) {
  391. if (error instanceof HttpException) {
  392. switch (((HttpException) error).code()) {
  393. case HttpURLConnection.HTTP_NOT_FOUND:
  394. Platform.runLater(() -> {
  395. Alert alert = AlertUtil.getAlertError(
  396. AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
  397. "Data nota tidak ditemukan.");
  398. alert.initOwner(apMain.getScene().getWindow());
  399. alert.show();
  400. });
  401. }
  402. } else {
  403. AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
  404. }
  405. }
  406. @Override
  407. public void onComplete() {
  408. }
  409. };
  410. Observer<Barang> getBarangPenjualanObserver = new Observer<>() {
  411. @Override
  412. public void onSubscribe(Disposable dspsbl) {
  413. }
  414. @Override
  415. public void onNext(Barang b) {
  416. AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b);
  417. for (TabelBarangTunai tbt : tbvPenjualan.getItems()) {
  418. if (tbt.getData().getKdBarang().equals(b.getKodeBarang())) {
  419. tbt.setNama(b.getNamaBarang());
  420. tbt.getData().setBarang(b);
  421. tbvPenjualan.refresh();
  422. }
  423. }
  424. }
  425. @Override
  426. public void onError(Throwable error) {
  427. if (error instanceof HttpException) {
  428. switch (((HttpException) error).code()) {
  429. case HttpURLConnection.HTTP_NOT_FOUND:
  430. Platform.runLater(() -> {
  431. Alert alert = AlertUtil.getAlertError(
  432. AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
  433. "Barang dengan kode tersebut tidak ditemukan.");
  434. alert.initOwner(apMain.getScene().getWindow());
  435. alert.show();
  436. });
  437. }
  438. } else {
  439. AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
  440. }
  441. }
  442. @Override
  443. public void onComplete() {
  444. }
  445. };
  446. Observer<List<DNotaRetur>> getDaftarDNotaReturObserver = new Observer<>() {
  447. @Override
  448. public void onSubscribe(Disposable dspsbl) {
  449. }
  450. @Override
  451. public void onNext(List<DNotaRetur> daftarDNotaRetur) {
  452. refreshDataRetur(daftarDNotaRetur);
  453. }
  454. @Override
  455. public void onError(Throwable error) {
  456. if (error instanceof HttpException) {
  457. switch (((HttpException) error).code()) {
  458. case HttpURLConnection.HTTP_NOT_FOUND:
  459. Platform.runLater(() -> {
  460. Alert alert = AlertUtil.getAlertError(
  461. AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
  462. "Barang dengan kode tersebut tidak ditemukan.");
  463. alert.initOwner(apMain.getScene().getWindow());
  464. alert.show();
  465. });
  466. }
  467. } else {
  468. AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
  469. }
  470. }
  471. @Override
  472. public void onComplete() {
  473. }
  474. };
  475. Observer<Barang> getBarangReturObserver = new Observer<>() {
  476. @Override
  477. public void onSubscribe(Disposable dspsbl) {
  478. }
  479. @Override
  480. public void onNext(Barang b) {
  481. AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b);
  482. for (TabelBarangRetur tbr : tbvRetur.getItems()) {
  483. if (tbr.getData().getKdBarang().equals(b.getKodeBarang())) {
  484. tbr.setNama(b.getNamaBarang());
  485. tbr.getData().setBarang(b);
  486. tbvRetur.refresh();
  487. }
  488. }
  489. }
  490. @Override
  491. public void onError(Throwable error) {
  492. if (error instanceof HttpException) {
  493. switch (((HttpException) error).code()) {
  494. case HttpURLConnection.HTTP_NOT_FOUND:
  495. Platform.runLater(() -> {
  496. Alert alert = AlertUtil.getAlertError(
  497. AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
  498. "Barang dengan kode tersebut tidak ditemukan.");
  499. alert.initOwner(apMain.getScene().getWindow());
  500. alert.show();
  501. });
  502. }
  503. } else {
  504. AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
  505. }
  506. }
  507. @Override
  508. public void onComplete() {
  509. }
  510. };
  511. }