ソースを参照

Menampilkan Pelanggan & Optimisasi RxJava

* Menampilkan data pelanggan dengan menggunakan request API dengan kode member
* Menampilkan alert jika pelanggan berulang tahun
pull/1/head
コミット
3ef750a06f
12個のファイルの変更707行の追加45行の削除
  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. バイナリ
      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 ファイルの表示

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

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


+ 101
- 17
src/main/java/id/amigogroup/posterminal/FormUtamaController.java ファイルの表示

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

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
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.DialogCariNotaTundaController;
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.FormTransaksiReturController;
import id.amigogroup.posterminal.transaksi.FormTransaksiTunaiController;
import id.amigogroup.posterminal.util.AlertUtil;
import id.amigogroup.posterminal.util.Fucout;
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.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
@@ -31,6 +37,7 @@ import javafx.fxml.Initializable;
import javafx.scene.Node;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ScrollPane;
@@ -41,6 +48,7 @@ import javafx.scene.input.KeyCombination;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import retrofit2.HttpException;

public class FormUtamaController implements Initializable {

@@ -60,6 +68,14 @@ public class FormUtamaController implements Initializable {
private Button btnRetur1Static;
@FXML
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();

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

/**
* Initializes the controller class.
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
// setContent(formFactory.getForm(FormConstanta.TRANSAKSI_TUNAI, this));
//TESTING RX JAVA
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();
@@ -99,6 +113,7 @@ public class FormUtamaController implements Initializable {
jumlahNota = 3;

btnTunai1Static.setOnAction((event) -> {
posRx.getPelangganByKodeMember("010004").subscribe(pelangganObserver);
setContent(loadNota("", FormConstanta.TRANSAKSI_TUNAI));
updateSelectedNota(event);
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) {
Button buttonSource = (Button) event.getSource();
notaState = navigasi.indexOf(buttonSource);
@@ -242,7 +279,7 @@ public class FormUtamaController implements Initializable {
KeyCombination kcCariBarang = new KeyCodeCombination(KeyCode.F5);
Runnable rnCariBarang = () -> {
DialogCariBarangController dialogCariBarang = new DialogCariBarangController();
dialogCariBarang.initOwner((Stage) bpMain.getScene().getWindow());
dialogCariBarang.initOwner(bpMain.getScene().getWindow());

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

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

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

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

if (hasilReturn.isPresent() && hasilReturn.get().equals("Tambah")) {
@@ -349,4 +386,51 @@ public class FormUtamaController implements Initializable {
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 ファイルの表示

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

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

/**
*
* @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;
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 ファイルの表示

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

import id.amigogroup.posterminal.model.Karyawan;
import id.amigogroup.posterminal.model.Pelanggan;
import id.amigogroup.posterminal.model.Tas;
import io.reactivex.Observable;
import java.util.List;
@@ -22,4 +23,8 @@ public class AmigoPosRx {
public Observable<Karyawan> getKaryawanByNik(String 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 ファイルの表示

@@ -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 ファイルの表示

@@ -24,4 +24,8 @@ public class UtilsApi {
public static ServiceApiKaryawan getServiceApiKaryawan() {
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 ファイルの表示

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

karyawanObs.subscribe((k) -> {
//kasir, Asko produk, Asko SDM, Pemko
if (k != null && Fucout.isAllowedLogin(k.getIdPekerjaan())) {
SystemValue.karyawan = k;
SystemValue.karyawanLogin = k;
try {
generateNewWindow("/fxml/FormUtama.fxml").show();
Stage thisStage = (Stage) apMain.getScene().getWindow();
@@ -91,7 +90,6 @@ public class FormLoginController implements Initializable {
alert.show();
}
}, error -> {
System.out.println(error.getMessage());
if (error instanceof HttpException) {
switch (((HttpException) error).code()) {
case HttpURLConnection.HTTP_NOT_FOUND:
@@ -107,8 +105,8 @@ public class FormLoginController implements Initializable {
"Terjadi kesalahan yang tidak terduga.");
alert.initOwner((Stage) apMain.getScene().getWindow());
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 ファイルの表示

@@ -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 ファイルの表示

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

import javafx.scene.control.Alert;
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);
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 ファイルの表示

@@ -5,6 +5,11 @@
*/
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.ObservableValue;
import javafx.scene.Node;
@@ -28,10 +33,13 @@ public class Fucout {
//IMAGES URL
public static final String APP_ICON = "/assets/logo-mini-squared.png";

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

//FUNCTIONS
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 produk")
|| 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();
}
}

バイナリ
src/main/resources/assets/birthday.png ファイルの表示

変更前 変更後
幅: 594  |  高さ: 594  |  サイズ: 18 KiB

+ 18
- 16
src/main/resources/fxml/FormUtama.fxml ファイルの表示

@@ -18,6 +18,9 @@
<?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">
<top>
<AnchorPane id="header" prefHeight="0.0" prefWidth="1000.0" />
</top>
<center>
<ScrollPane fx:id="spMainContent" fitToHeight="true" fitToWidth="true" style="-fx-background-color: transparent;" />
</center>
@@ -86,15 +89,11 @@
<content>
<VBox fx:id="vbNavigasi" maxHeight="1.7976931348623157E308" maxWidth="1.7976931348623157E308" minHeight="-Infinity" spacing="5.0" style="-fx-border-style: none;">
<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">
<VBox.margin>
<Insets bottom="9.0" right="5.0" top="14.0" />
@@ -123,7 +122,7 @@
</ImageView>
</children>
</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 name="System Bold" size="12.0" />
</font>
@@ -134,9 +133,9 @@
<ColumnConstraints hgrow="ALWAYS" maxWidth="1.7976931348623157E308" />
</columnConstraints>
<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>
<children>
<Label text="Nama">
@@ -144,13 +143,16 @@
<Insets bottom="2.5" top="2.5" />
</GridPane.margin>
</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">
<GridPane.margin>
<Insets bottom="2.5" top="2.5" />
</GridPane.margin>
</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>
<Insets bottom="2.5" top="2.5" />
</GridPane.margin>
@@ -160,7 +162,7 @@
<Insets bottom="2.5" top="2.5" />
</GridPane.margin>
</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>
<Insets bottom="2.5" top="2.5" />
</GridPane.margin>


読み込み中…
キャンセル
保存