Explorar el Código

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 hace 5 años
padre
commit
d5b49a0985
Se han modificado 9 ficheros con 104 adiciones y 22 borrados
  1. +5
    -0
      src/main/java/id/amigogroup/posterminal/FormUtamaController.java
  2. +9
    -0
      src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java
  3. +11
    -0
      src/main/java/id/amigogroup/posterminal/api/ServiceApiKaryawan.java
  4. +57
    -14
      src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java
  5. +11
    -2
      src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java
  6. +8
    -4
      src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java
  7. +1
    -0
      src/main/java/id/amigogroup/posterminal/util/AlertUtil.java
  8. +1
    -1
      src/main/resources/fxml/FormTransaksiRetur.fxml
  9. +1
    -1
      src/main/resources/fxml/FormTransaksiTunai.fxml

+ 5
- 0
src/main/java/id/amigogroup/posterminal/FormUtamaController.java Ver fichero

@@ -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) {


+ 9
- 0
src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java Ver fichero

@@ -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<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
public Observable<Pelanggan> getPelangganByKodeMember(String kodeMember) {


+ 11
- 0
src/main/java/id/amigogroup/posterminal/api/ServiceApiKaryawan.java Ver fichero

@@ -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<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);
}

+ 57
- 14
src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java Ver fichero

@@ -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<Karyawan> 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<Karyawan> karyawanLoginObserver = new Observer<>() {
Observer<KaryawanLogin> 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;
}
}
}

+ 11
- 2
src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java Ver fichero

@@ -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<TabelBarangRetur> tbvRetur;
@FXML
private TableColumn<TabelBarangRetur, Integer> tcNoRetur;
@@ -107,8 +110,7 @@ public class FormTransaksiReturController implements Initializable {
private StackPane stpReturDrop;
@FXML
private Label lblTambahKeTabelRetur;
private TableColumn<TabelBarangTunai, Button> tcAction;

private final AmigoPosRx posRx = new AmigoPosRx();
private String noNota = "";
private final ObservableList<TabelBarangTunai> 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));
}



+ 8
- 4
src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java Ver fichero

@@ -63,6 +63,8 @@ public class FormTransaksiTunaiController implements Initializable {
@FXML
private Label lblNoNota;
@FXML
private Label lblKasir;
@FXML
private TableView<TabelBarangTunai> tbvTransaksi;
@FXML
private TableColumn<TabelBarangTunai, Integer> 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<DNotaTunai> 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) {


+ 1
- 0
src/main/java/id/amigogroup/posterminal/util/AlertUtil.java Ver fichero

@@ -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.";


+ 1
- 1
src/main/resources/fxml/FormTransaksiRetur.fxml Ver fichero

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


+ 1
- 1
src/main/resources/fxml/FormTransaksiTunai.fxml Ver fichero

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


Cargando…
Cancelar
Guardar