Aplikasi POS Amigo, dibangun dengan JavaFX dengan Maven
您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

729 行
27 KiB

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