Browse Source

Menampilkan Pelanggan & Optimisasi RxJava

* Menampilkan data pelanggan dengan menggunakan request API dengan kode member
* Menampilkan alert jika pelanggan berulang tahun
pull/1/head
Ronaldo Christnawan 5 years ago
parent
commit
3ef750a06f
12 changed files with 707 additions and 45 deletions
  1. +2
    -0
      src/main/java/id/amigogroup/posterminal/App.java
  2. +101
    -17
      src/main/java/id/amigogroup/posterminal/FormUtamaController.java
  3. +4
    -6
      src/main/java/id/amigogroup/posterminal/SystemValue.java
  4. +5
    -0
      src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java
  5. +21
    -0
      src/main/java/id/amigogroup/posterminal/api/ServiceApiPelanggan.java
  6. +4
    -0
      src/main/java/id/amigogroup/posterminal/api/UtilsApi.java
  7. +2
    -4
      src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java
  8. +484
    -0
      src/main/java/id/amigogroup/posterminal/model/Pelanggan.java
  9. +15
    -0
      src/main/java/id/amigogroup/posterminal/util/AlertUtil.java
  10. +51
    -2
      src/main/java/id/amigogroup/posterminal/util/Fucout.java
  11. BIN
      src/main/resources/assets/birthday.png
  12. +18
    -16
      src/main/resources/fxml/FormUtama.fxml

+ 2
- 0
src/main/java/id/amigogroup/posterminal/App.java View File

@@ -26,6 +26,8 @@ public class App extends Application {
Parent root = FXMLLoader.load(getClass().getResource("/fxml/FormLogin.fxml")); Parent root = FXMLLoader.load(getClass().getResource("/fxml/FormLogin.fxml"));
Scene scene = new Scene(root); Scene scene = new Scene(root);

System.out.println(Fucout.getNoNotaTemporary());
stage.setScene(scene); stage.setScene(scene);
stage.setTitle(Fucout.APP_TITLE); stage.setTitle(Fucout.APP_TITLE);


+ 101
- 17
src/main/java/id/amigogroup/posterminal/FormUtamaController.java View File

@@ -1,8 +1,9 @@
package id.amigogroup.posterminal; package id.amigogroup.posterminal;


import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectMapper;
import id.amigogroup.posterminal.api.AmigoPosRx; import id.amigogroup.posterminal.api.AmigoPosRx;
import id.amigogroup.posterminal.model.Tas;
import id.amigogroup.posterminal.model.Pelanggan;
import id.amigogroup.posterminal.pencarian.DialogCariBarangController; import id.amigogroup.posterminal.pencarian.DialogCariBarangController;
import id.amigogroup.posterminal.pencarian.DialogCariNotaTundaController; import id.amigogroup.posterminal.pencarian.DialogCariNotaTundaController;
import id.amigogroup.posterminal.pencarian.DialogCariPelangganController; import id.amigogroup.posterminal.pencarian.DialogCariPelangganController;
@@ -11,9 +12,14 @@ import id.amigogroup.posterminal.transaksi.DialogKonfirmasiReturController;
import id.amigogroup.posterminal.transaksi.DialogTambahNotaController; import id.amigogroup.posterminal.transaksi.DialogTambahNotaController;
import id.amigogroup.posterminal.transaksi.FormTransaksiReturController; import id.amigogroup.posterminal.transaksi.FormTransaksiReturController;
import id.amigogroup.posterminal.transaksi.FormTransaksiTunaiController; import id.amigogroup.posterminal.transaksi.FormTransaksiTunaiController;
import id.amigogroup.posterminal.util.AlertUtil;
import id.amigogroup.posterminal.util.Fucout; import id.amigogroup.posterminal.util.Fucout;
import io.reactivex.Observable; import io.reactivex.Observable;
import static io.reactivex.Observable.error;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import java.io.IOException; import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@@ -31,6 +37,7 @@ import javafx.fxml.Initializable;
import javafx.scene.Node; import javafx.scene.Node;
import javafx.scene.Parent; import javafx.scene.Parent;
import javafx.scene.Scene; import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button; import javafx.scene.control.Button;
import javafx.scene.control.Label; import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane; import javafx.scene.control.ScrollPane;
@@ -41,6 +48,7 @@ import javafx.scene.input.KeyCombination;
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 retrofit2.HttpException;


public class FormUtamaController implements Initializable { public class FormUtamaController implements Initializable {


@@ -60,6 +68,14 @@ public class FormUtamaController implements Initializable {
private Button btnRetur1Static; private Button btnRetur1Static;
@FXML @FXML
private Button btnTunai2Static; private Button btnTunai2Static;
@FXML
private Label lblMemberNonMember;
@FXML
private Label lblNamaPelanggan;
@FXML
private Label lblTglLahirPelanggan;
@FXML
private Label lblNoTelpPelanggan;


private final FormFactory formFactory = new FormFactory(); private final FormFactory formFactory = new FormFactory();


@@ -69,25 +85,23 @@ public class FormUtamaController implements Initializable {
private int jumlahNota = 0; private int jumlahNota = 0;
private final char NOTA_PREV = 'p'; private final char NOTA_PREV = 'p';
private final char NOTA_NEXT = 'n'; private final char NOTA_NEXT = 'n';
private Observable<Pelanggan> pelangganObs;


/** /**
* Initializes the controller class. * Initializes the controller class.
*/ */
@Override @Override
public void initialize(URL url, ResourceBundle rb) { public void initialize(URL url, ResourceBundle rb) {
// setContent(formFactory.getForm(FormConstanta.TRANSAKSI_TUNAI, this));
//TESTING RX JAVA
AmigoPosRx posRx = new AmigoPosRx(); AmigoPosRx posRx = new AmigoPosRx();
Observable<List<Tas>> daftarTas = posRx.getAllTas();
daftarTas.subscribe((t) -> {
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(t));
//UI Tampilkan
//Kode Nur Indah Suciati (00334), Kode Wuryaningsih/RT (010004)
updateLabelMemberNonMember();
Platform.runLater(() -> {
posRx.getPelangganByKodeMember("00334").subscribe(pelangganObserver);
}); });
//


if (SystemValue.karyawan != null) {
lblNamaLogin.setText(Fucout.getTextColon(SystemValue.karyawan.getNama()));
if (SystemValue.karyawanLogin != null) {
lblNamaLogin.setText(Fucout.getTextColon(SystemValue.karyawanLogin.getNama()));
} }


initShorcuts(); initShorcuts();
@@ -99,6 +113,7 @@ public class FormUtamaController implements Initializable {
jumlahNota = 3; jumlahNota = 3;


btnTunai1Static.setOnAction((event) -> { btnTunai1Static.setOnAction((event) -> {
posRx.getPelangganByKodeMember("010004").subscribe(pelangganObserver);
setContent(loadNota("", FormConstanta.TRANSAKSI_TUNAI)); setContent(loadNota("", FormConstanta.TRANSAKSI_TUNAI));
updateSelectedNota(event); updateSelectedNota(event);
tipeNotaState = Fucout.TIPE_NOTA_TUNAI; tipeNotaState = Fucout.TIPE_NOTA_TUNAI;
@@ -115,6 +130,28 @@ public class FormUtamaController implements Initializable {
}); });
} }


private void updateLabelPelanggan(Pelanggan p) {
updateLabelMemberNonMember();
if (Fucout.checkBirthday(p.getTglLahir())) {
Alert alertUltah = AlertUtil.getAlertUlangTahun(p.getNama());
alertUltah.initOwner(bpMain.getScene().getWindow());
alertUltah.show();
}
lblNamaPelanggan.setText(Fucout.getTextColon(p.getNama()));
lblTglLahirPelanggan.setText(Fucout.getTextColon(Fucout.formatTanggal(p.getTglLahir())));
lblNoTelpPelanggan.setText(Fucout.getTextColon(
!p.getTelp().equals("") && !p.getPonsel().equals("")
? p.getTelp() + System.lineSeparator() + p.getPonsel() : p.getTelp() + p.getPonsel()));
}

private void updateLabelMemberNonMember() {
if (SystemValue.isMember) {
lblMemberNonMember.setText("Member");
} else {
lblMemberNonMember.setText("Non Member");
}
}

private void updateSelectedNota(ActionEvent event) { private void updateSelectedNota(ActionEvent event) {
Button buttonSource = (Button) event.getSource(); Button buttonSource = (Button) event.getSource();
notaState = navigasi.indexOf(buttonSource); notaState = navigasi.indexOf(buttonSource);
@@ -242,7 +279,7 @@ public class FormUtamaController implements Initializable {
KeyCombination kcCariBarang = new KeyCodeCombination(KeyCode.F5); KeyCombination kcCariBarang = new KeyCodeCombination(KeyCode.F5);
Runnable rnCariBarang = () -> { Runnable rnCariBarang = () -> {
DialogCariBarangController dialogCariBarang = new DialogCariBarangController(); DialogCariBarangController dialogCariBarang = new DialogCariBarangController();
dialogCariBarang.initOwner((Stage) bpMain.getScene().getWindow());
dialogCariBarang.initOwner(bpMain.getScene().getWindow());


Optional<String> result = dialogCariBarang.showAndWait(); Optional<String> result = dialogCariBarang.showAndWait();
System.out.println(result); System.out.println(result);
@@ -252,7 +289,7 @@ public class FormUtamaController implements Initializable {
KeyCombination kcCariPelanggan = new KeyCodeCombination(KeyCode.F6); KeyCombination kcCariPelanggan = new KeyCodeCombination(KeyCode.F6);
Runnable rnCariPelanggan = () -> { Runnable rnCariPelanggan = () -> {
DialogCariPelangganController dialogCariPelanggan = new DialogCariPelangganController(); DialogCariPelangganController dialogCariPelanggan = new DialogCariPelangganController();
dialogCariPelanggan.initOwner((Stage) bpMain.getScene().getWindow());
dialogCariPelanggan.initOwner(bpMain.getScene().getWindow());


Optional<String> result = dialogCariPelanggan.showAndWait(); Optional<String> result = dialogCariPelanggan.showAndWait();
System.out.println(result); System.out.println(result);
@@ -262,7 +299,7 @@ public class FormUtamaController implements Initializable {
KeyCombination kcCariNotaTunda = new KeyCodeCombination(KeyCode.F7); KeyCombination kcCariNotaTunda = new KeyCodeCombination(KeyCode.F7);
Runnable rnCariNotaTunda = () -> { Runnable rnCariNotaTunda = () -> {
DialogCariNotaTundaController dialogCariNotaTunda = new DialogCariNotaTundaController(); DialogCariNotaTundaController dialogCariNotaTunda = new DialogCariNotaTundaController();
dialogCariNotaTunda.initOwner((Stage) bpMain.getScene().getWindow());
dialogCariNotaTunda.initOwner(bpMain.getScene().getWindow());


Optional<String> result = dialogCariNotaTunda.showAndWait(); Optional<String> result = dialogCariNotaTunda.showAndWait();
System.out.println(result); System.out.println(result);
@@ -272,7 +309,7 @@ public class FormUtamaController implements Initializable {
KeyCombination kcCariCetakUlangNota = new KeyCodeCombination(KeyCode.P, KeyCombination.CONTROL_DOWN); KeyCombination kcCariCetakUlangNota = new KeyCodeCombination(KeyCode.P, KeyCombination.CONTROL_DOWN);
Runnable rnCetakUlangNota = () -> { Runnable rnCetakUlangNota = () -> {
DialogCetakUlangNotaController dialogCetakUlangNota = new DialogCetakUlangNotaController(); DialogCetakUlangNotaController dialogCetakUlangNota = new DialogCetakUlangNotaController();
dialogCetakUlangNota.initOwner((Stage) bpMain.getScene().getWindow());
dialogCetakUlangNota.initOwner(bpMain.getScene().getWindow());


Optional<String> result = dialogCetakUlangNota.showAndWait(); Optional<String> result = dialogCetakUlangNota.showAndWait();
System.out.println(result); System.out.println(result);
@@ -287,7 +324,7 @@ public class FormUtamaController implements Initializable {
break; break;
case Fucout.TIPE_NOTA_RETUR: case Fucout.TIPE_NOTA_RETUR:
DialogKonfirmasiReturController dialogKonfirmasiRetur = new DialogKonfirmasiReturController(); DialogKonfirmasiReturController dialogKonfirmasiRetur = new DialogKonfirmasiReturController();
dialogKonfirmasiRetur.initOwner((Stage) bpMain.getScene().getWindow());
dialogKonfirmasiRetur.initOwner(bpMain.getScene().getWindow());
dialogKonfirmasiRetur.showAndWait(); dialogKonfirmasiRetur.showAndWait();
break; break;
} }
@@ -336,7 +373,7 @@ public class FormUtamaController implements Initializable {
@FXML @FXML
void btnTambahNotaOnAction(ActionEvent event) { void btnTambahNotaOnAction(ActionEvent event) {
DialogTambahNotaController dialogTambahNota = new DialogTambahNotaController(); DialogTambahNotaController dialogTambahNota = new DialogTambahNotaController();
dialogTambahNota.initOwner((Stage) bpMain.getScene().getWindow());
dialogTambahNota.initOwner(bpMain.getScene().getWindow());
Optional<String> hasilReturn = dialogTambahNota.showAndWait(); Optional<String> hasilReturn = dialogTambahNota.showAndWait();


if (hasilReturn.isPresent() && hasilReturn.get().equals("Tambah")) { if (hasilReturn.isPresent() && hasilReturn.get().equals("Tambah")) {
@@ -349,4 +386,51 @@ public class FormUtamaController implements Initializable {
jumlahNota++; jumlahNota++;
} }
} }

Observer<Pelanggan> pelangganObserver = new Observer<Pelanggan>() {
@Override
public void onSubscribe(Disposable dspsbl) {
}

@Override
public void onNext(Pelanggan p) {
ObjectMapper mapper = new ObjectMapper();
try {
System.out.println(mapper.writeValueAsString(p));
} catch (JsonProcessingException ex) {
Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, ex);
}
if (p != null) {
SystemValue.isMember = true;
SystemValue.member = p;

updateLabelPelanggan(p);
}
}

@Override
public void onError(Throwable error) {
if (error instanceof HttpException) {
switch (((HttpException) error).code()) {
case HttpURLConnection.HTTP_NOT_FOUND:
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
"Pelanggan dengan kode member tersebut tidak ditemukan.");
alert.initOwner(bpMain.getScene().getWindow());
alert.show();
}
} else {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
"Terjadi kesalahan yang tidak terduga.");
alert.initOwner(bpMain.getScene().getWindow());
alert.show();
Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, error);
}
}

@Override
public void onComplete() {
}
};
} }

+ 4
- 6
src/main/java/id/amigogroup/posterminal/SystemValue.java View File

@@ -6,16 +6,14 @@
package id.amigogroup.posterminal; package id.amigogroup.posterminal;


import id.amigogroup.posterminal.model.Karyawan; import id.amigogroup.posterminal.model.Karyawan;
import id.amigogroup.posterminal.model.Pelanggan;


/** /**
* *
* @author ronal * @author ronal
*/ */
public class SystemValue { 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;
public static boolean isMember = false;
public static Pelanggan member = null;
public static Karyawan karyawanLogin = null;
} }

+ 5
- 0
src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java View File

@@ -6,6 +6,7 @@
package id.amigogroup.posterminal.api; package id.amigogroup.posterminal.api;


import id.amigogroup.posterminal.model.Karyawan; import id.amigogroup.posterminal.model.Karyawan;
import id.amigogroup.posterminal.model.Pelanggan;
import id.amigogroup.posterminal.model.Tas; import id.amigogroup.posterminal.model.Tas;
import io.reactivex.Observable; import io.reactivex.Observable;
import java.util.List; import java.util.List;
@@ -22,4 +23,8 @@ public class AmigoPosRx {
public Observable<Karyawan> getKaryawanByNik(String nik){ public Observable<Karyawan> getKaryawanByNik(String nik){
return UtilsApi.getServiceApiKaryawan().getKaryawanByNik(nik); return UtilsApi.getServiceApiKaryawan().getKaryawanByNik(nik);
} }
public Observable<Pelanggan> getPelangganByKodeMember(String kodeMember){
return UtilsApi.getServiceApiPelanggan().getPelangganByKodeMember(kodeMember);
}
} }

+ 21
- 0
src/main/java/id/amigogroup/posterminal/api/ServiceApiPelanggan.java View File

@@ -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.Pelanggan;
import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Path;

/**
*
* @author ronal
*/
public interface ServiceApiPelanggan {
//Mengambil Pelanggan berdasarkan Kode Member (Alias)
@GET("pelanggans/kode-member/{alias}")
Observable<Pelanggan> getPelangganByKodeMember(@Path("alias") String alias);
}

+ 4
- 0
src/main/java/id/amigogroup/posterminal/api/UtilsApi.java View File

@@ -24,4 +24,8 @@ public class UtilsApi {
public static ServiceApiKaryawan getServiceApiKaryawan() { public static ServiceApiKaryawan getServiceApiKaryawan() {
return ServiceGenerator.createService(API_BASE_URL_KARYAWAN, ServiceApiKaryawan.class); return ServiceGenerator.createService(API_BASE_URL_KARYAWAN, ServiceApiKaryawan.class);
} }
public static ServiceApiPelanggan getServiceApiPelanggan() {
return ServiceGenerator.createService(API_BASE_URL_PELANGGAN, ServiceApiPelanggan.class);
}
} }

+ 2
- 4
src/main/java/id/amigogroup/posterminal/keamanan/FormLoginController.java View File

@@ -70,11 +70,10 @@ public class FormLoginController implements Initializable {
@FXML @FXML
public void btnLoginOnAction(ActionEvent event) { public void btnLoginOnAction(ActionEvent event) {
Observable<Karyawan> karyawanObs = posRx.getKaryawanByNik(fldNamaPengguna.getText()); Observable<Karyawan> karyawanObs = posRx.getKaryawanByNik(fldNamaPengguna.getText());

karyawanObs.subscribe((k) -> { karyawanObs.subscribe((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.getIdPekerjaan())) {
SystemValue.karyawan = k;
SystemValue.karyawanLogin = k;
try { try {
generateNewWindow("/fxml/FormUtama.fxml").show(); generateNewWindow("/fxml/FormUtama.fxml").show();
Stage thisStage = (Stage) apMain.getScene().getWindow(); Stage thisStage = (Stage) apMain.getScene().getWindow();
@@ -91,7 +90,6 @@ public class FormLoginController implements Initializable {
alert.show(); alert.show();
} }
}, error -> { }, error -> {
System.out.println(error.getMessage());
if (error instanceof HttpException) { if (error instanceof HttpException) {
switch (((HttpException) error).code()) { switch (((HttpException) error).code()) {
case HttpURLConnection.HTTP_NOT_FOUND: case HttpURLConnection.HTTP_NOT_FOUND:
@@ -107,8 +105,8 @@ public class FormLoginController implements Initializable {
"Terjadi kesalahan yang tidak terduga."); "Terjadi kesalahan yang tidak terduga.");
alert.initOwner((Stage) apMain.getScene().getWindow()); alert.initOwner((Stage) apMain.getScene().getWindow());
alert.show(); alert.show();
Logger.getLogger(FormLoginController.class.getName()).log(Level.SEVERE, null, error);
} }
// System.out.println(error.getMessage());
}); });
} }




+ 484
- 0
src/main/java/id/amigogroup/posterminal/model/Pelanggan.java View File

@@ -0,0 +1,484 @@

package id.amigogroup.posterminal.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import java.util.Date;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"kd_customer",
"alias",
"migrasi",
"ktp",
"nama",
"alamat",
"tempat_lahir",
"tgl_lahir",
"jns_kelamin",
"agama",
"kd_lokasi",
"wilayah",
"pekerjaan",
"status_nikah",
"telp",
"ponsel",
"email",
"status",
"upline",
"jenis_customer",
"jenis_customer_bon",
"jenis_komisi",
"status_ptt",
"status_plgaktif",
"tgl_entry",
"user_entry",
"tgl_update",
"user_update",
"tgl_pemutihan",
"user_pemutihan",
"saldonetbon",
"poin",
"gambar",
"firebase_uid"
})
public class Pelanggan {

@JsonProperty("kd_customer")
private String kdCustomer;
@JsonProperty("alias")
private String alias;
@JsonProperty("migrasi")
private Date migrasi;
@JsonProperty("ktp")
private String ktp;
@JsonProperty("nama")
private String nama;
@JsonProperty("alamat")
private String alamat;
@JsonProperty("tempat_lahir")
private String tempatLahir;
//KALAU BUTUH TIMESTAMP
//@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd@HH:mm:ss.SSSZ")
@JsonProperty("tgl_lahir")
private Date tglLahir;
@JsonProperty("jns_kelamin")
private String jnsKelamin;
@JsonProperty("agama")
private String agama;
@JsonProperty("kd_lokasi")
private String kdLokasi;
@JsonProperty("wilayah")
private String wilayah;
@JsonProperty("pekerjaan")
private String pekerjaan;
@JsonProperty("status_nikah")
private String statusNikah;
@JsonProperty("telp")
private String telp;
@JsonProperty("ponsel")
private String ponsel;
@JsonProperty("email")
private String email;
@JsonProperty("status")
private String status;
@JsonProperty("upline")
private String upline;
@JsonProperty("jenis_customer")
private String jenisCustomer;
@JsonProperty("jenis_customer_bon")
private String jenisCustomerBon;
@JsonProperty("jenis_komisi")
private String jenisKomisi;
@JsonProperty("status_ptt")
private String statusPtt;
@JsonProperty("status_plgaktif")
private String statusPlgaktif;
@JsonProperty("tgl_entry")
private String tglEntry;
@JsonProperty("user_entry")
private String userEntry;
@JsonProperty("tgl_update")
private String tglUpdate;
@JsonProperty("user_update")
private String userUpdate;
@JsonProperty("tgl_pemutihan")
private String tglPemutihan;
@JsonProperty("user_pemutihan")
private String userPemutihan;
@JsonProperty("saldonetbon")
private Integer saldonetbon;
@JsonProperty("poin")
private Integer poin;
@JsonProperty("gambar")
private String gambar;
@JsonProperty("firebase_uid")
private String firebaseUid;

@JsonProperty("kd_customer")
public String getKdCustomer() {
return kdCustomer;
}

@JsonProperty("kd_customer")
public void setKdCustomer(String kdCustomer) {
this.kdCustomer = kdCustomer;
}

@JsonProperty("alias")
public String getAlias() {
return alias;
}

@JsonProperty("alias")
public void setAlias(String alias) {
this.alias = alias;
}

@JsonProperty("migrasi")
public Date getMigrasi() {
return migrasi;
}

@JsonProperty("migrasi")
public void setMigrasi(Date migrasi) {
this.migrasi = migrasi;
}

@JsonProperty("ktp")
public String getKtp() {
return ktp;
}

@JsonProperty("ktp")
public void setKtp(String ktp) {
this.ktp = ktp;
}

@JsonProperty("nama")
public String getNama() {
return nama;
}

@JsonProperty("nama")
public void setNama(String nama) {
this.nama = nama;
}

@JsonProperty("alamat")
public String getAlamat() {
return alamat;
}

@JsonProperty("alamat")
public void setAlamat(String alamat) {
this.alamat = alamat;
}

@JsonProperty("tempat_lahir")
public String getTempatLahir() {
return tempatLahir;
}

@JsonProperty("tempat_lahir")
public void setTempatLahir(String tempatLahir) {
this.tempatLahir = tempatLahir;
}

@JsonProperty("tgl_lahir")
public Date getTglLahir() {
return tglLahir;
}

@JsonProperty("tgl_lahir")
public void setTglLahir(Date tglLahir) {
this.tglLahir = tglLahir;
}

@JsonProperty("jns_kelamin")
public String getJnsKelamin() {
return jnsKelamin;
}

@JsonProperty("jns_kelamin")
public void setJnsKelamin(String jnsKelamin) {
this.jnsKelamin = jnsKelamin;
}

@JsonProperty("agama")
public String getAgama() {
return agama;
}

@JsonProperty("agama")
public void setAgama(String agama) {
this.agama = agama;
}

@JsonProperty("kd_lokasi")
public String getKdLokasi() {
return kdLokasi;
}

@JsonProperty("kd_lokasi")
public void setKdLokasi(String kdLokasi) {
this.kdLokasi = kdLokasi;
}

@JsonProperty("wilayah")
public String getWilayah() {
return wilayah;
}

@JsonProperty("wilayah")
public void setWilayah(String wilayah) {
this.wilayah = wilayah;
}

@JsonProperty("pekerjaan")
public String getPekerjaan() {
return pekerjaan;
}

@JsonProperty("pekerjaan")
public void setPekerjaan(String pekerjaan) {
this.pekerjaan = pekerjaan;
}

@JsonProperty("status_nikah")
public String getStatusNikah() {
return statusNikah;
}

@JsonProperty("status_nikah")
public void setStatusNikah(String statusNikah) {
this.statusNikah = statusNikah;
}

@JsonProperty("telp")
public String getTelp() {
return telp;
}

@JsonProperty("telp")
public void setTelp(String telp) {
this.telp = telp;
}

@JsonProperty("ponsel")
public String getPonsel() {
return ponsel;
}

@JsonProperty("ponsel")
public void setPonsel(String ponsel) {
this.ponsel = ponsel;
}

@JsonProperty("email")
public String getEmail() {
return email;
}

@JsonProperty("email")
public void setEmail(String email) {
this.email = email;
}

@JsonProperty("status")
public String getStatus() {
return status;
}

@JsonProperty("status")
public void setStatus(String status) {
this.status = status;
}

@JsonProperty("upline")
public String getUpline() {
return upline;
}

@JsonProperty("upline")
public void setUpline(String upline) {
this.upline = upline;
}

@JsonProperty("jenis_customer")
public String getJenisCustomer() {
return jenisCustomer;
}

@JsonProperty("jenis_customer")
public void setJenisCustomer(String jenisCustomer) {
this.jenisCustomer = jenisCustomer;
}

@JsonProperty("jenis_customer_bon")
public String getJenisCustomerBon() {
return jenisCustomerBon;
}

@JsonProperty("jenis_customer_bon")
public void setJenisCustomerBon(String jenisCustomerBon) {
this.jenisCustomerBon = jenisCustomerBon;
}

@JsonProperty("jenis_komisi")
public String getJenisKomisi() {
return jenisKomisi;
}

@JsonProperty("jenis_komisi")
public void setJenisKomisi(String jenisKomisi) {
this.jenisKomisi = jenisKomisi;
}

@JsonProperty("status_ptt")
public String getStatusPtt() {
return statusPtt;
}

@JsonProperty("status_ptt")
public void setStatusPtt(String statusPtt) {
this.statusPtt = statusPtt;
}

@JsonProperty("status_plgaktif")
public String getStatusPlgaktif() {
return statusPlgaktif;
}

@JsonProperty("status_plgaktif")
public void setStatusPlgaktif(String statusPlgaktif) {
this.statusPlgaktif = statusPlgaktif;
}

@JsonProperty("tgl_entry")
public String getTglEntry() {
return tglEntry;
}

@JsonProperty("tgl_entry")
public void setTglEntry(String tglEntry) {
this.tglEntry = tglEntry;
}

@JsonProperty("user_entry")
public String getUserEntry() {
return userEntry;
}

@JsonProperty("user_entry")
public void setUserEntry(String userEntry) {
this.userEntry = userEntry;
}

@JsonProperty("tgl_update")
public String getTglUpdate() {
return tglUpdate;
}

@JsonProperty("tgl_update")
public void setTglUpdate(String tglUpdate) {
this.tglUpdate = tglUpdate;
}

@JsonProperty("user_update")
public String getUserUpdate() {
return userUpdate;
}

@JsonProperty("user_update")
public void setUserUpdate(String userUpdate) {
this.userUpdate = userUpdate;
}

@JsonProperty("tgl_pemutihan")
public String getTglPemutihan() {
return tglPemutihan;
}

@JsonProperty("tgl_pemutihan")
public void setTglPemutihan(String tglPemutihan) {
this.tglPemutihan = tglPemutihan;
}

@JsonProperty("user_pemutihan")
public String getUserPemutihan() {
return userPemutihan;
}

@JsonProperty("user_pemutihan")
public void setUserPemutihan(String userPemutihan) {
this.userPemutihan = userPemutihan;
}

@JsonProperty("saldonetbon")
public Integer getSaldonetbon() {
return saldonetbon;
}

@JsonProperty("saldonetbon")
public void setSaldonetbon(Integer saldonetbon) {
this.saldonetbon = saldonetbon;
}

@JsonProperty("poin")
public Integer getPoin() {
return poin;
}

@JsonProperty("poin")
public void setPoin(Integer poin) {
this.poin = poin;
}

@JsonProperty("gambar")
public String getGambar() {
return gambar;
}

@JsonProperty("gambar")
public void setGambar(String gambar) {
this.gambar = gambar;
}

@JsonProperty("firebase_uid")
public String getFirebaseUid() {
return firebaseUid;
}

@JsonProperty("firebase_uid")
public void setFirebaseUid(String firebaseUid) {
this.firebaseUid = firebaseUid;
}

@Override
public String toString() {
return new ToStringBuilder(this).append("kdCustomer", kdCustomer).append("alias", alias).append("migrasi", migrasi).append("ktp", ktp).append("nama", nama).append("alamat", alamat).append("tempatLahir", tempatLahir).append("tglLahir", tglLahir).append("jnsKelamin", jnsKelamin).append("agama", agama).append("kdLokasi", kdLokasi).append("wilayah", wilayah).append("pekerjaan", pekerjaan).append("statusNikah", statusNikah).append("telp", telp).append("ponsel", ponsel).append("email", email).append("status", status).append("upline", upline).append("jenisCustomer", jenisCustomer).append("jenisCustomerBon", jenisCustomerBon).append("jenisKomisi", jenisKomisi).append("statusPtt", statusPtt).append("statusPlgaktif", statusPlgaktif).append("tglEntry", tglEntry).append("userEntry", userEntry).append("tglUpdate", tglUpdate).append("userUpdate", userUpdate).append("tglPemutihan", tglPemutihan).append("userPemutihan", userPemutihan).append("saldonetbon", saldonetbon).append("poin", poin).append("gambar", gambar).append("firebaseUid", firebaseUid).toString();
}

@Override
public int hashCode() {
return new HashCodeBuilder().append(telp).append(migrasi).append(ponsel).append(statusPtt).append(agama).append(statusNikah).append(upline).append(jenisCustomer).append(jnsKelamin).append(tglPemutihan).append(poin).append(jenisKomisi).append(alias).append(email).append(jenisCustomerBon).append(saldonetbon).append(userPemutihan).append(kdLokasi).append(tglUpdate).append(userUpdate).append(statusPlgaktif).append(ktp).append(wilayah).append(tglEntry).append(userEntry).append(gambar).append(alamat).append(tglLahir).append(firebaseUid).append(nama).append(pekerjaan).append(tempatLahir).append(kdCustomer).append(status).toHashCode();
}

@Override
public boolean equals(Object other) {
if (other == this) {
return true;
}
if ((other instanceof Pelanggan) == false) {
return false;
}
Pelanggan rhs = ((Pelanggan) other);
return new EqualsBuilder().append(telp, rhs.telp).append(migrasi, rhs.migrasi).append(ponsel, rhs.ponsel).append(statusPtt, rhs.statusPtt).append(agama, rhs.agama).append(statusNikah, rhs.statusNikah).append(upline, rhs.upline).append(jenisCustomer, rhs.jenisCustomer).append(jnsKelamin, rhs.jnsKelamin).append(tglPemutihan, rhs.tglPemutihan).append(poin, rhs.poin).append(jenisKomisi, rhs.jenisKomisi).append(alias, rhs.alias).append(email, rhs.email).append(jenisCustomerBon, rhs.jenisCustomerBon).append(saldonetbon, rhs.saldonetbon).append(userPemutihan, rhs.userPemutihan).append(kdLokasi, rhs.kdLokasi).append(tglUpdate, rhs.tglUpdate).append(userUpdate, rhs.userUpdate).append(statusPlgaktif, rhs.statusPlgaktif).append(ktp, rhs.ktp).append(wilayah, rhs.wilayah).append(tglEntry, rhs.tglEntry).append(userEntry, rhs.userEntry).append(gambar, rhs.gambar).append(alamat, rhs.alamat).append(tglLahir, rhs.tglLahir).append(firebaseUid, rhs.firebaseUid).append(nama, rhs.nama).append(pekerjaan, rhs.pekerjaan).append(tempatLahir, rhs.tempatLahir).append(kdCustomer, rhs.kdCustomer).append(status, rhs.status).isEquals();
}

}

+ 15
- 0
src/main/java/id/amigogroup/posterminal/util/AlertUtil.java View File

@@ -7,6 +7,8 @@ package id.amigogroup.posterminal.util;


import javafx.scene.control.Alert; import javafx.scene.control.Alert;
import javafx.scene.control.ButtonType; import javafx.scene.control.ButtonType;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;


/** /**
* *
@@ -22,4 +24,17 @@ public class AlertUtil {
alert.setHeaderText(null); alert.setHeaderText(null);
return alert; return alert;
} }
public static Alert getAlertUlangTahun(String nama) {
Alert alert = new Alert(Alert.AlertType.INFORMATION);
Image image = new Image("/assets/birthday.png");
ImageView imageView = new ImageView(image);
imageView.setFitHeight(100);
imageView.setFitWidth(100);
alert.setGraphic(imageView);
alert.setTitle("Selamat Ulang Tahun");
alert.setHeaderText(null);
alert.setContentText("Selamat Ulang Tahun " + nama);
return alert;
}
} }

+ 51
- 2
src/main/java/id/amigogroup/posterminal/util/Fucout.java View File

@@ -5,6 +5,11 @@
*/ */
package id.amigogroup.posterminal.util; package id.amigogroup.posterminal.util;


import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.Date;
import javafx.beans.value.ChangeListener; import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue; import javafx.beans.value.ObservableValue;
import javafx.scene.Node; import javafx.scene.Node;
@@ -28,10 +33,13 @@ public class Fucout {
//IMAGES URL //IMAGES URL
public static final String APP_ICON = "/assets/logo-mini-squared.png"; public static final String APP_ICON = "/assets/logo-mini-squared.png";


//FORMATTERS
private static final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd MMMM yyyy");

//FUNCTIONS //FUNCTIONS
public static boolean isAllowedLogin(String pekerjaan) { public static boolean isAllowedLogin(String pekerjaan) {
return pekerjaan !=null && !pekerjaan.equals("") &&
(pekerjaan.toLowerCase().equals("kasir")
return pekerjaan != null && !pekerjaan.equals("")
&& (pekerjaan.toLowerCase().equals("kasir")
|| pekerjaan.toLowerCase().equals("asisten pemimpin toko") || pekerjaan.toLowerCase().equals("asisten pemimpin toko")
|| pekerjaan.toLowerCase().equals("asisten pemimpin toko produk") || pekerjaan.toLowerCase().equals("asisten pemimpin toko produk")
|| pekerjaan.toLowerCase().equals("pemimpin toko")); || pekerjaan.toLowerCase().equals("pemimpin toko"));
@@ -72,4 +80,45 @@ public class Fucout {
} }
}); });
} }

public static String getNoNotaTemporary() {
LocalDateTime localDateTime = LocalDateTime.now();
int ms = localDateTime.getNano();
while (ms > 1000) {
ms = ms / 10;
}
return String.format("%d%02d%02d%02d%02d%02d%03d",
localDateTime.getYear(),
localDateTime.getMonthValue(),
localDateTime.getDayOfMonth(),
localDateTime.getHour(),
localDateTime.getMinute(),
localDateTime.getSecond(),
ms);
}

public static String formatTanggal(Date tanggal) {
if (tanggal == null) {
return "";
}
return DATE_FORMAT.format(tanggal);
}

public static boolean checkBirthday(Date tanggal) {
return checkBirthday(toLocalDate(tanggal));
}
public static boolean checkBirthday(LocalDate tanggal) {
if (tanggal == null) {
return false;
}
LocalDate now = LocalDate.now();
return tanggal.getMonthValue() == now.getMonthValue() &&
tanggal.getDayOfMonth() == now.getDayOfMonth();
}

public static LocalDate toLocalDate(Date date) {
return date.toInstant()
.atZone(ZoneId.systemDefault())
.toLocalDate();
}
} }

BIN
src/main/resources/assets/birthday.png View File

Before After
Width: 594  |  Height: 594  |  Size: 18 KiB

+ 18
- 16
src/main/resources/fxml/FormUtama.fxml View File

@@ -18,6 +18,9 @@
<?import javafx.scene.text.Font?> <?import javafx.scene.text.Font?>


<BorderPane fx:id="bpMain" prefHeight="600.0" prefWidth="1000.0" stylesheets="@../styles/pos_styles.css" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.amigogroup.posterminal.FormUtamaController"> <BorderPane fx:id="bpMain" prefHeight="600.0" prefWidth="1000.0" stylesheets="@../styles/pos_styles.css" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.amigogroup.posterminal.FormUtamaController">
<top>
<AnchorPane id="header" prefHeight="0.0" prefWidth="1000.0" />
</top>
<center> <center>
<ScrollPane fx:id="spMainContent" fitToHeight="true" fitToWidth="true" style="-fx-background-color: transparent;" /> <ScrollPane fx:id="spMainContent" fitToHeight="true" fitToWidth="true" style="-fx-background-color: transparent;" />
</center> </center>
@@ -86,15 +89,11 @@
<content> <content>
<VBox fx:id="vbNavigasi" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" spacing="5.0" style="-fx-border-style: none;"> <VBox fx:id="vbNavigasi" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" spacing="5.0" style="-fx-border-style: none;">
<children> <children>
<HBox alignment="CENTER">
<children>
<ImageView fitHeight="90.0" fitWidth="140.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../assets/logo.png" />
</image>
</ImageView>
</children>
</HBox>
<ImageView fitHeight="90.0" fitWidth="140.0" pickOnBounds="true" preserveRatio="true">
<image>
<Image url="@../assets/logo.png" />
</image>
</ImageView>
<Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#btnTambahNotaOnAction" text="Tambah"> <Button maxWidth="1.7976931348623157E308" mnemonicParsing="false" onAction="#btnTambahNotaOnAction" text="Tambah">
<VBox.margin> <VBox.margin>
<Insets bottom="9.0" right="5.0" top="14.0" /> <Insets bottom="9.0" right="5.0" top="14.0" />
@@ -123,7 +122,7 @@
</ImageView> </ImageView>
</children> </children>
</HBox> </HBox>
<Label layoutX="14.0" layoutY="85.0" text="Member / Non" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="85.0">
<Label fx:id="lblMemberNonMember" layoutX="14.0" layoutY="85.0" text="Member / Non Member" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="85.0">
<font> <font>
<Font name="System Bold" size="12.0" /> <Font name="System Bold" size="12.0" />
</font> </font>
@@ -134,9 +133,9 @@
<ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" /> <ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" />
</columnConstraints> </columnConstraints>
<rowConstraints> <rowConstraints>
<RowConstraints vgrow="SOMETIMES" />
<RowConstraints vgrow="SOMETIMES" />
<RowConstraints vgrow="SOMETIMES" />
<RowConstraints valignment="TOP" vgrow="SOMETIMES" />
<RowConstraints valignment="TOP" vgrow="SOMETIMES" />
<RowConstraints valignment="TOP" vgrow="SOMETIMES" />
</rowConstraints> </rowConstraints>
<children> <children>
<Label text="Nama"> <Label text="Nama">
@@ -144,13 +143,16 @@
<Insets bottom="2.5" top="2.5" /> <Insets bottom="2.5" top="2.5" />
</GridPane.margin> </GridPane.margin>
</Label> </Label>
<Label maxWidth="1.7976931348623157E308" text=": -" GridPane.columnIndex="1" />
<Label fx:id="lblNamaPelanggan" maxWidth="110.0" text=": -" wrapText="true" GridPane.columnIndex="1">
<GridPane.margin>
<Insets bottom="2.5" top="2.5" />
</GridPane.margin></Label>
<Label text="Tgl Lahir" GridPane.rowIndex="1"> <Label text="Tgl Lahir" GridPane.rowIndex="1">
<GridPane.margin> <GridPane.margin>
<Insets bottom="2.5" top="2.5" /> <Insets bottom="2.5" top="2.5" />
</GridPane.margin> </GridPane.margin>
</Label> </Label>
<Label maxWidth="1.7976931348623157E308" text=": -" GridPane.columnIndex="1" GridPane.rowIndex="1">
<Label fx:id="lblTglLahirPelanggan" maxWidth="110.0" text=": -" wrapText="true" GridPane.columnIndex="1" GridPane.rowIndex="1">
<GridPane.margin> <GridPane.margin>
<Insets bottom="2.5" top="2.5" /> <Insets bottom="2.5" top="2.5" />
</GridPane.margin> </GridPane.margin>
@@ -160,7 +162,7 @@
<Insets bottom="2.5" top="2.5" /> <Insets bottom="2.5" top="2.5" />
</GridPane.margin> </GridPane.margin>
</Label> </Label>
<Label maxWidth="1.7976931348623157E308" text=": -" GridPane.columnIndex="1" GridPane.rowIndex="2">
<Label fx:id="lblNoTelpPelanggan" maxWidth="110.0" text=": -" wrapText="true" GridPane.columnIndex="1" GridPane.rowIndex="2">
<GridPane.margin> <GridPane.margin>
<Insets bottom="2.5" top="2.5" /> <Insets bottom="2.5" top="2.5" />
</GridPane.margin> </GridPane.margin>


Loading…
Cancel
Save