diff --git a/src/main/java/id/amigogroup/posterminal/FormUtamaController.java b/src/main/java/id/amigogroup/posterminal/FormUtamaController.java index b136d9a..0cc8a73 100644 --- a/src/main/java/id/amigogroup/posterminal/FormUtamaController.java +++ b/src/main/java/id/amigogroup/posterminal/FormUtamaController.java @@ -48,6 +48,7 @@ import javafx.scene.input.KeyEvent; import javafx.scene.layout.BorderPane; import javafx.scene.layout.VBox; import javafx.stage.Stage; +import javafx.stage.Window; import retrofit2.HttpException; public class FormUtamaController implements Initializable { @@ -406,6 +407,10 @@ public class FormUtamaController implements Initializable { return stage; } + + public Window getWindow(){ + return bpMain.getScene().getWindow(); + } @FXML void btnTambahNotaOnAction(ActionEvent event) { diff --git a/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java b/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java index 12796d5..9fabfc5 100644 --- a/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java +++ b/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java @@ -5,6 +5,7 @@ */ package id.amigogroup.posterminal.api; +import com.fasterxml.jackson.databind.JsonNode; import id.amigogroup.posterminal.model.Barang; import id.amigogroup.posterminal.model.DNotaTunai; import id.amigogroup.posterminal.model.Karyawan; @@ -20,6 +21,7 @@ import io.reactivex.schedulers.Schedulers; import java.net.SocketException; import java.net.SocketTimeoutException; import java.net.UnknownHostException; +import java.util.HashMap; import java.util.List; import java.util.logging.Level; import java.util.logging.Logger; @@ -95,6 +97,13 @@ public class AmigoPosRx { return UtilsApi.getServiceApiKaryawan().getKaryawanByNik(nik) .subscribeOn(Schedulers.trampoline()); } + + public Observable loginKaryawanByNikPin(String nik, String pin) { + HashMap body = new HashMap<>(); + body.put("pin", pin); + return UtilsApi.getServiceApiKaryawan().loginKaryawanByNikPin(nik, body) + .subscribeOn(Schedulers.trampoline()); + } //Pelanggan API public Observable getPelangganByKodeMember(String kodeMember) { diff --git a/src/main/java/id/amigogroup/posterminal/api/ServiceApiKaryawan.java b/src/main/java/id/amigogroup/posterminal/api/ServiceApiKaryawan.java index d71c463..cf3f2b3 100644 --- a/src/main/java/id/amigogroup/posterminal/api/ServiceApiKaryawan.java +++ b/src/main/java/id/amigogroup/posterminal/api/ServiceApiKaryawan.java @@ -7,7 +7,11 @@ package id.amigogroup.posterminal.api; import id.amigogroup.posterminal.model.Karyawan; import io.reactivex.Observable; +import java.util.HashMap; +import okhttp3.ResponseBody; +import retrofit2.http.Body; import retrofit2.http.GET; +import retrofit2.http.POST; import retrofit2.http.Path; /** @@ -15,7 +19,14 @@ import retrofit2.http.Path; * @author ronal */ public interface ServiceApiKaryawan { + //KARYAWAN //Mengambil Karyawan berdasarkan Nik @GET("karyawans/{nik}") Observable getKaryawanByNik(@Path("nik") String nik); + + //Mengambil Login Karyawan berdasarkan Nik dan Pin + @POST("karyawans/{nik}/auth/pin") + Observable loginKaryawanByNikPin( + @Path("nik") String nik, + @Body HashMap pin); } diff --git a/src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java b/src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java index d058eb9..2a68c9c 100644 --- a/src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java +++ b/src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java @@ -5,6 +5,9 @@ */ 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; @@ -15,9 +18,7 @@ import io.reactivex.Observer; import io.reactivex.disposables.Disposable; import java.io.IOException; import java.net.HttpURLConnection; -import java.net.SocketTimeoutException; import java.net.URL; -import java.net.UnknownHostException; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; @@ -33,6 +34,7 @@ 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; /** @@ -73,33 +75,64 @@ public class FormLoginController implements Initializable { @FXML public void btnLoginOnAction(ActionEvent event) { - if (!fldNamaPengguna.getText().equals("")) { - Observable karyawanObs = posRx.getKaryawanByNik(fldNamaPengguna.getText()); - karyawanObs.subscribe(karyawanLoginObserver); + 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<>() { + Observer karyawanLoginObserver = new Observer<>() { @Override public void onSubscribe(Disposable dspsbl) { } @Override - public void onNext(Karyawan k) { + public void onNext(KaryawanLogin k) { //kasir, Asko produk, Asko SDM, Pemko - if (k != null && Fucout.isAllowedLogin(k.getIdPekerjaan())) { - SystemValue.karyawanLogin = k; + if (k != null && Fucout.isAllowedLogin(k.karyawan.getIdPekerjaan())) { + ObjectMapper mapper = new ObjectMapper(); try { - generateNewWindow("/fxml/FormUtama.fxml").show(); - Stage thisStage = (Stage) apMain.getScene().getWindow(); - //close current stage - thisStage.hide(); + 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( - "Error: Karyawan Tidak Boleh Akses", + 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(); @@ -126,4 +159,14 @@ public class FormLoginController implements Initializable { public void onComplete() { } }; + + private class KaryawanLogin{ + private Karyawan karyawan; + private ResponseBody result; + + public KaryawanLogin(Karyawan karyawan, ResponseBody result) { + this.karyawan = karyawan; + this.result = result; + } + } } diff --git a/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java b/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java index 2ad228d..84bcc4e 100644 --- a/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java +++ b/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java @@ -8,6 +8,7 @@ package id.amigogroup.posterminal.transaksi; 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.Barang; import id.amigogroup.posterminal.model.DNotaRetur; @@ -82,6 +83,8 @@ public class FormTransaksiReturController implements Initializable { @FXML private Label lblNomorNota; @FXML + private Label lblKasir; + @FXML private TableView tbvRetur; @FXML private TableColumn tcNoRetur; @@ -107,8 +110,7 @@ public class FormTransaksiReturController implements Initializable { private StackPane stpReturDrop; @FXML private Label lblTambahKeTabelRetur; - private TableColumn tcAction; - + private final AmigoPosRx posRx = new AmigoPosRx(); private String noNota = ""; private final ObservableList daftarTabelPenjualan = FXCollections.observableArrayList(); @@ -156,6 +158,13 @@ public class FormTransaksiReturController implements Initializable { public void initData(String noNota, boolean baru) { this.noNota = noNota; + if(!baru){ + + } + if(SystemValue.karyawanLogin != null){ + lblKasir.setText(Fucout.getTextColon(SystemValue.karyawanLogin.getNama())); + } + lblNomorNota.setText(Fucout.getTextColon(noNota)); } diff --git a/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java b/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java index f532103..d8101d7 100644 --- a/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java +++ b/src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java @@ -63,6 +63,8 @@ public class FormTransaksiTunaiController implements Initializable { @FXML private Label lblNoNota; @FXML + private Label lblKasir; + @FXML private TableView tbvTransaksi; @FXML private TableColumn tcNo; @@ -133,6 +135,10 @@ public class FormTransaksiTunaiController implements Initializable { if (!baru) { posRx.getDNotaTunaiByNoNota(noNota).subscribe(getDNotaTunaiObserver); } + if(SystemValue.karyawanLogin != null){ + lblKasir.setText(Fucout.getTextColon(SystemValue.karyawanLogin.getNama())); + } + this.parent = parent; this.noNota = noNota; lblNoNota.setText(Fucout.getTextColon(noNota)); @@ -144,8 +150,6 @@ public class FormTransaksiTunaiController implements Initializable { KeyCombination kcTundaNota = new KeyCodeCombination(KeyCode.T, KeyCombination.CONTROL_DOWN); Runnable rnTundaNota = () -> { - //Tunda Nota - System.out.println("Tunda"); List daftarDNotaTunai = new ArrayList<>(); if (noNota != null && !noNota.equals("")) { @@ -364,7 +368,7 @@ public class FormTransaksiTunaiController implements Initializable { total = totalTemp; updateLabelGrandTotal(); - return 0; + return totalTemp; } private void updateLabelGrandTotal() { @@ -619,7 +623,7 @@ public class FormTransaksiTunaiController implements Initializable { Alert alert = AlertUtil.getAlertInfo( "Berhasil Ditunda", "Nota berhasil ditunda!"); - alert.initOwner(apMain.getScene().getWindow()); + alert.initOwner(parent.getWindow()); alert.show(); if (parent != null) { diff --git a/src/main/java/id/amigogroup/posterminal/util/AlertUtil.java b/src/main/java/id/amigogroup/posterminal/util/AlertUtil.java index 3ac0663..d40edc3 100644 --- a/src/main/java/id/amigogroup/posterminal/util/AlertUtil.java +++ b/src/main/java/id/amigogroup/posterminal/util/AlertUtil.java @@ -17,6 +17,7 @@ import javafx.scene.image.ImageView; * @author ronal */ public class AlertUtil { + public static final String ERROR_KARYAWAN_TIDAK_BOLEH_AKSES_TITLE = "Error: Karyawan Tidak Boleh Akses"; public static final String ERROR_TIDAK_DITEMUKAN_TITLE = "Error: Data Tidak Ditemukan"; public static final String ERROR_TIDAK_TERDUGA_TITLE = "Error: Terjadi Kesalahan"; public static final String ERROR_TIDAK_TERDUGA_MESSAGE = "Terjadi kesalahan yang tidak terduga."; diff --git a/src/main/resources/fxml/FormTransaksiRetur.fxml b/src/main/resources/fxml/FormTransaksiRetur.fxml index fac5bc4..b229e2f 100644 --- a/src/main/resources/fxml/FormTransaksiRetur.fxml +++ b/src/main/resources/fxml/FormTransaksiRetur.fxml @@ -97,7 +97,7 @@ diff --git a/src/main/resources/fxml/FormTransaksiTunai.fxml b/src/main/resources/fxml/FormTransaksiTunai.fxml index 2ca6c18..1ab7f26 100644 --- a/src/main/resources/fxml/FormTransaksiTunai.fxml +++ b/src/main/resources/fxml/FormTransaksiTunai.fxml @@ -82,7 +82,7 @@ -