浏览代码

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
父节点
当前提交
d5b49a0985
共有 9 个文件被更改,包括 104 次插入22 次删除
  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 查看文件

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


+ 9
- 0
src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java 查看文件

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


+ 11
- 0
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 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);
} }

+ 57
- 14
src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java 查看文件

@@ -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("")) {
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 @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())) {
SystemValue.karyawanLogin = k;
if (k != null && Fucout.isAllowedLogin(k.karyawan.getIdPekerjaan())) {
ObjectMapper mapper = new ObjectMapper();
try { 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) { } 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;
}
}
} }

+ 11
- 2
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.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));
} }




+ 8
- 4
src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java 查看文件

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


+ 1
- 0
src/main/java/id/amigogroup/posterminal/util/AlertUtil.java 查看文件

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


+ 1
- 1
src/main/resources/fxml/FormTransaksiRetur.fxml 查看文件

@@ -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" />


+ 1
- 1
src/main/resources/fxml/FormTransaksiTunai.fxml 查看文件

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


正在加载...
取消
保存