Login Karyawan dan Menampilkan data kasir

* [Logic] Membuat fungsi login
	* Membuat rute baru
	* Membuat logic di form login
* [UI] Membuat alert warning jika tidak memasukkan username/password
* [UI] Menampilkan nama kasir di dalam nota
pull/11/head
Ronaldo Christnawan 6 years ago
parent e3bc043b6e
commit d5b49a0985

@ -48,6 +48,7 @@ import javafx.scene.input.KeyEvent;
import javafx.scene.layout.BorderPane; import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox; import javafx.scene.layout.VBox;
import javafx.stage.Stage; import javafx.stage.Stage;
import javafx.stage.Window;
import retrofit2.HttpException; import retrofit2.HttpException;
public class FormUtamaController implements Initializable { public class FormUtamaController implements Initializable {
@ -406,6 +407,10 @@ public class FormUtamaController implements Initializable {
return stage; return stage;
} }
public Window getWindow(){
return bpMain.getScene().getWindow();
}
@FXML @FXML
void btnTambahNotaOnAction(ActionEvent event) { void btnTambahNotaOnAction(ActionEvent event) {

@ -5,6 +5,7 @@
*/ */
package id.amigogroup.posterminal.api; package id.amigogroup.posterminal.api;
import com.fasterxml.jackson.databind.JsonNode;
import id.amigogroup.posterminal.model.Barang; import id.amigogroup.posterminal.model.Barang;
import id.amigogroup.posterminal.model.DNotaTunai; import id.amigogroup.posterminal.model.DNotaTunai;
import id.amigogroup.posterminal.model.Karyawan; import id.amigogroup.posterminal.model.Karyawan;
@ -20,6 +21,7 @@ import io.reactivex.schedulers.Schedulers;
import java.net.SocketException; import java.net.SocketException;
import java.net.SocketTimeoutException; import java.net.SocketTimeoutException;
import java.net.UnknownHostException; import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -95,6 +97,13 @@ public class AmigoPosRx {
return UtilsApi.getServiceApiKaryawan().getKaryawanByNik(nik) return UtilsApi.getServiceApiKaryawan().getKaryawanByNik(nik)
.subscribeOn(Schedulers.trampoline()); .subscribeOn(Schedulers.trampoline());
} }
public Observable<ResponseBody> loginKaryawanByNikPin(String nik, String pin) {
HashMap<String, Object> body = new HashMap<>();
body.put("pin", pin);
return UtilsApi.getServiceApiKaryawan().loginKaryawanByNikPin(nik, body)
.subscribeOn(Schedulers.trampoline());
}
//Pelanggan API //Pelanggan API
public Observable<Pelanggan> getPelangganByKodeMember(String kodeMember) { public Observable<Pelanggan> getPelangganByKodeMember(String kodeMember) {

@ -7,7 +7,11 @@ package id.amigogroup.posterminal.api;
import id.amigogroup.posterminal.model.Karyawan; import id.amigogroup.posterminal.model.Karyawan;
import io.reactivex.Observable; import io.reactivex.Observable;
import java.util.HashMap;
import okhttp3.ResponseBody;
import retrofit2.http.Body;
import retrofit2.http.GET; import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Path; import retrofit2.http.Path;
/** /**
@ -15,7 +19,14 @@ import retrofit2.http.Path;
* @author ronal * @author ronal
*/ */
public interface ServiceApiKaryawan { public interface ServiceApiKaryawan {
//KARYAWAN
//Mengambil Karyawan berdasarkan Nik //Mengambil Karyawan berdasarkan Nik
@GET("karyawans/{nik}") @GET("karyawans/{nik}")
Observable<Karyawan> getKaryawanByNik(@Path("nik") String nik); Observable<Karyawan> getKaryawanByNik(@Path("nik") String nik);
//Mengambil Login Karyawan berdasarkan Nik dan Pin
@POST("karyawans/{nik}/auth/pin")
Observable<ResponseBody> loginKaryawanByNikPin(
@Path("nik") String nik,
@Body HashMap<String, Object> pin);
} }

@ -5,6 +5,9 @@
*/ */
package id.amigogroup.posterminal.keamanan; 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.SystemValue;
import id.amigogroup.posterminal.api.AmigoPosRx; import id.amigogroup.posterminal.api.AmigoPosRx;
import id.amigogroup.posterminal.model.Karyawan; import id.amigogroup.posterminal.model.Karyawan;
@ -15,9 +18,7 @@ import io.reactivex.Observer;
import io.reactivex.disposables.Disposable; import io.reactivex.disposables.Disposable;
import java.io.IOException; import java.io.IOException;
import java.net.HttpURLConnection; import java.net.HttpURLConnection;
import java.net.SocketTimeoutException;
import java.net.URL; import java.net.URL;
import java.net.UnknownHostException;
import java.util.ResourceBundle; import java.util.ResourceBundle;
import java.util.logging.Level; import java.util.logging.Level;
import java.util.logging.Logger; import java.util.logging.Logger;
@ -33,6 +34,7 @@ import javafx.scene.control.TextField;
import javafx.scene.image.Image; import javafx.scene.image.Image;
import javafx.scene.layout.AnchorPane; import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage; import javafx.stage.Stage;
import okhttp3.ResponseBody;
import retrofit2.HttpException; import retrofit2.HttpException;
/** /**
@ -73,33 +75,64 @@ public class FormLoginController implements Initializable {
@FXML @FXML
public void btnLoginOnAction(ActionEvent event) { public void btnLoginOnAction(ActionEvent event) {
if (!fldNamaPengguna.getText().equals("")) { if (!fldNamaPengguna.getText().equals("") && !fldKataSandi.getText().equals("")) {
Observable<Karyawan> karyawanObs = posRx.getKaryawanByNik(fldNamaPengguna.getText()); String nik = fldNamaPengguna.getText();
karyawanObs.subscribe(karyawanLoginObserver);
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<Karyawan> karyawanLoginObserver = new Observer<>() { Observer<KaryawanLogin> karyawanLoginObserver = new Observer<>() {
@Override @Override
public void onSubscribe(Disposable dspsbl) { public void onSubscribe(Disposable dspsbl) {
} }
@Override @Override
public void onNext(Karyawan k) { public void onNext(KaryawanLogin k) {
//kasir, Asko produk, Asko SDM, Pemko //kasir, Asko produk, Asko SDM, Pemko
if (k != null && Fucout.isAllowedLogin(k.getIdPekerjaan())) { if (k != null && Fucout.isAllowedLogin(k.karyawan.getIdPekerjaan())) {
SystemValue.karyawanLogin = k; ObjectMapper mapper = new ObjectMapper();
try { try {
generateNewWindow("/fxml/FormUtama.fxml").show(); JsonNode jsonNode = mapper.readTree(k.result.string());
Stage thisStage = (Stage) apMain.getScene().getWindow(); ObjectNode objectNode = jsonNode.deepCopy();
//close current stage
thisStage.hide(); 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) { } 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); Logger.getLogger(FormLoginController.class.getName()).log(Level.SEVERE, null, ex);
} }
} else { } else {
Alert alert = AlertUtil.getAlertError( 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."); "Karyawan dengan nomor tersebut tidak berwenang untuk mengakses aplikasi ini.");
alert.initOwner((Stage) apMain.getScene().getWindow()); alert.initOwner((Stage) apMain.getScene().getWindow());
alert.show(); alert.show();
@ -126,4 +159,14 @@ public class FormLoginController implements Initializable {
public void onComplete() { public void onComplete() {
} }
}; };
private class KaryawanLogin{
private Karyawan karyawan;
private ResponseBody result;
public KaryawanLogin(Karyawan karyawan, ResponseBody result) {
this.karyawan = karyawan;
this.result = result;
}
}
} }

@ -8,6 +8,7 @@ package id.amigogroup.posterminal.transaksi;
import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ObjectNode; import com.fasterxml.jackson.databind.node.ObjectNode;
import id.amigogroup.posterminal.SystemValue;
import id.amigogroup.posterminal.api.AmigoPosRx; import id.amigogroup.posterminal.api.AmigoPosRx;
import id.amigogroup.posterminal.model.Barang; import id.amigogroup.posterminal.model.Barang;
import id.amigogroup.posterminal.model.DNotaRetur; import id.amigogroup.posterminal.model.DNotaRetur;
@ -82,6 +83,8 @@ public class FormTransaksiReturController implements Initializable {
@FXML @FXML
private Label lblNomorNota; private Label lblNomorNota;
@FXML @FXML
private Label lblKasir;
@FXML
private TableView<TabelBarangRetur> tbvRetur; private TableView<TabelBarangRetur> tbvRetur;
@FXML @FXML
private TableColumn<TabelBarangRetur, Integer> tcNoRetur; private TableColumn<TabelBarangRetur, Integer> tcNoRetur;
@ -107,8 +110,7 @@ public class FormTransaksiReturController implements Initializable {
private StackPane stpReturDrop; private StackPane stpReturDrop;
@FXML @FXML
private Label lblTambahKeTabelRetur; private Label lblTambahKeTabelRetur;
private TableColumn<TabelBarangTunai, Button> tcAction;
private final AmigoPosRx posRx = new AmigoPosRx(); private final AmigoPosRx posRx = new AmigoPosRx();
private String noNota = ""; private String noNota = "";
private final ObservableList<TabelBarangTunai> daftarTabelPenjualan = FXCollections.observableArrayList(); private final ObservableList<TabelBarangTunai> daftarTabelPenjualan = FXCollections.observableArrayList();
@ -156,6 +158,13 @@ public class FormTransaksiReturController implements Initializable {
public void initData(String noNota, boolean baru) { public void initData(String noNota, boolean baru) {
this.noNota = noNota; this.noNota = noNota;
if(!baru){
}
if(SystemValue.karyawanLogin != null){
lblKasir.setText(Fucout.getTextColon(SystemValue.karyawanLogin.getNama()));
}
lblNomorNota.setText(Fucout.getTextColon(noNota)); lblNomorNota.setText(Fucout.getTextColon(noNota));
} }

@ -63,6 +63,8 @@ public class FormTransaksiTunaiController implements Initializable {
@FXML @FXML
private Label lblNoNota; private Label lblNoNota;
@FXML @FXML
private Label lblKasir;
@FXML
private TableView<TabelBarangTunai> tbvTransaksi; private TableView<TabelBarangTunai> tbvTransaksi;
@FXML @FXML
private TableColumn<TabelBarangTunai, Integer> tcNo; private TableColumn<TabelBarangTunai, Integer> tcNo;
@ -133,6 +135,10 @@ public class FormTransaksiTunaiController implements Initializable {
if (!baru) { if (!baru) {
posRx.getDNotaTunaiByNoNota(noNota).subscribe(getDNotaTunaiObserver); posRx.getDNotaTunaiByNoNota(noNota).subscribe(getDNotaTunaiObserver);
} }
if(SystemValue.karyawanLogin != null){
lblKasir.setText(Fucout.getTextColon(SystemValue.karyawanLogin.getNama()));
}
this.parent = parent; this.parent = parent;
this.noNota = noNota; this.noNota = noNota;
lblNoNota.setText(Fucout.getTextColon(noNota)); lblNoNota.setText(Fucout.getTextColon(noNota));
@ -144,8 +150,6 @@ public class FormTransaksiTunaiController implements Initializable {
KeyCombination kcTundaNota = new KeyCodeCombination(KeyCode.T, KeyCombination.CONTROL_DOWN); KeyCombination kcTundaNota = new KeyCodeCombination(KeyCode.T, KeyCombination.CONTROL_DOWN);
Runnable rnTundaNota = () -> { Runnable rnTundaNota = () -> {
//Tunda Nota
System.out.println("Tunda");
List<DNotaTunai> daftarDNotaTunai = new ArrayList<>(); List<DNotaTunai> daftarDNotaTunai = new ArrayList<>();
if (noNota != null && !noNota.equals("")) { if (noNota != null && !noNota.equals("")) {
@ -364,7 +368,7 @@ public class FormTransaksiTunaiController implements Initializable {
total = totalTemp; total = totalTemp;
updateLabelGrandTotal(); updateLabelGrandTotal();
return 0; return totalTemp;
} }
private void updateLabelGrandTotal() { private void updateLabelGrandTotal() {
@ -619,7 +623,7 @@ public class FormTransaksiTunaiController implements Initializable {
Alert alert = AlertUtil.getAlertInfo( Alert alert = AlertUtil.getAlertInfo(
"Berhasil Ditunda", "Berhasil Ditunda",
"Nota berhasil ditunda!"); "Nota berhasil ditunda!");
alert.initOwner(apMain.getScene().getWindow()); alert.initOwner(parent.getWindow());
alert.show(); alert.show();
if (parent != null) { if (parent != null) {

@ -17,6 +17,7 @@ import javafx.scene.image.ImageView;
* @author ronal * @author ronal
*/ */
public class AlertUtil { 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_DITEMUKAN_TITLE = "Error: Data Tidak Ditemukan";
public static final String ERROR_TIDAK_TERDUGA_TITLE = "Error: Terjadi Kesalahan"; public static final String ERROR_TIDAK_TERDUGA_TITLE = "Error: Terjadi Kesalahan";
public static final String ERROR_TIDAK_TERDUGA_MESSAGE = "Terjadi kesalahan yang tidak terduga."; public static final String ERROR_TIDAK_TERDUGA_MESSAGE = "Terjadi kesalahan yang tidak terduga.";

@ -97,7 +97,7 @@
<HBox alignment="CENTER_LEFT" maxWidth="1.7976931348623157E308" spacing="5.0" GridPane.columnIndex="2"> <HBox alignment="CENTER_LEFT" maxWidth="1.7976931348623157E308" spacing="5.0" GridPane.columnIndex="2">
<children> <children>
<Label text="Kasir" /> <Label text="Kasir" />
<Label text=": -" /> <Label fx:id="lblKasir" text=": -" />
</children> </children>
<GridPane.margin> <GridPane.margin>
<Insets top="5.0" /> <Insets top="5.0" />

@ -82,7 +82,7 @@
<Font size="14.0" /> <Font size="14.0" />
</font> </font>
</Label> </Label>
<Label text=": -"> <Label fx:id="lblKasir" text=": -">
<font> <font>
<Font size="14.0" /> <Font size="14.0" />
</font> </font>

Loading…
Cancel
Save