|
- package id.amigogroup.posterminal;
-
- import com.fasterxml.jackson.core.JsonProcessingException;
- import com.fasterxml.jackson.databind.ObjectMapper;
- 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.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.Observable;
- import static io.reactivex.Observable.error;
- 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.image.Image;
- import javafx.scene.input.KeyCode;
- import javafx.scene.input.KeyCodeCombination;
- import javafx.scene.input.KeyCombination;
- 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 Label lblNamaLogin;
- @FXML
- private Button btnTunai1Static;
- @FXML
- private Button btnRetur1Static;
- @FXML
- private Button btnTunai2Static;
- @FXML
- private Label lblMemberNonMember;
- @FXML
- private Label lblNamaPelanggan;
- @FXML
- private Label lblTglLahirPelanggan;
- @FXML
- private Label lblNoTelpPelanggan;
-
- private final FormFactory formFactory = new FormFactory();
-
- private final List<Button> navigasi = new ArrayList<>();
- private int notaState = -1;
- private String tipeNotaState = "";
- private int jumlahNota = 0;
- private final char NOTA_PREV = 'p';
- private final char NOTA_NEXT = 'n';
- private Observable<Pelanggan> pelangganObs;
-
- /**
- * Initializes the controller class.
- */
- @Override
- public void initialize(URL url, ResourceBundle rb) {
- AmigoPosRx posRx = new AmigoPosRx();
- //Kode Nur Indah Suciati (00334), Kode Wuryaningsih/RT (010004)
- updateLabelMemberNonMember();
-
- Platform.runLater(() -> {
- posRx.getPelangganByKodeMember("00334").subscribe(pelangganObserver);
- });
-
- if (SystemValue.karyawanLogin != null) {
- lblNamaLogin.setText(Fucout.getTextColon(SystemValue.karyawanLogin.getNama()));
- }
-
- initShorcuts();
-
- //STATIC FUNCTION, hilangkan jika sudah tidak dipakai
- navigasi.add(btnTunai1Static);
- navigasi.add(btnRetur1Static);
- navigasi.add(btnTunai2Static);
- jumlahNota = 3;
-
- btnTunai1Static.setOnAction((event) -> {
- posRx.getPelangganByKodeMember("010004").subscribe(pelangganObserver);
- setContent(loadNota("", FormConstanta.TRANSAKSI_TUNAI));
- updateSelectedNota(event);
- tipeNotaState = Fucout.TIPE_NOTA_TUNAI;
- });
- btnRetur1Static.setOnAction((event) -> {
- setContent(loadNota("", FormConstanta.TRANSAKSI_RETUR));
- updateSelectedNota(event);
- tipeNotaState = Fucout.TIPE_NOTA_RETUR;
- });
- btnTunai2Static.setOnAction((event) -> {
- setContent(loadNota("", FormConstanta.TRANSAKSI_TUNAI));
- updateSelectedNota(event);
- tipeNotaState = Fucout.TIPE_NOTA_TUNAI;
- });
- }
-
- private void updateLabelPelanggan(Pelanggan p) {
- updateLabelMemberNonMember();
- if (Fucout.checkBirthday(p.getTglLahir())) {
- Alert alertUltah = AlertUtil.getAlertUlangTahun(p.getNama());
- alertUltah.initOwner(bpMain.getScene().getWindow());
- alertUltah.show();
- }
- 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);
- // if (!tableState.equals(buttonSource.getText().toLowerCase())) {
- // switch (buttonSource.getText().toLowerCase()) {
- // case BTN_TUNAI:
- // //ambil data tunai
- // tableState = BTN_TUNAI;
- // System.out.println("ambil data tunai");
- // break;
- // case BTN_BAWA_DULU:
- // //ambil data bawa dulu
- // tableState = BTN_BAWA_DULU;
- // System.out.println("ambil data bawa dulu");
- // break;
- // case BTN_BON:
- // //ambil data bon
- // tableState = BTN_BON;
- // System.out.println("ambil data bon");
- // break;
- // case BTN_RETUR:
- // //ambil data retur
- // tableState = BTN_RETUR;
- // System.out.println("ambil data retur");
- // break;
- // }
- // }
-
- 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) {
- Button button = new Button(tipeTeks + ": " + noNota);
- button.getStyleClass().add("button-navigasi-transaksi");
- button.setMaxWidth(Double.MAX_VALUE);
- button.setOnAction((event) -> {
- setContent(loadNota("", tipeNota));
- tipeNotaState = tipeNota;
- updateSelectedNota(event);
- });
-
- return button;
- }
-
- private Node loadNota(String noNota, String tipe) {
- 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();
- // fetc.initData(noNota);
- break;
- case FormConstanta.TRANSAKSI_RETUR:
- loader.setLocation(getClass().getResource("/fxml/FormTransaksiRetur.fxml"));
- node = loader.load();
- FormTransaksiReturController ftrc = loader.getController();
- // fetc.initData(noNota);
- 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<String> result = dialogCariBarang.showAndWait();
- System.out.println(result);
- };
- listShortcuts.put(kcCariBarang, rnCariBarang);
-
- KeyCombination kcCariPelanggan = new KeyCodeCombination(KeyCode.F6);
- Runnable rnCariPelanggan = () -> {
- DialogCariPelangganController dialogCariPelanggan = new DialogCariPelangganController();
- dialogCariPelanggan.initOwner(bpMain.getScene().getWindow());
-
- Optional<String> result = dialogCariPelanggan.showAndWait();
- System.out.println(result);
- };
- 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();
- System.out.println(result);
- };
- listShortcuts.put(kcCariNotaTunda, rnCariNotaTunda);
-
- 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();
- System.out.println(result);
- };
- listShortcuts.put(kcCariCetakUlangNota, rnCetakUlangNota);
-
- KeyCombination kcCheckout = new KeyCodeCombination(KeyCode.F8);
- Runnable rnCheckout = () -> {
- switch (tipeNotaState) {
- case Fucout.TIPE_NOTA_TUNAI:
- setContent(formFactory.getForm(FormConstanta.BAYAR, this));
- break;
- case Fucout.TIPE_NOTA_RETUR:
- DialogKonfirmasiReturController dialogKonfirmasiRetur = new DialogKonfirmasiReturController();
- dialogKonfirmasiRetur.initOwner(bpMain.getScene().getWindow());
- dialogKonfirmasiRetur.showAndWait();
- break;
- }
- };
- listShortcuts.put(kcCheckout, rnCheckout);
-
- 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() && hasilReturn.get().equals("Tambah")) {
-
- Button buttonBaru = generateButtonNota("10-0220-0000X",
- FormConstanta.TRANSAKSI_TUNAI,
- Fucout.TIPE_NOTA_TUNAI);
- navigasi.add(buttonBaru);
- vbNavigasi.getChildren().add(buttonBaru);
- jumlahNota++;
- }
- }
-
- Observer<Pelanggan> pelangganObserver = new Observer<Pelanggan>() {
- @Override
- public void onSubscribe(Disposable dspsbl) {
- }
-
- @Override
- public void onNext(Pelanggan p) {
- ObjectMapper mapper = new ObjectMapper();
- try {
- System.out.println(mapper.writeValueAsString(p));
- } catch (JsonProcessingException ex) {
- Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, ex);
- }
- 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 {
- Alert alert = AlertUtil.getAlertError(
- AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
- "Terjadi kesalahan yang tidak terduga.");
- alert.initOwner(bpMain.getScene().getWindow());
- alert.show();
- Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, error);
- }
- }
-
- @Override
- public void onComplete() {
- }
- };
- }
|