From a79d2eb66b49c4a52f9940584986b731fd70b48d Mon Sep 17 00:00:00 2001 From: Ronaldo Christnawan Date: Wed, 19 Feb 2020 10:50:58 +0700 Subject: [PATCH] Testing RxJava & Retrofit, Membuat Definisi API untuk Checkin dan Karyawan * [Logic] Login menggunakan get by NIK * [UI] Menampilkan nama kasir * [Logic] Testing request API menggunakan RxJava * [Model] Pagination, Tas, dan Karyawan --- pom.xml | 27 ++ .../posterminal/FormUtamaController.java | 20 ++ .../amigogroup/posterminal/SystemValue.java | 21 ++ .../posterminal/api/AmigoPosRx.java | 25 ++ .../posterminal/api/ServiceApiCheckin.java | 21 ++ .../posterminal/api/ServiceApiKaryawan.java | 21 ++ .../posterminal/api/ServiceGenerator.java | 30 +++ .../amigogroup/posterminal/api/UtilsApi.java | 27 ++ .../bayar/FormBayarController.java | 16 ++ .../bayar/FormBayarOldController.java | 63 ----- .../FormBayarVoucherPromoController.java | 27 ++ .../keamanan/FormLoginController.java | 65 ++++- .../posterminal/model/Karyawan.java | 171 +++++++++++++ .../posterminal/model/Pagination.java | 198 +++++++++++++++ .../id/amigogroup/posterminal/model/Tas.java | 80 ++++++ .../posterminal/util/AlertUtil.java | 25 ++ .../amigogroup/posterminal/util/Fucout.java | 31 ++- src/main/resources/fxml/FormBayar.fxml | 1 + src/main/resources/fxml/FormBayarOld.fxml | 235 ------------------ .../resources/fxml/FormBayarVoucherPromo.fxml | 61 +++++ src/main/resources/fxml/FormLogin.fxml | 6 +- src/main/resources/fxml/FormUtama.fxml | 10 +- 22 files changed, 863 insertions(+), 318 deletions(-) create mode 100644 src/main/java/id/amigogroup/posterminal/SystemValue.java create mode 100644 src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java create mode 100644 src/main/java/id/amigogroup/posterminal/api/ServiceApiCheckin.java create mode 100644 src/main/java/id/amigogroup/posterminal/api/ServiceApiKaryawan.java create mode 100644 src/main/java/id/amigogroup/posterminal/api/ServiceGenerator.java create mode 100644 src/main/java/id/amigogroup/posterminal/api/UtilsApi.java delete mode 100644 src/main/java/id/amigogroup/posterminal/bayar/FormBayarOldController.java create mode 100644 src/main/java/id/amigogroup/posterminal/bayar/FormBayarVoucherPromoController.java create mode 100644 src/main/java/id/amigogroup/posterminal/model/Karyawan.java create mode 100644 src/main/java/id/amigogroup/posterminal/model/Pagination.java create mode 100644 src/main/java/id/amigogroup/posterminal/model/Tas.java create mode 100644 src/main/java/id/amigogroup/posterminal/util/AlertUtil.java delete mode 100644 src/main/resources/fxml/FormBayarOld.fxml create mode 100644 src/main/resources/fxml/FormBayarVoucherPromo.fxml diff --git a/pom.xml b/pom.xml index 02bdc5c..3a851f1 100644 --- a/pom.xml +++ b/pom.xml @@ -9,6 +9,8 @@ 11 11 11.0.2 + 2.7.1 + 2.6 id.amigogroup.posterminal.ShadeApp @@ -40,6 +42,31 @@ ${javafx.version} mac --> + + io.reactivex.rxjava2 + rxjava + 2.2.17 + + + com.squareup.retrofit2 + retrofit + ${retrofit.version} + + + com.squareup.retrofit2 + converter-jackson + ${retrofit.version} + + + com.squareup.retrofit2 + adapter-rxjava2 + ${retrofit.version} + + + commons-lang + commons-lang + ${commons-lang.version} + diff --git a/src/main/java/id/amigogroup/posterminal/FormUtamaController.java b/src/main/java/id/amigogroup/posterminal/FormUtamaController.java index bf2f6a0..15039cb 100644 --- a/src/main/java/id/amigogroup/posterminal/FormUtamaController.java +++ b/src/main/java/id/amigogroup/posterminal/FormUtamaController.java @@ -1,5 +1,8 @@ package id.amigogroup.posterminal; +import com.fasterxml.jackson.databind.ObjectMapper; +import id.amigogroup.posterminal.api.AmigoPosRx; +import id.amigogroup.posterminal.model.Tas; import id.amigogroup.posterminal.pencarian.DialogCariBarangController; import id.amigogroup.posterminal.pencarian.DialogCariNotaTundaController; import id.amigogroup.posterminal.pencarian.DialogCariPelangganController; @@ -9,6 +12,7 @@ import id.amigogroup.posterminal.transaksi.DialogTambahNotaController; import id.amigogroup.posterminal.transaksi.FormTransaksiReturController; import id.amigogroup.posterminal.transaksi.FormTransaksiTunaiController; import id.amigogroup.posterminal.util.Fucout; +import io.reactivex.Observable; import java.io.IOException; import java.net.URL; import java.util.ArrayList; @@ -28,6 +32,7 @@ import javafx.scene.Node; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.scene.control.Button; +import javafx.scene.control.Label; import javafx.scene.control.ScrollPane; import javafx.scene.image.Image; import javafx.scene.input.KeyCode; @@ -48,6 +53,8 @@ public class FormUtamaController implements Initializable { @FXML private VBox vbNavigasi; @FXML + private Label lblNamaLogin; + @FXML private Button btnTunai1Static; @FXML private Button btnRetur1Static; @@ -69,6 +76,19 @@ public class FormUtamaController implements Initializable { @Override public void initialize(URL url, ResourceBundle rb) { // setContent(formFactory.getForm(FormConstanta.TRANSAKSI_TUNAI, this)); +//TESTING RX JAVA + AmigoPosRx posRx = new AmigoPosRx(); + Observable> daftarTas = posRx.getAllTas(); + daftarTas.subscribe((t) -> { + ObjectMapper mapper = new ObjectMapper(); + System.out.println(mapper.writeValueAsString(t)); + //UI Tampilkan + }); + // + + if (SystemValue.karyawan != null) { + lblNamaLogin.setText(Fucout.getTextColon(SystemValue.karyawan.getNama())); + } initShorcuts(); diff --git a/src/main/java/id/amigogroup/posterminal/SystemValue.java b/src/main/java/id/amigogroup/posterminal/SystemValue.java new file mode 100644 index 0000000..dcc6347 --- /dev/null +++ b/src/main/java/id/amigogroup/posterminal/SystemValue.java @@ -0,0 +1,21 @@ +/* + * 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; + +import id.amigogroup.posterminal.model.Karyawan; + +/** + * + * @author ronal + */ +public class SystemValue { + //Contoh-contoh + public static String pelanggan = "Jono"; + public static boolean isMember = true; + public static String kasir = "Kasir1"; + // + public static Karyawan karyawan = null; +} diff --git a/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java b/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java new file mode 100644 index 0000000..fddc568 --- /dev/null +++ b/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java @@ -0,0 +1,25 @@ +/* + * 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.api; + +import id.amigogroup.posterminal.model.Karyawan; +import id.amigogroup.posterminal.model.Tas; +import io.reactivex.Observable; +import java.util.List; + +/** + * + * @author ronal + */ +public class AmigoPosRx { + public Observable> getAllTas(){ + return UtilsApi.getServiceApiCheckin().getAllTas(); + } + + public Observable getKaryawanByNik(String nik){ + return UtilsApi.getServiceApiKaryawan().getKaryawanByNik(nik); + } +} diff --git a/src/main/java/id/amigogroup/posterminal/api/ServiceApiCheckin.java b/src/main/java/id/amigogroup/posterminal/api/ServiceApiCheckin.java new file mode 100644 index 0000000..767fa79 --- /dev/null +++ b/src/main/java/id/amigogroup/posterminal/api/ServiceApiCheckin.java @@ -0,0 +1,21 @@ +/* + * 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.api; + +import id.amigogroup.posterminal.model.Tas; +import io.reactivex.Observable; +import java.util.List; +import retrofit2.http.GET; + +/** + * + * @author ronal + */ +public interface ServiceApiCheckin { + //Mengambil Semua Tas + @GET("tas") + Observable> getAllTas(); +} diff --git a/src/main/java/id/amigogroup/posterminal/api/ServiceApiKaryawan.java b/src/main/java/id/amigogroup/posterminal/api/ServiceApiKaryawan.java new file mode 100644 index 0000000..d71c463 --- /dev/null +++ b/src/main/java/id/amigogroup/posterminal/api/ServiceApiKaryawan.java @@ -0,0 +1,21 @@ +/* + * 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.api; + +import id.amigogroup.posterminal.model.Karyawan; +import io.reactivex.Observable; +import retrofit2.http.GET; +import retrofit2.http.Path; + +/** + * + * @author ronal + */ +public interface ServiceApiKaryawan { + //Mengambil Karyawan berdasarkan Nik + @GET("karyawans/{nik}") + Observable getKaryawanByNik(@Path("nik") String nik); +} diff --git a/src/main/java/id/amigogroup/posterminal/api/ServiceGenerator.java b/src/main/java/id/amigogroup/posterminal/api/ServiceGenerator.java new file mode 100644 index 0000000..ce4506e --- /dev/null +++ b/src/main/java/id/amigogroup/posterminal/api/ServiceGenerator.java @@ -0,0 +1,30 @@ +/* + * 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.api; + +import okhttp3.OkHttpClient; +import retrofit2.Retrofit; +import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory; +import retrofit2.converter.jackson.JacksonConverterFactory; + +/** + * + * @author ronal + */ +public class ServiceGenerator { + + private static OkHttpClient.Builder httpClient = new OkHttpClient.Builder(); + + private static Retrofit.Builder builder + = new Retrofit.Builder() + .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) + .addConverterFactory(JacksonConverterFactory.create()); + + public static S createService(String baseUrl, Class serviceClass) { + Retrofit retrofit = builder.baseUrl(baseUrl).client(httpClient.build()).build(); + return retrofit.create(serviceClass); + } +} diff --git a/src/main/java/id/amigogroup/posterminal/api/UtilsApi.java b/src/main/java/id/amigogroup/posterminal/api/UtilsApi.java new file mode 100644 index 0000000..88be134 --- /dev/null +++ b/src/main/java/id/amigogroup/posterminal/api/UtilsApi.java @@ -0,0 +1,27 @@ +/* + * 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.api; + +/** + * + * @author ronal + */ +public class UtilsApi { +// public static final String API_BASE_URL_BARANG = "http://192.168.0.230:8081/api/"; +// public static final String API_BASE_URL_CHECKIN = "http://192.168.0.230:8082/api/"; + public static final String API_BASE_URL_BARANG = "https://barang.amigogroup.id/api/"; + public static final String API_BASE_URL_CHECKIN = "https://checkin.amigogroup.id/api/"; + public static final String API_BASE_URL_KARYAWAN = "https://karyawan.amigogroup.id/api/"; + public static final String API_BASE_URL_PELANGGAN = "https://pelanggan.amigogroup.id/api/"; + + public static ServiceApiCheckin getServiceApiCheckin() { + return ServiceGenerator.createService(API_BASE_URL_CHECKIN, ServiceApiCheckin.class); + } + + public static ServiceApiKaryawan getServiceApiKaryawan() { + return ServiceGenerator.createService(API_BASE_URL_KARYAWAN, ServiceApiKaryawan.class); + } +} diff --git a/src/main/java/id/amigogroup/posterminal/bayar/FormBayarController.java b/src/main/java/id/amigogroup/posterminal/bayar/FormBayarController.java index 7025ddc..7059937 100644 --- a/src/main/java/id/amigogroup/posterminal/bayar/FormBayarController.java +++ b/src/main/java/id/amigogroup/posterminal/bayar/FormBayarController.java @@ -31,6 +31,7 @@ public class FormBayarController implements Initializable { private final String BAYAR_TUNAI = "Tunai"; private final String BAYAR_KARTU = "Debit/Kredit"; private final String BAYAR_RETUR = "Voucher Retur"; + private final String BAYAR_PROMO = "Voucher Promo"; private final String BAYAR_GOPAY = "GoPay"; private final String BAYAR_OVO = "OVO"; private final String BAYAR_POIN = "Poin"; @@ -40,6 +41,7 @@ public class FormBayarController implements Initializable { Node nodeTunai; Node nodeKartu; Node nodeRetur; + Node nodePromo; Node nodeGopay; Node nodeOvo; Node nodePoin; @@ -104,6 +106,20 @@ public class FormBayarController implements Initializable { } } break; + case BAYAR_PROMO: + if (kumpulanContent.nodePromo == null && chkSource.selectedProperty().get()) { + loader.setLocation(getClass().getResource("/fxml/FormBayarVoucherPromo.fxml")); + node = loader.load(); + + vbContent.getChildren().add(node); + kumpulanContent.nodePromo = node; + } else { + if (kumpulanContent.nodePromo != null) { + vbContent.getChildren().remove(kumpulanContent.nodePromo); + kumpulanContent.nodePromo = null; + } + } + break; case BAYAR_GOPAY: break; case BAYAR_OVO: diff --git a/src/main/java/id/amigogroup/posterminal/bayar/FormBayarOldController.java b/src/main/java/id/amigogroup/posterminal/bayar/FormBayarOldController.java deleted file mode 100644 index be78368..0000000 --- a/src/main/java/id/amigogroup/posterminal/bayar/FormBayarOldController.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * 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.bayar; - -import id.amigogroup.posterminal.util.Fucout; -import java.net.URL; -import java.util.ResourceBundle; -import javafx.fxml.FXML; -import javafx.fxml.Initializable; -import javafx.scene.control.TextField; -import javafx.scene.input.KeyCode; -import javafx.scene.input.KeyEvent; -import javafx.scene.robot.Robot; - -/** - * FXML Controller class - * - * @author ronal - */ -public class FormBayarOldController implements Initializable { - - @FXML - private TextField fldNoKartu1; - @FXML - private TextField fldNoKartu2; - @FXML - private TextField fldNoKartu3; - @FXML - private TextField fldNoKartu4; - - /** - * Initializes the controller class. - */ - @Override - public void initialize(URL url, ResourceBundle rb) { - initComponents(); - } - - private void initComponents() { - Fucout.forceFieldInteger(fldNoKartu1, 4); - Fucout.forceFieldInteger(fldNoKartu2, 4); - Fucout.forceFieldInteger(fldNoKartu3, 4); - Fucout.forceFieldInteger(fldNoKartu4, 4); - } - - @FXML - public void fldNomorKartuOnKeyTyped(KeyEvent event) { - if (event.getSource() != null - && event.getSource() instanceof TextField) { - TextField field = (TextField) event.getSource(); - - if (field.getText().length() >= 4) { - if (event.getCharacter().matches("[0-9]")) { - Robot robot = new Robot(); - robot.keyType(KeyCode.TAB); - } - } - } - } -} diff --git a/src/main/java/id/amigogroup/posterminal/bayar/FormBayarVoucherPromoController.java b/src/main/java/id/amigogroup/posterminal/bayar/FormBayarVoucherPromoController.java new file mode 100644 index 0000000..7d230a8 --- /dev/null +++ b/src/main/java/id/amigogroup/posterminal/bayar/FormBayarVoucherPromoController.java @@ -0,0 +1,27 @@ +/* + * 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.bayar; + +import java.net.URL; +import java.util.ResourceBundle; +import javafx.fxml.Initializable; + +/** + * FXML Controller class + * + * @author ronal + */ +public class FormBayarVoucherPromoController implements Initializable { + + /** + * Initializes the controller class. + */ + @Override + public void initialize(URL url, ResourceBundle rb) { + // TODO + } + +} diff --git a/src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java b/src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java index bc8530d..06fc7c3 100644 --- a/src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java +++ b/src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java @@ -5,8 +5,14 @@ */ package id.amigogroup.posterminal.keamanan; +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 java.io.IOException; +import java.net.HttpURLConnection; import java.net.URL; import java.util.ResourceBundle; import java.util.logging.Level; @@ -17,9 +23,13 @@ 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 retrofit2.HttpException; /** * FXML Controller class @@ -30,6 +40,12 @@ 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. @@ -53,14 +69,47 @@ public class FormLoginController implements Initializable { @FXML public void btnLoginOnAction(ActionEvent event) { - try { - generateNewWindow("/fxml/FormUtama.fxml").show(); - Stage thisStage = (Stage) apMain.getScene().getWindow(); - //close current stage - thisStage.hide(); - } catch (IOException ex) { - Logger.getLogger(FormLoginController.class.getName()).log(Level.SEVERE, null, ex); - } + Observable karyawanObs = posRx.getKaryawanByNik(fldNamaPengguna.getText()); + + karyawanObs.subscribe((k) -> { + //kasir, Asko produk, Asko SDM, Pemko + if (k != null && Fucout.isAllowedLogin(k.getIdPekerjaan())) { + SystemValue.karyawan = k; + try { + generateNewWindow("/fxml/FormUtama.fxml").show(); + Stage thisStage = (Stage) apMain.getScene().getWindow(); + //close current stage + thisStage.hide(); + } catch (IOException ex) { + Logger.getLogger(FormLoginController.class.getName()).log(Level.SEVERE, null, ex); + } + }else{ + Alert alert = AlertUtil.getAlertError( + "Error: Karyawan Tidak Boleh Akses", + "Karyawan dengan nomor tersebut tidak berwenang untuk mengakses aplikasi ini."); + alert.initOwner((Stage) apMain.getScene().getWindow()); + alert.show(); + } + }, error -> { + System.out.println(error.getMessage()); + 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((Stage) apMain.getScene().getWindow()); + alert.show(); + } + } else { + Alert alert = AlertUtil.getAlertError( + AlertUtil.ERROR_TIDAK_TERDUGA_TITLE, + "Terjadi kesalahan yang tidak terduga."); + alert.initOwner((Stage) apMain.getScene().getWindow()); + alert.show(); + } +// System.out.println(error.getMessage()); + }); } } diff --git a/src/main/java/id/amigogroup/posterminal/model/Karyawan.java b/src/main/java/id/amigogroup/posterminal/model/Karyawan.java new file mode 100644 index 0000000..b3f671c --- /dev/null +++ b/src/main/java/id/amigogroup/posterminal/model/Karyawan.java @@ -0,0 +1,171 @@ + +package id.amigogroup.posterminal.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + +//@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "nik", + "nama", + "username", + "password", + "id_pekerjaan", + "id_department", + "last_login_plafon", + "last_login_CS", + "aktif", + "pin" +}) +public class Karyawan { + + @JsonProperty("nik") + private String nik; + @JsonProperty("nama") + private String nama; + @JsonProperty("username") + private String username; + @JsonProperty("password") + private String password; + @JsonProperty("id_pekerjaan") + private String idPekerjaan; + @JsonProperty("id_department") + private String idDepartment; + @JsonProperty("last_login_plafon") + private Object lastLoginPlafon; + @JsonProperty("last_login_CS") + private String lastLoginCS; + @JsonProperty("aktif") + private String aktif; + @JsonProperty("pin") + private String pin; + + @JsonProperty("nik") + public String getNik() { + return nik; + } + + @JsonProperty("nik") + public void setNik(String nik) { + this.nik = nik; + } + + @JsonProperty("nama") + public String getNama() { + return nama; + } + + @JsonProperty("nama") + public void setNama(String nama) { + this.nama = nama; + } + + @JsonProperty("username") + public String getUsername() { + return username; + } + + @JsonProperty("username") + public void setUsername(String username) { + this.username = username; + } + + @JsonProperty("password") + public String getPassword() { + return password; + } + + @JsonProperty("password") + public void setPassword(String password) { + this.password = password; + } + + @JsonProperty("id_pekerjaan") + public String getIdPekerjaan() { + return idPekerjaan; + } + + @JsonProperty("id_pekerjaan") + public void setIdPekerjaan(String idPekerjaan) { + this.idPekerjaan = idPekerjaan; + } + + @JsonProperty("id_department") + public String getIdDepartment() { + return idDepartment; + } + + @JsonProperty("id_department") + public void setIdDepartment(String idDepartment) { + this.idDepartment = idDepartment; + } + + @JsonProperty("last_login_plafon") + public Object getLastLoginPlafon() { + return lastLoginPlafon; + } + + @JsonProperty("last_login_plafon") + public void setLastLoginPlafon(Object lastLoginPlafon) { + this.lastLoginPlafon = lastLoginPlafon; + } + + @JsonProperty("last_login_CS") + public String getLastLoginCS() { + return lastLoginCS; + } + + @JsonProperty("last_login_CS") + public void setLastLoginCS(String lastLoginCS) { + this.lastLoginCS = lastLoginCS; + } + + @JsonProperty("aktif") + public String getAktif() { + return aktif; + } + + @JsonProperty("aktif") + public void setAktif(String aktif) { + this.aktif = aktif; + } + + @JsonProperty("pin") + public String getPin() { + return pin; + } + + @JsonProperty("pin") + public void setPin(String pin) { + this.pin = pin; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("nik", nik).append("nama", nama).append("username", username).append("password", password).append("idPekerjaan", idPekerjaan).append("idDepartment", idDepartment).append("lastLoginPlafon", lastLoginPlafon).append("lastLoginCS", lastLoginCS).append("aktif", aktif).append("pin", pin).toString(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(nik).append(password).append(nama).append(pin).append(lastLoginPlafon).append(lastLoginCS).append(aktif).append(username).append(idPekerjaan).append(idDepartment).toHashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof Karyawan) == false) { + return false; + } + Karyawan rhs = ((Karyawan) other); + return new EqualsBuilder().append(nik, rhs.nik).append(password, rhs.password).append(nama, rhs.nama).append(pin, rhs.pin).append(lastLoginPlafon, rhs.lastLoginPlafon).append(lastLoginCS, rhs.lastLoginCS).append(aktif, rhs.aktif).append(username, rhs.username).append(idPekerjaan, rhs.idPekerjaan).append(idDepartment, rhs.idDepartment).isEquals(); + } + +} diff --git a/src/main/java/id/amigogroup/posterminal/model/Pagination.java b/src/main/java/id/amigogroup/posterminal/model/Pagination.java new file mode 100644 index 0000000..7d288b5 --- /dev/null +++ b/src/main/java/id/amigogroup/posterminal/model/Pagination.java @@ -0,0 +1,198 @@ + +package id.amigogroup.posterminal.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import java.util.List; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + +//@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "current_page", + "data", + "first_page_url", + "from", + "last_page", + "last_page_url", + "next_page_url", + "path", + "per_page", + "prev_page_url", + "to", + "total" +}) +public class Pagination { + + @JsonProperty("current_page") + private Integer currentPage; + @JsonProperty("data") + private List data = null; + @JsonProperty("first_page_url") + private String firstPageUrl; + @JsonProperty("from") + private Integer from; + @JsonProperty("last_page") + private Integer lastPage; + @JsonProperty("last_page_url") + private String lastPageUrl; + @JsonProperty("next_page_url") + private String nextPageUrl; + @JsonProperty("path") + private String path; + @JsonProperty("per_page") + private Integer perPage; + @JsonProperty("prev_page_url") + private Object prevPageUrl; + @JsonProperty("to") + private Integer to; + @JsonProperty("total") + private Integer total; + + @JsonProperty("current_page") + public Integer getCurrentPage() { + return currentPage; + } + + @JsonProperty("current_page") + public void setCurrentPage(Integer currentPage) { + this.currentPage = currentPage; + } + + @JsonProperty("data") + public List getData() { + return data; + } + + @JsonProperty("data") + public void setData(List data) { + this.data = data; + } + + @JsonProperty("first_page_url") + public String getFirstPageUrl() { + return firstPageUrl; + } + + @JsonProperty("first_page_url") + public void setFirstPageUrl(String firstPageUrl) { + this.firstPageUrl = firstPageUrl; + } + + @JsonProperty("from") + public Integer getFrom() { + return from; + } + + @JsonProperty("from") + public void setFrom(Integer from) { + this.from = from; + } + + @JsonProperty("last_page") + public Integer getLastPage() { + return lastPage; + } + + @JsonProperty("last_page") + public void setLastPage(Integer lastPage) { + this.lastPage = lastPage; + } + + @JsonProperty("last_page_url") + public String getLastPageUrl() { + return lastPageUrl; + } + + @JsonProperty("last_page_url") + public void setLastPageUrl(String lastPageUrl) { + this.lastPageUrl = lastPageUrl; + } + + @JsonProperty("next_page_url") + public String getNextPageUrl() { + return nextPageUrl; + } + + @JsonProperty("next_page_url") + public void setNextPageUrl(String nextPageUrl) { + this.nextPageUrl = nextPageUrl; + } + + @JsonProperty("path") + public String getPath() { + return path; + } + + @JsonProperty("path") + public void setPath(String path) { + this.path = path; + } + + @JsonProperty("per_page") + public Integer getPerPage() { + return perPage; + } + + @JsonProperty("per_page") + public void setPerPage(Integer perPage) { + this.perPage = perPage; + } + + @JsonProperty("prev_page_url") + public Object getPrevPageUrl() { + return prevPageUrl; + } + + @JsonProperty("prev_page_url") + public void setPrevPageUrl(Object prevPageUrl) { + this.prevPageUrl = prevPageUrl; + } + + @JsonProperty("to") + public Integer getTo() { + return to; + } + + @JsonProperty("to") + public void setTo(Integer to) { + this.to = to; + } + + @JsonProperty("total") + public Integer getTotal() { + return total; + } + + @JsonProperty("total") + public void setTotal(Integer total) { + this.total = total; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("currentPage", currentPage).append("data", data).append("firstPageUrl", firstPageUrl).append("from", from).append("lastPage", lastPage).append("lastPageUrl", lastPageUrl).append("nextPageUrl", nextPageUrl).append("path", path).append("perPage", perPage).append("prevPageUrl", prevPageUrl).append("to", to).append("total", total).toString(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(lastPageUrl).append(nextPageUrl).append(data).append(lastPage).append(prevPageUrl).append(path).append(total).append(firstPageUrl).append(perPage).append(from).append(to).append(currentPage).toHashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof Pagination) == false) { + return false; + } + Pagination rhs = ((Pagination) other); + return new EqualsBuilder().append(lastPageUrl, rhs.lastPageUrl).append(nextPageUrl, rhs.nextPageUrl).append(data, rhs.data).append(lastPage, rhs.lastPage).append(prevPageUrl, rhs.prevPageUrl).append(path, rhs.path).append(total, rhs.total).append(firstPageUrl, rhs.firstPageUrl).append(perPage, rhs.perPage).append(from, rhs.from).append(to, rhs.to).append(currentPage, rhs.currentPage).isEquals(); + } + +} \ No newline at end of file diff --git a/src/main/java/id/amigogroup/posterminal/model/Tas.java b/src/main/java/id/amigogroup/posterminal/model/Tas.java new file mode 100644 index 0000000..5bd814b --- /dev/null +++ b/src/main/java/id/amigogroup/posterminal/model/Tas.java @@ -0,0 +1,80 @@ + +package id.amigogroup.posterminal.model; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; +import org.apache.commons.lang.builder.EqualsBuilder; +import org.apache.commons.lang.builder.HashCodeBuilder; +import org.apache.commons.lang.builder.ToStringBuilder; + +//@JsonIgnoreProperties(ignoreUnknown = true) +@JsonInclude(JsonInclude.Include.NON_NULL) +@JsonPropertyOrder({ + "id", + "kode", + "status" +}) +public class Tas { + + @JsonProperty("id") + private Integer id; + @JsonProperty("kode") + private String kode; + @JsonProperty("status") + private String status; + + @JsonProperty("id") + public Integer getId() { + return id; + } + + @JsonProperty("id") + public void setId(Integer id) { + this.id = id; + } + + @JsonProperty("kode") + public String getKode() { + return kode; + } + + @JsonProperty("kode") + public void setKode(String kode) { + this.kode = kode; + } + + @JsonProperty("status") + public String getStatus() { + return status; + } + + @JsonProperty("status") + public void setStatus(String status) { + this.status = status; + } + + @Override + public String toString() { + return new ToStringBuilder(this).append("id", id).append("kode", kode).append("status", status).toString(); + } + + @Override + public int hashCode() { + return new HashCodeBuilder().append(id).append(kode).append(status).toHashCode(); + } + + @Override + public boolean equals(Object other) { + if (other == this) { + return true; + } + if ((other instanceof Tas) == false) { + return false; + } + Tas rhs = ((Tas) other); + return new EqualsBuilder().append(id, rhs.id).append(kode, rhs.kode).append(status, rhs.status).isEquals(); + } + +} diff --git a/src/main/java/id/amigogroup/posterminal/util/AlertUtil.java b/src/main/java/id/amigogroup/posterminal/util/AlertUtil.java new file mode 100644 index 0000000..3e24e17 --- /dev/null +++ b/src/main/java/id/amigogroup/posterminal/util/AlertUtil.java @@ -0,0 +1,25 @@ +/* + * 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.util; + +import javafx.scene.control.Alert; +import javafx.scene.control.ButtonType; + +/** + * + * @author ronal + */ +public class AlertUtil { + 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 Alert getAlertError(String title, String message){ + Alert alert = new Alert(Alert.AlertType.ERROR, message, ButtonType.OK); + alert.setTitle(title); + alert.setHeaderText(null); + return alert; + } +} diff --git a/src/main/java/id/amigogroup/posterminal/util/Fucout.java b/src/main/java/id/amigogroup/posterminal/util/Fucout.java index 589f881..4c4e514 100644 --- a/src/main/java/id/amigogroup/posterminal/util/Fucout.java +++ b/src/main/java/id/amigogroup/posterminal/util/Fucout.java @@ -24,23 +24,38 @@ public class Fucout { public static final String TIPE_NOTA_BON = "Bon"; public static final String TIPE_NOTA_BAWA_DULU = "Bawa"; public static final String TIPE_NOTA_RETUR = "Retur"; - + //IMAGES URL public static final String APP_ICON = "/assets/logo-mini-squared.png"; //FUNCTIONS - public static void scrollToNode(ScrollPane scrollPane, Node node){ + public static boolean isAllowedLogin(String pekerjaan) { + return pekerjaan !=null && !pekerjaan.equals("") && + (pekerjaan.toLowerCase().equals("kasir") + || pekerjaan.toLowerCase().equals("asisten pemimpin toko") + || pekerjaan.toLowerCase().equals("asisten pemimpin toko produk") + || pekerjaan.toLowerCase().equals("pemimpin toko")); + } + + public static String getTextColon(String text) { + if (text == null || text.equals("")) { + return ": -"; + } + return ": " + text; + } + + public static void scrollToNode(ScrollPane scrollPane, Node node) { double h = scrollPane.getContent().getBoundsInLocal().getHeight(); - double y = (node.getBoundsInParent().getMaxY() + - node.getBoundsInParent().getMinY()) / 2.0; + double y = (node.getBoundsInParent().getMaxY() + + node.getBoundsInParent().getMinY()) / 2.0; double v = scrollPane.getViewportBounds().getHeight(); scrollPane.setVvalue(scrollPane.getVmax() * ((y - 0.5 * v) / (h - v))); } - - public static final void forceFieldToInteger(TextField field){ - forceFieldInteger(field,0); + + public static final void forceFieldToInteger(TextField field) { + forceFieldInteger(field, 0); } - + public static final void forceFieldInteger(TextField field, int max) { field.textProperty().addListener(new ChangeListener() { @Override diff --git a/src/main/resources/fxml/FormBayar.fxml b/src/main/resources/fxml/FormBayar.fxml index 40bd53a..e007add 100644 --- a/src/main/resources/fxml/FormBayar.fxml +++ b/src/main/resources/fxml/FormBayar.fxml @@ -32,6 +32,7 @@ + diff --git a/src/main/resources/fxml/FormBayarOld.fxml b/src/main/resources/fxml/FormBayarOld.fxml deleted file mode 100644 index 3c90411..0000000 --- a/src/main/resources/fxml/FormBayarOld.fxml +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/fxml/FormBayarVoucherPromo.fxml b/src/main/resources/fxml/FormBayarVoucherPromo.fxml new file mode 100644 index 0000000..c0dd103 --- /dev/null +++ b/src/main/resources/fxml/FormBayarVoucherPromo.fxml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/resources/fxml/FormLogin.fxml b/src/main/resources/fxml/FormLogin.fxml index 890dd12..4742491 100644 --- a/src/main/resources/fxml/FormLogin.fxml +++ b/src/main/resources/fxml/FormLogin.fxml @@ -23,12 +23,12 @@