/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package id.amigogroup.posterminal.keamanan; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ObjectNode; import id.amigogroup.posterminal.SystemValue; import id.amigogroup.posterminal.api.AmigoPosRx; import id.amigogroup.posterminal.model.Karyawan; import id.amigogroup.posterminal.util.AlertUtil; import id.amigogroup.posterminal.util.Fucout; import io.reactivex.Observable; import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Alert; import javafx.scene.control.PasswordField; import javafx.scene.control.TextField; import javafx.scene.image.Image; import javafx.scene.layout.AnchorPane; import javafx.stage.Stage; import okhttp3.ResponseBody; import retrofit2.HttpException; /** * FXML Controller class * * @author ronal */ public class FormLoginController implements Initializable { @FXML private AnchorPane apMain; @FXML private TextField fldNamaPengguna; @FXML private PasswordField fldKataSandi; private final AmigoPosRx posRx = new AmigoPosRx(); /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { } 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 public void btnLoginOnAction(ActionEvent event) { if (!fldNamaPengguna.getText().equals("") && !fldKataSandi.getText().equals("")) { String nik = fldNamaPengguna.getText(); Observable.zip( posRx.getKaryawanByNik(fldNamaPengguna.getText()), posRx.loginKaryawanByNikPin(nik, fldKataSandi.getText()), (Karyawan k, ResponseBody response) -> { return new KaryawanLogin(k,response); }).subscribe(karyawanLoginObserver); } else { Alert alert = AlertUtil.getAlertWarning( "Data Login Tidak Lengkap", "Kolom username dan password harus terisi"); alert.initOwner(apMain.getScene().getWindow()); alert.show(); } } Observer karyawanLoginObserver = new Observer<>() { @Override public void onSubscribe(Disposable dspsbl) { } @Override public void onNext(KaryawanLogin k) { //kasir, Asko produk, Asko SDM, Pemko if (k != null && Fucout.isAllowedLogin(k.karyawan.getIdPekerjaan())) { ObjectMapper mapper = new ObjectMapper(); try { JsonNode jsonNode = mapper.readTree(k.result.string()); ObjectNode objectNode = jsonNode.deepCopy(); if(objectNode.get("status").asBoolean()){ SystemValue.karyawanLogin = k.karyawan; generateNewWindow("/fxml/FormUtama.fxml").show(); Stage thisStage = (Stage) apMain.getScene().getWindow(); thisStage.hide(); } else{ Alert alert = AlertUtil.getAlertError( AlertUtil.ERROR_KARYAWAN_TIDAK_BOLEH_AKSES_TITLE, objectNode.get("message").asText()); alert.initOwner(apMain.getScene().getWindow()); alert.show(); } } catch (IOException ex) { Alert alert = AlertUtil.getAlertError( AlertUtil.ERROR_KARYAWAN_TIDAK_BOLEH_AKSES_TITLE, "Terjadi error yang tidak diduga sehingga karyawan tidak boleh mengakses."); alert.initOwner((Stage) apMain.getScene().getWindow()); alert.show(); Logger.getLogger(FormLoginController.class.getName()).log(Level.SEVERE, null, ex); } } else { Alert alert = AlertUtil.getAlertError( AlertUtil.ERROR_KARYAWAN_TIDAK_BOLEH_AKSES_TITLE, "Karyawan dengan nomor tersebut tidak berwenang untuk mengakses aplikasi ini."); alert.initOwner((Stage) apMain.getScene().getWindow()); alert.show(); } } @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, "Karyawan dengan nomor tersebut tidak ditemukan."); alert.initOwner(apMain.getScene().getWindow()); alert.show(); } } else { AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow()); } } @Override public void onComplete() { } }; private class KaryawanLogin{ private Karyawan karyawan; private ResponseBody result; public KaryawanLogin(Karyawan karyawan, ResponseBody result) { this.karyawan = karyawan; this.result = result; } } }