|
- package id.amigogroup.posterminal;
-
- import id.amigogroup.posterminal.api.AmigoPosRx;
- import id.amigogroup.posterminal.model.Pelanggan;
- import id.amigogroup.posterminal.pencarian.DialogCariBarangController;
- import id.amigogroup.posterminal.pencarian.DialogCariNotaTundaController;
- import id.amigogroup.posterminal.pencarian.DialogCariPelangganController;
- import id.amigogroup.posterminal.pencarian.DialogCetakUlangNotaController;
- import id.amigogroup.posterminal.transaksi.BarangFull;
- import id.amigogroup.posterminal.transaksi.DialogKonfirmasiReturController;
- import id.amigogroup.posterminal.transaksi.DialogTambahNotaController;
- import id.amigogroup.posterminal.transaksi.FormTransaksiReturController;
- import id.amigogroup.posterminal.transaksi.FormTransaksiTunaiController;
- import id.amigogroup.posterminal.util.AlertUtil;
- import id.amigogroup.posterminal.util.Fucout;
- import io.reactivex.Observer;
- import io.reactivex.disposables.Disposable;
- import java.io.IOException;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.util.ArrayList;
- import java.util.HashMap;
- import java.util.List;
- import java.util.Map;
- import java.util.Optional;
- import java.util.ResourceBundle;
- import java.util.logging.Level;
- import java.util.logging.Logger;
- import javafx.application.Platform;
- import javafx.event.ActionEvent;
- import javafx.fxml.FXML;
- import javafx.fxml.FXMLLoader;
- import javafx.fxml.Initializable;
- import javafx.scene.Node;
- import javafx.scene.Parent;
- import javafx.scene.Scene;
- import javafx.scene.control.Alert;
- import javafx.scene.control.Button;
- import javafx.scene.control.Label;
- import javafx.scene.control.ScrollPane;
- import javafx.scene.control.TextField;
- import javafx.scene.image.Image;
- import javafx.scene.input.KeyCode;
- import javafx.scene.input.KeyCodeCombination;
- import javafx.scene.input.KeyCombination;
- import javafx.scene.input.KeyEvent;
- import javafx.scene.layout.BorderPane;
- import javafx.scene.layout.VBox;
- import javafx.stage.Stage;
- import retrofit2.HttpException;
-
- public class FormUtamaController implements Initializable {
-
- @FXML
- private BorderPane bpMain;
- @FXML
- private ScrollPane spMainContent;
- @FXML
- private ScrollPane spNavigasi;
- @FXML
- private VBox vbNavigasi;
- @FXML
- private Button btnTambahNota;
- @FXML
- private Label lblNamaLogin;
- @FXML
- private Label lblMemberNonMember;
- @FXML
- private Label lblKodePelanggan;
- @FXML
- private Label lblNamaPelanggan;
- @FXML
- private Label lblTglLahirPelanggan;
- @FXML
- private Label lblNoTelpPelanggan;
- @FXML
- private TextField tfScanMember;
-
- private final FormFactory formFactory = new FormFactory();
-
- private final List<Button> navigasi = new ArrayList<>();
- private int notaState = -1;
- private String tipeTransaksiState = "";
- private int jumlahNota = 0;
- private final char NOTA_PREV = 'p';
- private final char NOTA_NEXT = 'n';
- private final NotaContent notaContent = new NotaContent();
- private final AmigoPosRx posRx = new AmigoPosRx();
-
- /**
- * Initializes the controller class.
- */
- @Override
- public void initialize(URL url, ResourceBundle rb) {
- //Kode Sri Sumarmi (i140411), Nur Indah Suciati (00334), Kode Wuryaningsih/RT (010004)
- updateLabelMemberNonMember();
-
- if (SystemValue.karyawanLogin != null) {
- lblNamaLogin.setText(Fucout.getTextColon(SystemValue.karyawanLogin.getNama()));
- }
-
- initShorcuts();
- }
-
- private void updateLabelPelanggan(Pelanggan p) {
- updateLabelMemberNonMember();
- if (Fucout.checkBirthday(p.getTglLahir())) {
- Alert alertUltah = AlertUtil.getAlertUlangTahun(p.getNama());
- alertUltah.initOwner(bpMain.getScene().getWindow());
- alertUltah.show();
- }
- lblKodePelanggan.setText(Fucout.getTextColon(p.getAlias()));
- lblNamaPelanggan.setText(Fucout.getTextColon(p.getNama()));
- lblTglLahirPelanggan.setText(Fucout.getTextColon(Fucout.formatTanggal(p.getTglLahir())));
- lblNoTelpPelanggan.setText(Fucout.getTextColon(
- !p.getTelp().equals("") && !p.getPonsel().equals("")
- ? p.getTelp() + System.lineSeparator() + p.getPonsel() : p.getTelp() + p.getPonsel()));
- }
-
- private void updateLabelMemberNonMember() {
- if (SystemValue.isMember) {
- lblMemberNonMember.setText("Member");
- } else {
- lblMemberNonMember.setText("Non Member");
- }
- }
-
- private void updateSelectedNota(ActionEvent event) {
- Button buttonSource = (Button) event.getSource();
- notaState = navigasi.indexOf(buttonSource);
- Fucout.scrollToNode(spNavigasi, buttonSource);
-
- for (Button button : navigasi) {
- if (button.equals(buttonSource)) {
- if (!button.getStyleClass().contains("button-navigasi-transaksi-selected")) {
- button.getStyleClass().add("button-navigasi-transaksi-selected");
- }
- } else {
- if (button.getStyleClass().contains("button-navigasi-transaksi-selected")) {
- button.getStyleClass().remove("button-navigasi-transaksi-selected");
- }
- }
- }
-
- // fldScan.requestFocus();
- }
-
- private Button generateButtonNota(String noNota, String tipeNota, String tipeTeks, boolean baru) {
- Button button = new Button(tipeTeks + ": " + noNota);
- button.getStyleClass().add("button-navigasi-transaksi");
- button.setMaxWidth(Double.MAX_VALUE);
- button.setOnAction((event) -> {
- setContent(loadNota(noNota, tipeNota, baru));
- tipeTransaksiState = tipeNota;
- updateSelectedNota(event);
- });
-
- return button;
- }
-
- private Node loadNota(String noNota, String tipe, boolean baru) {
- Node node = null;
- FXMLLoader loader = new FXMLLoader();
- try {
- switch (tipe) {
- case FormConstanta.TRANSAKSI_TUNAI:
- loader.setLocation(getClass().getResource("/fxml/FormTransaksiTunai.fxml"));
- node = loader.load();
- FormTransaksiTunaiController fttc = loader.getController();
- notaContent.controllerTunai = fttc;
- fttc.initData(noNota, baru);
- break;
- case FormConstanta.TRANSAKSI_RETUR:
- loader.setLocation(getClass().getResource("/fxml/FormTransaksiRetur.fxml"));
- node = loader.load();
- FormTransaksiReturController ftrc = loader.getController();
- ftrc.initData(noNota, baru);
- break;
-
- }
- } catch (IOException ex) {
- Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, ex);
- }
- return node;
- }
-
- private void loadNota(char operasi) {
- switch (operasi) {
- case NOTA_PREV:
- if (notaState == -1) {
- notaState = jumlahNota - 1;
- } else {
- notaState--;
- if (notaState < 0) {
- notaState = jumlahNota - 1;
- }
- }
- break;
- case NOTA_NEXT:
- if (notaState == -1) {
- notaState = 0;
- } else {
- notaState++;
- if (notaState >= jumlahNota) {
- notaState = 0;
- }
- }
- break;
- }
- if (notaState >= 0 && notaState < jumlahNota) {
- navigasi.get(notaState).fire();
- }
- }
-
- private void initShorcuts() {
- Map<KeyCombination, Runnable> listShortcuts = new HashMap<>();
-
- KeyCombination kcPrevNota = new KeyCodeCombination(KeyCode.F1);
- Runnable rnPrevNota = () -> {
- loadNota(NOTA_PREV);
- };
- listShortcuts.put(kcPrevNota, rnPrevNota);
-
- KeyCombination kcNextNota = new KeyCodeCombination(KeyCode.F2);
- Runnable rnNextNota = () -> {
- loadNota(NOTA_NEXT);
- };
- listShortcuts.put(kcNextNota, rnNextNota);
-
- KeyCombination kcCariBarang = new KeyCodeCombination(KeyCode.F5);
- Runnable rnCariBarang = () -> {
- DialogCariBarangController dialogCariBarang = new DialogCariBarangController();
- dialogCariBarang.initOwner(bpMain.getScene().getWindow());
-
- Optional<BarangFull> result = dialogCariBarang.showAndWait();
-
- if (result.isPresent()) {
- BarangFull barangFull = result.get();
- switch (tipeTransaksiState) {
- case FormConstanta.TRANSAKSI_TUNAI:
- if (notaContent.controllerTunai != null) {
- if (barangFull.getBarang() != null && barangFull.getNoBarang() != null
- && barangFull.getBarang().getIdGabungan().equals(barangFull.getNoBarang().getIdGabungan())) {
- notaContent.controllerTunai.addToTable(barangFull.getBarang(), barangFull.getNoBarang());
- } else {
- Alert alert = AlertUtil.getAlertWarning(
- AlertUtil.ERROR_TIDAK_LENGKAP_TITLE,
- "Data Barang yang didapat tidak lengkap sehingga tidak bisa ditambahkan ke nota.");
- alert.initOwner(bpMain.getScene().getWindow());
- alert.show();
- }
- }
- break;
- case FormConstanta.TRANSAKSI_RETUR:
- break;
- }
- }
- };
- listShortcuts.put(kcCariBarang, rnCariBarang);
-
- KeyCombination kcCariPelanggan = new KeyCodeCombination(KeyCode.F6);
- Runnable rnCariPelanggan = () -> {
- DialogCariPelangganController dialogCariPelanggan = new DialogCariPelangganController();
- dialogCariPelanggan.initOwner(bpMain.getScene().getWindow());
-
- Optional<Pelanggan> result = dialogCariPelanggan.showAndWait();
- if (result.isPresent() && result.get() != null) {
- SystemValue.member = result.get();
- SystemValue.isMember = true;
- updateLabelPelanggan(result.get());
- updateLabelMemberNonMember();
- }
- };
- listShortcuts.put(kcCariPelanggan, rnCariPelanggan);
-
- KeyCombination kcCariNotaTunda = new KeyCodeCombination(KeyCode.F7);
- Runnable rnCariNotaTunda = () -> {
- DialogCariNotaTundaController dialogCariNotaTunda = new DialogCariNotaTundaController();
- dialogCariNotaTunda.initOwner(bpMain.getScene().getWindow());
-
- Optional<String> result = dialogCariNotaTunda.showAndWait();
- };
- listShortcuts.put(kcCariNotaTunda, rnCariNotaTunda);
-
- KeyCombination kcCheckout = new KeyCodeCombination(KeyCode.F8);
- Runnable rnCheckout = () -> {
- switch (tipeTransaksiState) {
- case FormConstanta.TRANSAKSI_TUNAI:
- setContent(formFactory.getForm(FormConstanta.BAYAR, this));
- break;
- case FormConstanta.TRANSAKSI_RETUR:
- DialogKonfirmasiReturController dialogKonfirmasiRetur = new DialogKonfirmasiReturController();
- dialogKonfirmasiRetur.initOwner(bpMain.getScene().getWindow());
- dialogKonfirmasiRetur.showAndWait();
- break;
- }
- };
- listShortcuts.put(kcCheckout, rnCheckout);
-
- KeyCombination kcCariCetakUlangNota = new KeyCodeCombination(KeyCode.P, KeyCombination.CONTROL_DOWN);
- Runnable rnCetakUlangNota = () -> {
- DialogCetakUlangNotaController dialogCetakUlangNota = new DialogCetakUlangNotaController();
- dialogCetakUlangNota.initOwner(bpMain.getScene().getWindow());
-
- Optional<String> result = dialogCetakUlangNota.showAndWait();
- };
- listShortcuts.put(kcCariCetakUlangNota, rnCetakUlangNota);
-
- KeyCombination kcTambah = new KeyCodeCombination(KeyCode.T, KeyCombination.CONTROL_DOWN);
- Runnable rnTambah = () -> {
- btnTambahNota.fire();
- };
- listShortcuts.put(kcTambah, rnTambah);
-
- KeyCombination kcScanMember = new KeyCodeCombination(KeyCode.S, KeyCombination.CONTROL_DOWN);
- Runnable rnScanMember = () -> {
- tfScanMember.requestFocus();
- };
- listShortcuts.put(kcScanMember, rnScanMember);
-
- KeyCombination kcLogout = new KeyCodeCombination(KeyCode.L, KeyCombination.CONTROL_DOWN);
- Runnable rnLogout = () -> {
- try {
- generateNewWindow("/fxml/FormLogin.fxml").show();
- Stage thisStage = (Stage) bpMain.getScene().getWindow();
- thisStage.close();
- } catch (IOException ex) {
- Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, ex);
- }
- };
- listShortcuts.put(kcLogout, rnLogout);
-
- Platform.runLater(() -> {
- bpMain.getScene().getAccelerators().putAll(listShortcuts);
- });
- }
-
- public void setContent(Node node) {
- try {
- spMainContent.setContent(node);
- } catch (NullPointerException npe) {
- Logger.getLogger(FormUtamaController.class
- .getName()).log(Level.SEVERE, null, npe);
- // AlertGenerate.getAlert(AlertGenerate.FXML_FAIL).show();
- }
- }
-
- public Stage generateNewWindow(String url) throws IOException {
- Stage stage = new Stage();
- Parent root;
- root = FXMLLoader.load(getClass().getResource(url));
- Scene scene = new Scene(root);
- stage.setTitle(Fucout.APP_TITLE);
- stage.getIcons().add(new Image(Fucout.APP_ICON));
- stage.setScene(scene);
-
- return stage;
- }
-
- @FXML
- void btnTambahNotaOnAction(ActionEvent event) {
- DialogTambahNotaController dialogTambahNota = new DialogTambahNotaController();
- dialogTambahNota.initOwner(bpMain.getScene().getWindow());
- Optional<String> hasilReturn = dialogTambahNota.showAndWait();
-
- if (hasilReturn.isPresent()) {
- if (hasilReturn.get().equals("Baru:Tunai")) {
- if (tipeTransaksiState.equals(FormConstanta.TRANSAKSI_TUNAI)) {
- setContent(null);
- }
-
- if (notaContent.btnTunai != null) {
- navigasi.remove(notaContent.btnTunai);
- vbNavigasi.getChildren().remove(notaContent.btnTunai);
- }
-
- Button buttonBaru = generateButtonNota(Fucout.getNoNotaTemporary(),
- FormConstanta.TRANSAKSI_TUNAI,
- Fucout.TEKS_TIPE_NOTA_TUNAI,
- true);
- navigasi.add(buttonBaru);
- vbNavigasi.getChildren().add(buttonBaru);
- notaContent.btnTunai = buttonBaru;
- jumlahNota++;
- } else if (hasilReturn.get().equals("Baru:Bon")) {
- if (tipeTransaksiState.equals(FormConstanta.TRANSAKSI_BON)) {
- setContent(null);
- }
-
- if (notaContent.btnBon != null) {
- navigasi.remove(notaContent.btnBon);
- vbNavigasi.getChildren().remove(notaContent.btnBon);
- }
-
- Button buttonBaru = generateButtonNota("B-" + Fucout.getNoNotaTemporary(),
- FormConstanta.TRANSAKSI_BON,
- Fucout.TEKS_TIPE_NOTA_BON,
- true);
- navigasi.add(buttonBaru);
- vbNavigasi.getChildren().add(buttonBaru);
- notaContent.btnBon = buttonBaru;
- jumlahNota++;
- } else if (hasilReturn.get().equals("Baru:Bawa Dulu")) {
- if (tipeTransaksiState.equals(FormConstanta.TRANSAKSI_BAWA)) {
- setContent(null);
- }
-
- if (notaContent.btnBawa != null) {
- navigasi.remove(notaContent.btnBawa);
- vbNavigasi.getChildren().remove(notaContent.btnBawa);
- }
-
- Button buttonBaru = generateButtonNota("W-" + Fucout.getNoNotaTemporary(),
- FormConstanta.TRANSAKSI_BAWA,
- Fucout.TEKS_TIPE_NOTA_BAWA,
- true);
- navigasi.add(buttonBaru);
- vbNavigasi.getChildren().add(buttonBaru);
- notaContent.btnBawa = buttonBaru;
- jumlahNota++;
- } else if (hasilReturn.get().equals("Baru:Retur")) {
- if (tipeTransaksiState.equals(FormConstanta.TRANSAKSI_RETUR)) {
- setContent(null);
- }
-
- if (notaContent.btnRetur != null) {
- navigasi.remove(notaContent.btnRetur);
- vbNavigasi.getChildren().remove(notaContent.btnRetur);
- }
-
- Button buttonBaru = generateButtonNota("R-" + Fucout.getNoNotaTemporary(),
- FormConstanta.TRANSAKSI_RETUR,
- Fucout.TEKS_TIPE_NOTA_RETUR,
- true);
- navigasi.add(buttonBaru);
- vbNavigasi.getChildren().add(buttonBaru);
- notaContent.btnRetur = buttonBaru;
- jumlahNota++;
- } else if (hasilReturn.get().contains("Checkout:")) {
- String noNota = hasilReturn.get().substring(9);
- Button buttonBaru = null;
- switch (noNota.charAt(0)) {
- case Fucout.KODE_NOTA_BON:
- if (tipeTransaksiState.equals(FormConstanta.TRANSAKSI_BON)) {
- setContent(null);
- }
- break;
- case Fucout.KODE_NOTA_BAWA:
- if (tipeTransaksiState.equals(FormConstanta.TRANSAKSI_BAWA)) {
- setContent(null);
- }
- break;
- case Fucout.KODE_NOTA_RETUR:
- if (tipeTransaksiState.equals(FormConstanta.TRANSAKSI_RETUR)) {
- setContent(null);
- }
- if (notaContent.btnRetur != null) {
- navigasi.remove(notaContent.btnRetur);
- vbNavigasi.getChildren().remove(notaContent.btnRetur);
- }
-
- buttonBaru = generateButtonNota(noNota,
- FormConstanta.TRANSAKSI_RETUR,
- Fucout.TEKS_TIPE_NOTA_RETUR,
- false);
- notaContent.btnRetur = buttonBaru;
- break;
- default:
- if (tipeTransaksiState.equals(FormConstanta.TRANSAKSI_TUNAI)) {
- setContent(null);
- }
- if (notaContent.btnTunai != null) {
- navigasi.remove(notaContent.btnTunai);
- vbNavigasi.getChildren().remove(notaContent.btnTunai);
- }
-
- buttonBaru = generateButtonNota(noNota,
- FormConstanta.TRANSAKSI_TUNAI,
- Fucout.TEKS_TIPE_NOTA_TUNAI,
- false);
- notaContent.btnTunai = buttonBaru;
- break;
- }
- if (buttonBaru != null) {
- navigasi.add(buttonBaru);
- vbNavigasi.getChildren().add(buttonBaru);
- jumlahNota++;
- }
- }
- }
- }
-
- //scan member
- @FXML
- void scanMemberOnPressed(KeyEvent event) {
- if (event.getCode() == KeyCode.ENTER) {
- posRx.getPelangganByKodeMember(tfScanMember.getText()).subscribe(pelangganObserver);
- }
- }
-
- Observer<Pelanggan> pelangganObserver = new Observer<Pelanggan>() {
- @Override
- public void onSubscribe(Disposable dspsbl) {
- }
-
- @Override
- public void onNext(Pelanggan p) {
- if (p != null) {
- SystemValue.isMember = true;
- SystemValue.member = p;
-
- updateLabelPelanggan(p);
- }
- }
-
- @Override
- public void onError(Throwable error) {
- if (error instanceof HttpException) {
- switch (((HttpException) error).code()) {
- case HttpURLConnection.HTTP_NOT_FOUND:
- Alert alert = AlertUtil.getAlertError(
- AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
- "Pelanggan dengan kode member tersebut tidak ditemukan.");
- alert.initOwner(bpMain.getScene().getWindow());
- alert.show();
- }
- } else {
- AmigoPosRx.handleGenericError(error, bpMain.getScene().getWindow());
- }
- }
-
- @Override
- public void onComplete() {
- }
- };
-
- private class NotaContent {
-
- Button btnTunai;
- FormTransaksiTunaiController controllerTunai = null;
- Button btnBawa;
- Button btnBon;
- Button btnRetur;
- FormTransaksiReturController controllerRetur = null;
- }
- }
|