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.

794 line
29 KiB

  1. package id.amigogroup.posterminal;
  2. import id.amigogroup.posterminal.api.AmigoPosRx;
  3. import id.amigogroup.posterminal.model.KonversiPoin;
  4. import id.amigogroup.posterminal.model.Pelanggan;
  5. import id.amigogroup.posterminal.pencarian.DialogCariBarangController;
  6. import id.amigogroup.posterminal.pencarian.DialogCariNotaTundaController;
  7. import id.amigogroup.posterminal.pencarian.DialogCariPelangganController;
  8. import id.amigogroup.posterminal.pencarian.DialogCetakNotaController;
  9. import id.amigogroup.posterminal.pencarian.DialogCetakUlangNotaController;
  10. import id.amigogroup.posterminal.transaksi.BarangFull;
  11. import id.amigogroup.posterminal.transaksi.DialogKonfirmasiReturController;
  12. import id.amigogroup.posterminal.transaksi.DialogTambahNotaController;
  13. import id.amigogroup.posterminal.transaksi.FormTransaksiReturController;
  14. import id.amigogroup.posterminal.transaksi.FormTransaksiTunaiController;
  15. import id.amigogroup.posterminal.util.AlertUtil;
  16. import id.amigogroup.posterminal.util.Fucout;
  17. import io.reactivex.Observer;
  18. import io.reactivex.disposables.Disposable;
  19. import java.io.IOException;
  20. import java.net.HttpURLConnection;
  21. import java.net.URL;
  22. import java.util.ArrayList;
  23. import java.util.HashMap;
  24. import java.util.List;
  25. import java.util.Map;
  26. import java.util.Optional;
  27. import java.util.ResourceBundle;
  28. import java.util.logging.Level;
  29. import java.util.logging.Logger;
  30. import javafx.application.Platform;
  31. import javafx.event.ActionEvent;
  32. import javafx.fxml.FXML;
  33. import javafx.fxml.FXMLLoader;
  34. import javafx.fxml.Initializable;
  35. import javafx.scene.Node;
  36. import javafx.scene.Parent;
  37. import javafx.scene.Scene;
  38. import javafx.scene.control.Alert;
  39. import javafx.scene.control.Button;
  40. import javafx.scene.control.Label;
  41. import javafx.scene.control.ScrollPane;
  42. import javafx.scene.control.TextField;
  43. import javafx.scene.image.Image;
  44. import javafx.scene.input.KeyCode;
  45. import javafx.scene.input.KeyCodeCombination;
  46. import javafx.scene.input.KeyCombination;
  47. import javafx.scene.input.KeyEvent;
  48. import javafx.scene.layout.BorderPane;
  49. import javafx.scene.layout.VBox;
  50. import javafx.stage.Stage;
  51. import javafx.stage.Window;
  52. import retrofit2.HttpException;
  53. public class FormUtamaController implements Initializable {
  54. @FXML
  55. private BorderPane bpMain;
  56. @FXML
  57. private ScrollPane spMainContent;
  58. @FXML
  59. private ScrollPane spNavigasi;
  60. @FXML
  61. private VBox vbNavigasi;
  62. @FXML
  63. private Button btnTambahNota;
  64. @FXML
  65. private Label lblNamaLogin;
  66. @FXML
  67. private Label lblMemberNonMember;
  68. @FXML
  69. private Label lblKodePelanggan;
  70. @FXML
  71. private Label lblNamaPelanggan;
  72. @FXML
  73. private Label lblTglLahirPelanggan;
  74. @FXML
  75. private Label lblNoTelpPelanggan;
  76. @FXML
  77. private TextField tfScanMember;
  78. private final FormFactory formFactory = new FormFactory();
  79. private final List<Button> navigasi = new ArrayList<>();
  80. private int notaState = -1;
  81. private String tipeTransaksiState = "";
  82. private final char NOTA_PREV = 'p';
  83. private final char NOTA_NEXT = 'n';
  84. public final NotaContent notaContent = new NotaContent();
  85. private final AmigoPosRx posRx = new AmigoPosRx();
  86. /**
  87. * Initializes the controller class.
  88. */
  89. @Override
  90. public void initialize(URL url, ResourceBundle rb) {
  91. //Kode Sri Sumarmi (i140411), Nur Indah Suciati (00334), Kode Wuryaningsih/RT (010004)
  92. updateLabelMemberNonMember();
  93. if (SystemValue.karyawanLogin != null) {
  94. lblNamaLogin.setText(Fucout.getTextColon(SystemValue.karyawanLogin.getNama()));
  95. }
  96. if (SystemValue.konversiPoin == null) {
  97. posRx.getNilaiKonversiPoin().subscribe(getNilaiKonversiPoin);
  98. }
  99. initShorcuts();
  100. }
  101. private void updateLabelPelanggan(Pelanggan p) {
  102. updateLabelMemberNonMember();
  103. if (Fucout.checkBirthday(p.getTglLahir())) {
  104. Alert alertUltah = AlertUtil.getAlertUlangTahun(p.getNama());
  105. alertUltah.initOwner(bpMain.getScene().getWindow());
  106. alertUltah.show();
  107. }
  108. lblKodePelanggan.setText(Fucout.getTextColon(p.getAlias()));
  109. lblNamaPelanggan.setText(Fucout.getTextColon(p.getNama()));
  110. lblTglLahirPelanggan.setText(Fucout.getTextColon(Fucout.formatTanggal(p.getTglLahir())));
  111. lblNoTelpPelanggan.setText(Fucout.getTextColon(
  112. !p.getTelp().equals("") && !p.getPonsel().equals("")
  113. ? p.getTelp() + System.lineSeparator() + p.getPonsel() : p.getTelp() + p.getPonsel()));
  114. }
  115. private void updateLabelMemberNonMember() {
  116. if (SystemValue.isMember) {
  117. lblMemberNonMember.setText("Member");
  118. } else {
  119. lblMemberNonMember.setText("Non Member");
  120. }
  121. }
  122. private void updateSelectedNota(ActionEvent event) {
  123. Button buttonSource = (Button) event.getSource();
  124. notaState = navigasi.indexOf(buttonSource);
  125. Fucout.scrollToNode(spNavigasi, buttonSource);
  126. for (Button button : navigasi) {
  127. if (button.equals(buttonSource)) {
  128. if (!button.getStyleClass().contains("button-navigasi-transaksi-selected")) {
  129. button.getStyleClass().add("button-navigasi-transaksi-selected");
  130. }
  131. } else {
  132. if (button.getStyleClass().contains("button-navigasi-transaksi-selected")) {
  133. button.getStyleClass().remove("button-navigasi-transaksi-selected");
  134. }
  135. }
  136. }
  137. // fldScan.requestFocus();
  138. }
  139. private Button generateButtonNota(String noNota, String tipeNota, String tipeTeks, boolean baru) {
  140. Button button = new Button(tipeTeks + ": " + noNota);
  141. button.getStyleClass().add("button-navigasi-transaksi");
  142. button.setMaxWidth(Double.MAX_VALUE);
  143. button.setOnAction((event) -> {
  144. setContent(loadNota(noNota, tipeNota, baru));
  145. tipeTransaksiState = tipeNota;
  146. updateSelectedNota(event);
  147. });
  148. return button;
  149. }
  150. private Node loadNota(String noNota, String tipe, boolean baru) {
  151. Node node = null;
  152. FXMLLoader loader = new FXMLLoader();
  153. try {
  154. resetShortcutToDefault();
  155. switch (tipe) {
  156. case FormConstanta.TRANSAKSI_TUNAI:
  157. if (notaContent.nodeTunai != null) {
  158. node = notaContent.nodeTunai;
  159. notaContent.controllerTunai.initShortcuts();
  160. } else {
  161. loader.setLocation(getClass().getResource("/fxml/FormTransaksiTunai.fxml"));
  162. node = loader.load();
  163. notaContent.nodeTunai = node;
  164. FormTransaksiTunaiController fttc = loader.getController();
  165. notaContent.setControllerTunai(fttc);
  166. fttc.initData(this, noNota, baru);
  167. }
  168. break;
  169. case FormConstanta.TRANSAKSI_RETUR:
  170. if (notaContent.getNodeRetur() != null) {
  171. node = notaContent.getNodeRetur();
  172. } else {
  173. loader.setLocation(getClass().getResource("/fxml/FormTransaksiRetur.fxml"));
  174. node = loader.load();
  175. notaContent.setNodeRetur(node);
  176. FormTransaksiReturController ftrc = loader.getController();
  177. notaContent.setControllerRetur(ftrc);
  178. ftrc.initData(noNota, baru);
  179. }
  180. break;
  181. }
  182. } catch (IOException ex) {
  183. Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, ex);
  184. }
  185. return node;
  186. }
  187. private void loadNota(char operasi) {
  188. int jumlahNota = navigasi.size();
  189. switch (operasi) {
  190. case NOTA_PREV:
  191. if (notaState == -1) {
  192. notaState = jumlahNota - 1;
  193. } else {
  194. notaState--;
  195. if (notaState < 0) {
  196. notaState = jumlahNota - 1;
  197. }
  198. }
  199. break;
  200. case NOTA_NEXT:
  201. if (notaState == -1) {
  202. notaState = 0;
  203. } else {
  204. notaState++;
  205. if (notaState >= jumlahNota) {
  206. notaState = 0;
  207. }
  208. }
  209. break;
  210. }
  211. if (notaState >= 0 && notaState < jumlahNota) {
  212. navigasi.get(notaState).fire();
  213. }
  214. }
  215. private void openCetakNota() {
  216. DialogCetakNotaController dialogCetakNotaController = new DialogCetakNotaController();
  217. dialogCetakNotaController.initOwner(bpMain.getScene().getWindow());
  218. dialogCetakNotaController.initData(
  219. notaContent.controllerTunai != null ? notaContent.controllerTunai.daftarTabelTransaksi : null,
  220. notaContent.controllerRetur != null ? notaContent.controllerRetur.daftarTabelRetur : null);
  221. Optional<String> result = dialogCetakNotaController.showAndWait();
  222. }
  223. private void resetShortcutToDefault() {
  224. Map<KeyCombination, Runnable> listShortcuts = new HashMap<>();
  225. KeyCombination kcCetakNota = new KeyCodeCombination(KeyCode.F10);
  226. Runnable rnCetakNota = () -> {
  227. openCetakNota();
  228. };
  229. listShortcuts.put(kcCetakNota, rnCetakNota);
  230. KeyCombination kcTundaNota = new KeyCodeCombination(KeyCode.T, KeyCombination.CONTROL_DOWN);
  231. Runnable rnTundaNota = () -> {
  232. //do nothing
  233. };
  234. listShortcuts.put(kcTundaNota, rnTundaNota);
  235. bpMain.getScene().getAccelerators().putAll(listShortcuts);
  236. }
  237. private void initShorcuts() {
  238. Map<KeyCombination, Runnable> listShortcuts = new HashMap<>();
  239. KeyCombination kcPrevNota = new KeyCodeCombination(KeyCode.F1);
  240. Runnable rnPrevNota = () -> {
  241. loadNota(NOTA_PREV);
  242. };
  243. listShortcuts.put(kcPrevNota, rnPrevNota);
  244. KeyCombination kcNextNota = new KeyCodeCombination(KeyCode.F2);
  245. Runnable rnNextNota = () -> {
  246. loadNota(NOTA_NEXT);
  247. };
  248. listShortcuts.put(kcNextNota, rnNextNota);
  249. KeyCombination kcTambah = new KeyCodeCombination(KeyCode.F3);
  250. Runnable rnTambah = () -> {
  251. btnTambahNota.fire();
  252. };
  253. listShortcuts.put(kcTambah, rnTambah);
  254. KeyCombination kcCariBarang = new KeyCodeCombination(KeyCode.F5);
  255. Runnable rnCariBarang = () -> {
  256. DialogCariBarangController dialogCariBarang = new DialogCariBarangController();
  257. dialogCariBarang.initOwner(bpMain.getScene().getWindow());
  258. Optional<BarangFull> result = dialogCariBarang.showAndWait();
  259. if (result.isPresent()) {
  260. BarangFull barangFull = result.get();
  261. switch (tipeTransaksiState) {
  262. case FormConstanta.TRANSAKSI_TUNAI:
  263. if (notaContent.getControllerTunai() != null) {
  264. if (barangFull.getBarang() != null && barangFull.getNoBarang() != null
  265. && barangFull.getBarang().getIdGabungan().equals(barangFull.getNoBarang().getIdGabungan())) {
  266. notaContent.getControllerTunai().addToTable(barangFull.getBarang(), barangFull.getNoBarang());
  267. } else {
  268. Alert alert = AlertUtil.getAlertWarning(
  269. AlertUtil.ERROR_TIDAK_LENGKAP_TITLE,
  270. "Data Barang yang didapat tidak lengkap sehingga tidak bisa ditambahkan ke nota.");
  271. alert.initOwner(bpMain.getScene().getWindow());
  272. alert.show();
  273. }
  274. }
  275. break;
  276. case FormConstanta.TRANSAKSI_RETUR:
  277. break;
  278. }
  279. }
  280. };
  281. listShortcuts.put(kcCariBarang, rnCariBarang);
  282. KeyCombination kcCariPelanggan = new KeyCodeCombination(KeyCode.F6);
  283. Runnable rnCariPelanggan = () -> {
  284. DialogCariPelangganController dialogCariPelanggan = new DialogCariPelangganController();
  285. dialogCariPelanggan.initOwner(bpMain.getScene().getWindow());
  286. Optional<Pelanggan> result = dialogCariPelanggan.showAndWait();
  287. if (result.isPresent() && result.get() != null) {
  288. SystemValue.member = result.get();
  289. SystemValue.isMember = true;
  290. updateLabelPelanggan(result.get());
  291. updateLabelMemberNonMember();
  292. }
  293. };
  294. listShortcuts.put(kcCariPelanggan, rnCariPelanggan);
  295. KeyCombination kcCariNotaTunda = new KeyCodeCombination(KeyCode.F7);
  296. Runnable rnCariNotaTunda = () -> {
  297. DialogCariNotaTundaController dialogCariNotaTunda = new DialogCariNotaTundaController();
  298. dialogCariNotaTunda.initOwner(bpMain.getScene().getWindow());
  299. Optional<String> hasilReturn = dialogCariNotaTunda.showAndWait();
  300. if (hasilReturn.get().contains("Tunda:")) {
  301. String noNota = hasilReturn.get().substring(6);
  302. Button buttonBaru = null;
  303. switch (noNota.charAt(0)) {
  304. case Fucout.KODE_NOTA_BON:
  305. removeDuplicateNota(FormConstanta.TRANSAKSI_BON);
  306. break;
  307. case Fucout.KODE_NOTA_BAWA:
  308. removeDuplicateNota(FormConstanta.TRANSAKSI_BAWA);
  309. break;
  310. case Fucout.KODE_NOTA_RETUR:
  311. removeDuplicateNota(FormConstanta.TRANSAKSI_RETUR);
  312. buttonBaru = generateButtonNota(noNota,
  313. FormConstanta.TRANSAKSI_RETUR,
  314. Fucout.TEKS_TIPE_NOTA_RETUR,
  315. false);
  316. notaContent.setBtnRetur(buttonBaru);
  317. break;
  318. default:
  319. removeDuplicateNota(FormConstanta.TRANSAKSI_TUNAI);
  320. buttonBaru = generateButtonNota(noNota,
  321. FormConstanta.TRANSAKSI_TUNAI,
  322. Fucout.TEKS_TIPE_NOTA_TUNAI,
  323. false);
  324. notaContent.setBtnTunai(buttonBaru);
  325. break;
  326. }
  327. if (buttonBaru != null) {
  328. navigasi.add(buttonBaru);
  329. vbNavigasi.getChildren().add(buttonBaru);
  330. }
  331. }
  332. };
  333. listShortcuts.put(kcCariNotaTunda, rnCariNotaTunda);
  334. KeyCombination kcCheckout = new KeyCodeCombination(KeyCode.F8);
  335. Runnable rnCheckout = () -> {
  336. switch (tipeTransaksiState) {
  337. case FormConstanta.TRANSAKSI_TUNAI:
  338. setContent(formFactory.getForm(FormConstanta.BAYAR, this));
  339. break;
  340. case FormConstanta.TRANSAKSI_RETUR:
  341. DialogKonfirmasiReturController dialogKonfirmasiRetur = new DialogKonfirmasiReturController();
  342. dialogKonfirmasiRetur.initOwner(bpMain.getScene().getWindow());
  343. dialogKonfirmasiRetur.showAndWait();
  344. break;
  345. }
  346. };
  347. listShortcuts.put(kcCheckout, rnCheckout);
  348. KeyCombination kcCetakNota = new KeyCodeCombination(KeyCode.F10);
  349. Runnable rnCetakNota = () -> {
  350. openCetakNota();
  351. };
  352. listShortcuts.put(kcCetakNota, rnCetakNota);
  353. KeyCombination kcCariCetakUlangNota = new KeyCodeCombination(KeyCode.P, KeyCombination.CONTROL_DOWN);
  354. Runnable rnCetakUlangNota = () -> {
  355. DialogCetakUlangNotaController dialogCetakUlangNota = new DialogCetakUlangNotaController();
  356. dialogCetakUlangNota.initOwner(bpMain.getScene().getWindow());
  357. Optional<String> result = dialogCetakUlangNota.showAndWait();
  358. };
  359. listShortcuts.put(kcCariCetakUlangNota, rnCetakUlangNota);
  360. KeyCombination kcScanMember = new KeyCodeCombination(KeyCode.S, KeyCombination.CONTROL_DOWN);
  361. Runnable rnScanMember = () -> {
  362. tfScanMember.requestFocus();
  363. };
  364. listShortcuts.put(kcScanMember, rnScanMember);
  365. KeyCombination kcLogout = new KeyCodeCombination(KeyCode.L, KeyCombination.CONTROL_DOWN);
  366. Runnable rnLogout = () -> {
  367. try {
  368. Stage stage = generateNewWindow("/fxml/FormLogin.fxml");
  369. stage.setResizable(false);
  370. stage.show();
  371. Stage thisStage = (Stage) bpMain.getScene().getWindow();
  372. thisStage.close();
  373. } catch (IOException ex) {
  374. Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, ex);
  375. }
  376. };
  377. listShortcuts.put(kcLogout, rnLogout);
  378. Platform.runLater(() -> {
  379. bpMain.getScene().getAccelerators().putAll(listShortcuts);
  380. });
  381. }
  382. public void setContent(Node node) {
  383. try {
  384. spMainContent.setContent(node);
  385. } catch (NullPointerException npe) {
  386. Logger.getLogger(FormUtamaController.class
  387. .getName()).log(Level.SEVERE, null, npe);
  388. // AlertGenerate.getAlert(AlertGenerate.FXML_FAIL).show();
  389. }
  390. }
  391. public Stage generateNewWindow(String url) throws IOException {
  392. Stage stage = new Stage();
  393. Parent root;
  394. root = FXMLLoader.load(getClass().getResource(url));
  395. Scene scene = new Scene(root);
  396. stage.setTitle(Fucout.APP_TITLE);
  397. stage.getIcons().add(new Image(Fucout.APP_ICON));
  398. stage.setScene(scene);
  399. return stage;
  400. }
  401. public Window getWindow() {
  402. return bpMain.getScene().getWindow();
  403. }
  404. @FXML
  405. void btnTambahNotaOnAction(ActionEvent event) {
  406. DialogTambahNotaController dialogTambahNota = new DialogTambahNotaController();
  407. dialogTambahNota.initOwner(bpMain.getScene().getWindow());
  408. Optional<String> hasilReturn = dialogTambahNota.showAndWait();
  409. if (hasilReturn.isPresent()) {
  410. if (hasilReturn.get().equals("Baru:Tunai")) {
  411. removeDuplicateNota(FormConstanta.TRANSAKSI_TUNAI);
  412. Button buttonBaru = generateButtonNota(Fucout.getNoNotaTemporary(),
  413. FormConstanta.TRANSAKSI_TUNAI,
  414. Fucout.TEKS_TIPE_NOTA_TUNAI,
  415. true);
  416. navigasi.add(buttonBaru);
  417. vbNavigasi.getChildren().add(buttonBaru);
  418. notaContent.setBtnTunai(buttonBaru);
  419. } else if (hasilReturn.get().equals("Baru:Bon")) {
  420. removeDuplicateNota(FormConstanta.TRANSAKSI_BON);
  421. Button buttonBaru = generateButtonNota("B-" + Fucout.getNoNotaTemporary(),
  422. FormConstanta.TRANSAKSI_BON,
  423. Fucout.TEKS_TIPE_NOTA_BON,
  424. true);
  425. navigasi.add(buttonBaru);
  426. vbNavigasi.getChildren().add(buttonBaru);
  427. notaContent.setBtnBon(buttonBaru);
  428. } else if (hasilReturn.get().equals("Baru:Bawa Dulu")) {
  429. removeDuplicateNota(FormConstanta.TRANSAKSI_BAWA);
  430. Button buttonBaru = generateButtonNota("W-" + Fucout.getNoNotaTemporary(),
  431. FormConstanta.TRANSAKSI_BAWA,
  432. Fucout.TEKS_TIPE_NOTA_BAWA,
  433. true);
  434. navigasi.add(buttonBaru);
  435. vbNavigasi.getChildren().add(buttonBaru);
  436. notaContent.setBtnBawa(buttonBaru);
  437. } else if (hasilReturn.get().equals("Baru:Retur")) {
  438. removeDuplicateNota(FormConstanta.TRANSAKSI_RETUR);
  439. Button buttonBaru = generateButtonNota("R-" + Fucout.getNoNotaTemporary(),
  440. FormConstanta.TRANSAKSI_RETUR,
  441. Fucout.TEKS_TIPE_NOTA_RETUR,
  442. true);
  443. navigasi.add(buttonBaru);
  444. vbNavigasi.getChildren().add(buttonBaru);
  445. notaContent.setBtnRetur(buttonBaru);
  446. } else if (hasilReturn.get().contains("Checkout:")) {
  447. String noNota = hasilReturn.get().substring(9);
  448. Button buttonBaru = null;
  449. switch (noNota.charAt(0)) {
  450. case Fucout.KODE_NOTA_BON:
  451. removeDuplicateNota(FormConstanta.TRANSAKSI_BON);
  452. break;
  453. case Fucout.KODE_NOTA_BAWA:
  454. removeDuplicateNota(FormConstanta.TRANSAKSI_BAWA);
  455. break;
  456. case Fucout.KODE_NOTA_RETUR:
  457. removeDuplicateNota(FormConstanta.TRANSAKSI_RETUR);
  458. buttonBaru = generateButtonNota(noNota,
  459. FormConstanta.TRANSAKSI_RETUR,
  460. Fucout.TEKS_TIPE_NOTA_RETUR,
  461. false);
  462. notaContent.setBtnRetur(buttonBaru);
  463. break;
  464. default:
  465. removeDuplicateNota(FormConstanta.TRANSAKSI_TUNAI);
  466. buttonBaru = generateButtonNota(noNota,
  467. FormConstanta.TRANSAKSI_TUNAI,
  468. Fucout.TEKS_TIPE_NOTA_TUNAI,
  469. false);
  470. notaContent.setBtnTunai(buttonBaru);
  471. break;
  472. }
  473. if (buttonBaru != null) {
  474. navigasi.add(buttonBaru);
  475. vbNavigasi.getChildren().add(buttonBaru);
  476. }
  477. }
  478. }
  479. }
  480. private void removeDuplicateNota(String tipe) {
  481. switch (tipe) {
  482. case FormConstanta.TRANSAKSI_BON:
  483. if (tipeTransaksiState.equals(FormConstanta.TRANSAKSI_BON)) {
  484. setContent(null);
  485. }
  486. if (notaContent.getBtnBon() != null) {
  487. notaContent.controllerBon = null;
  488. notaContent.nodeBon = null;
  489. navigasi.remove(notaContent.getBtnBon());
  490. vbNavigasi.getChildren().remove(notaContent.getBtnBon());
  491. }
  492. break;
  493. case FormConstanta.TRANSAKSI_BAWA:
  494. if (tipeTransaksiState.equals(FormConstanta.TRANSAKSI_BAWA)) {
  495. setContent(null);
  496. }
  497. if (notaContent.getBtnBawa() != null) {
  498. notaContent.controllerBawa = null;
  499. notaContent.nodeBawa = null;
  500. navigasi.remove(notaContent.getBtnBawa());
  501. vbNavigasi.getChildren().remove(notaContent.getBtnBawa());
  502. }
  503. break;
  504. case FormConstanta.TRANSAKSI_RETUR:
  505. if (tipeTransaksiState.equals(FormConstanta.TRANSAKSI_RETUR)) {
  506. setContent(null);
  507. }
  508. if (notaContent.getBtnRetur() != null) {
  509. notaContent.controllerRetur = null;
  510. notaContent.nodeRetur = null;
  511. navigasi.remove(notaContent.getBtnRetur());
  512. vbNavigasi.getChildren().remove(notaContent.getBtnRetur());
  513. }
  514. break;
  515. case FormConstanta.TRANSAKSI_TUNAI:
  516. default:
  517. if (tipeTransaksiState.equals(FormConstanta.TRANSAKSI_TUNAI)) {
  518. setContent(null);
  519. }
  520. if (notaContent.getBtnTunai() != null) {
  521. notaContent.controllerTunai = null;
  522. notaContent.nodeTunai = null;
  523. navigasi.remove(notaContent.getBtnTunai());
  524. vbNavigasi.getChildren().remove(notaContent.getBtnTunai());
  525. }
  526. break;
  527. }
  528. }
  529. public void removeNota(Button btn) {
  530. setContent(null);
  531. navigasi.remove(btn);
  532. vbNavigasi.getChildren().remove(btn);
  533. }
  534. //scan member
  535. @FXML
  536. void scanMemberOnPressed(KeyEvent event) {
  537. if (event.getCode() == KeyCode.ENTER) {
  538. posRx.getPelangganByKodeMember(tfScanMember.getText()).subscribe(pelangganObserver);
  539. }
  540. }
  541. Observer<Pelanggan> pelangganObserver = new Observer<Pelanggan>() {
  542. @Override
  543. public void onSubscribe(Disposable dspsbl) {
  544. }
  545. @Override
  546. public void onNext(Pelanggan p) {
  547. if (p != null) {
  548. SystemValue.isMember = true;
  549. SystemValue.member = p;
  550. updateLabelPelanggan(p);
  551. }
  552. }
  553. @Override
  554. public void onError(Throwable error) {
  555. if (error instanceof HttpException) {
  556. switch (((HttpException) error).code()) {
  557. case HttpURLConnection.HTTP_NOT_FOUND:
  558. Alert alert = AlertUtil.getAlertError(
  559. AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
  560. "Pelanggan dengan kode member tersebut tidak ditemukan.");
  561. alert.initOwner(bpMain.getScene().getWindow());
  562. alert.show();
  563. break;
  564. default:
  565. Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, error);
  566. }
  567. } else {
  568. AmigoPosRx.handleGenericError(error, bpMain.getScene().getWindow());
  569. }
  570. }
  571. @Override
  572. public void onComplete() {
  573. }
  574. };
  575. Observer<KonversiPoin> getNilaiKonversiPoin = new Observer<KonversiPoin>() {
  576. @Override
  577. public void onSubscribe(Disposable dspsbl) {
  578. }
  579. @Override
  580. public void onNext(KonversiPoin k) {
  581. if (k != null) {
  582. SystemValue.konversiPoin = k;
  583. }
  584. }
  585. @Override
  586. public void onError(Throwable error) {
  587. Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, error);
  588. }
  589. @Override
  590. public void onComplete() {
  591. }
  592. };
  593. public class NotaContent {
  594. private Button btnTunai;
  595. private FormTransaksiTunaiController controllerTunai = null;
  596. private Node nodeTunai = null;
  597. private Button btnBawa;
  598. private Object controllerBawa = null;
  599. private Node nodeBawa = null;
  600. private Button btnBon;
  601. private Object controllerBon = null;
  602. private Node nodeBon = null;
  603. private Button btnRetur;
  604. private FormTransaksiReturController controllerRetur = null;
  605. private Node nodeRetur = null;
  606. /**
  607. * @return the btnTunai
  608. */
  609. public Button getBtnTunai() {
  610. return btnTunai;
  611. }
  612. /**
  613. * @param btnTunai the btnTunai to set
  614. */
  615. public void setBtnTunai(Button btnTunai) {
  616. this.btnTunai = btnTunai;
  617. }
  618. /**
  619. * @return the controllerTunai
  620. */
  621. public FormTransaksiTunaiController getControllerTunai() {
  622. return controllerTunai;
  623. }
  624. /**
  625. * @param controllerTunai the controllerTunai to set
  626. */
  627. public void setControllerTunai(FormTransaksiTunaiController controllerTunai) {
  628. this.controllerTunai = controllerTunai;
  629. }
  630. /**
  631. * @return the nodeTunai
  632. */
  633. public Node getNodeTunai() {
  634. return nodeTunai;
  635. }
  636. /**
  637. * @param nodeTunai the nodeTunai to set
  638. */
  639. public void setNodeTunai(Node nodeTunai) {
  640. this.nodeTunai = nodeTunai;
  641. }
  642. /**
  643. * @return the btnBawa
  644. */
  645. public Button getBtnBawa() {
  646. return btnBawa;
  647. }
  648. /**
  649. * @param btnBawa the btnBawa to set
  650. */
  651. public void setBtnBawa(Button btnBawa) {
  652. this.btnBawa = btnBawa;
  653. }
  654. /**
  655. * @return the btnBon
  656. */
  657. public Button getBtnBon() {
  658. return btnBon;
  659. }
  660. /**
  661. * @param btnBon the btnBon to set
  662. */
  663. public void setBtnBon(Button btnBon) {
  664. this.btnBon = btnBon;
  665. }
  666. /**
  667. * @return the btnRetur
  668. */
  669. public Button getBtnRetur() {
  670. return btnRetur;
  671. }
  672. /**
  673. * @param btnRetur the btnRetur to set
  674. */
  675. public void setBtnRetur(Button btnRetur) {
  676. this.btnRetur = btnRetur;
  677. }
  678. /**
  679. * @return the controllerRetur
  680. */
  681. public FormTransaksiReturController getControllerRetur() {
  682. return controllerRetur;
  683. }
  684. /**
  685. * @param controllerRetur the controllerRetur to set
  686. */
  687. public void setControllerRetur(FormTransaksiReturController controllerRetur) {
  688. this.controllerRetur = controllerRetur;
  689. }
  690. /**
  691. * @return the nodeRetur
  692. */
  693. public Node getNodeRetur() {
  694. return nodeRetur;
  695. }
  696. /**
  697. * @param nodeRetur the nodeRetur to set
  698. */
  699. public void setNodeRetur(Node nodeRetur) {
  700. this.nodeRetur = nodeRetur;
  701. }
  702. }
  703. }