diff --git a/src/main/java/id/amigogroup/posterminal/FormUtamaController.java b/src/main/java/id/amigogroup/posterminal/FormUtamaController.java index 0ac5588..d5e6ff8 100644 --- a/src/main/java/id/amigogroup/posterminal/FormUtamaController.java +++ b/src/main/java/id/amigogroup/posterminal/FormUtamaController.java @@ -247,7 +247,13 @@ public class FormUtamaController implements Initializable { DialogCariPelangganController dialogCariPelanggan = new DialogCariPelangganController(); dialogCariPelanggan.initOwner(bpMain.getScene().getWindow()); - Optional result = dialogCariPelanggan.showAndWait(); + Optional result = dialogCariPelanggan.showAndWait(); + if(result.isPresent() && result.get() !=null){ + SystemValue.member = result.get(); + SystemValue.isMember = true; + updateLabelPelanggan(result.get()); + updateLabelMemberNonMember(); + } System.out.println(result); }; listShortcuts.put(kcCariPelanggan, rnCariPelanggan); diff --git a/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java b/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java index 3562f44..21b91ce 100644 --- a/src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java +++ b/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.Pagination; import id.amigogroup.posterminal.model.MNotaRetur; import id.amigogroup.posterminal.model.MNotaTunai; import id.amigogroup.posterminal.model.Pelanggan; @@ -41,4 +42,12 @@ public class AmigoPosRx { public Observable getPelangganByKodeMember(String kodeMember){ return UtilsApi.getServiceApiPelanggan().getPelangganByKodeMember(kodeMember); } + + public Observable> getPelangganByNama(String nama){ + return UtilsApi.getServiceApiPelanggan().getPelangganByNama(nama); + } + + public Observable> getPelangganByNoTelpNoHp(String no){ + return UtilsApi.getServiceApiPelanggan().getPelangganByNoTelpNoHp(no); + } } diff --git a/src/main/java/id/amigogroup/posterminal/api/ServiceApiPelanggan.java b/src/main/java/id/amigogroup/posterminal/api/ServiceApiPelanggan.java index b1093d5..ce90ac2 100644 --- a/src/main/java/id/amigogroup/posterminal/api/ServiceApiPelanggan.java +++ b/src/main/java/id/amigogroup/posterminal/api/ServiceApiPelanggan.java @@ -5,6 +5,7 @@ */ package id.amigogroup.posterminal.api; +import id.amigogroup.posterminal.model.Pagination; import id.amigogroup.posterminal.model.Pelanggan; import io.reactivex.Observable; import retrofit2.http.GET; @@ -18,4 +19,13 @@ public interface ServiceApiPelanggan { //Mengambil Pelanggan berdasarkan Kode Member (Alias) @GET("pelanggans/kode-member/{alias}") Observable getPelangganByKodeMember(@Path("alias") String alias); + + //Mengambil Pelanggan berdasarkan Nama + @GET("pelanggans/nama/{nama}") + Observable> getPelangganByNama(@Path("nama") String nama); + + //Mengambil Pelanggan berdasarkan No.Telp No.Hp + @GET("pelanggans/no-kontak/{no}") + Observable> getPelangganByNoTelpNoHp(@Path("no") String no); + } diff --git a/src/main/java/id/amigogroup/posterminal/pencarian/DialogCariPelangganController.java b/src/main/java/id/amigogroup/posterminal/pencarian/DialogCariPelangganController.java index f61e59f..71f7349 100644 --- a/src/main/java/id/amigogroup/posterminal/pencarian/DialogCariPelangganController.java +++ b/src/main/java/id/amigogroup/posterminal/pencarian/DialogCariPelangganController.java @@ -5,90 +5,233 @@ */ package id.amigogroup.posterminal.pencarian; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import id.amigogroup.posterminal.FormUtamaController; +import id.amigogroup.posterminal.SystemValue; +import id.amigogroup.posterminal.api.AmigoPosRx; +import id.amigogroup.posterminal.model.Pagination; +import id.amigogroup.posterminal.model.Pelanggan; +import id.amigogroup.posterminal.util.AlertUtil; +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.List; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; +import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.collections.FXCollections; import javafx.collections.ObservableList; +import javafx.event.ActionEvent; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.fxml.Initializable; import javafx.scene.Parent; +import javafx.scene.control.Alert; +import javafx.scene.control.ButtonType; import javafx.scene.control.Dialog; +import javafx.scene.control.RadioButton; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; +import javafx.scene.control.TextField; +import javafx.scene.control.ToggleGroup; import javafx.scene.control.cell.PropertyValueFactory; +import javafx.scene.input.KeyCode; +import javafx.scene.input.KeyEvent; import javafx.scene.layout.AnchorPane; import javafx.stage.Window; +import retrofit2.HttpException; /** * FXML Controller class * * @author ronal */ -public class DialogCariPelangganController extends Dialog implements Initializable { +public class DialogCariPelangganController extends Dialog implements Initializable { + @FXML AnchorPane apContent; - + @FXML + private TextField tfPencarian; + @FXML + private ToggleGroup tgTipe; + @FXML + private RadioButton rbMember; + @FXML + private RadioButton rbNama; + @FXML + private RadioButton rbNoTelpNoHp; @FXML private TableView tbvPelanggan; @FXML + private TableColumn tcNo; + @FXML private TableColumn tcKode; @FXML private TableColumn tcNama; @FXML private TableColumn tcAlamat; @FXML + private TableColumn tcNoTelp; + @FXML private TableColumn tcUpline; final ObservableList daftarTabelPelanggan = FXCollections.observableArrayList(); + AmigoPosRx posRx = new AmigoPosRx(); + private Pelanggan pelanggan = null; /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { + getDialogPane().getButtonTypes().add(ButtonType.CLOSE); + tcNo.setCellValueFactory((TableColumn.CellDataFeatures cell) -> { + return new ReadOnlyObjectWrapper(tbvPelanggan.getItems().indexOf(cell.getValue()) + 1); + }); tcKode.setCellValueFactory(new PropertyValueFactory<>("kode")); tcNama.setCellValueFactory(new PropertyValueFactory<>("nama")); - tcAlamat.setCellValueFactory(new PropertyValueFactory<>("nomor")); + tcAlamat.setCellValueFactory(new PropertyValueFactory<>("alamat")); + tcNoTelp.setCellValueFactory(new PropertyValueFactory<>("noTelp")); tcUpline.setCellValueFactory(new PropertyValueFactory<>("upline")); tbvPelanggan.setItems(daftarTabelPelanggan); - fillTable(new ArrayList<>()); } public DialogCariPelangganController(/*FormPresensiController parent*/) { try { Window window = getDialogPane().getScene().getWindow(); window.setOnCloseRequest(event -> this.close()); - + FXMLLoader loader = new FXMLLoader(getClass().getResource("/fxml/DialogCariPelanggan.fxml")); loader.setController(this); // DialogCariBarangController controller = loader.getController(); Parent root = loader.load(); getDialogPane().setContent(root); setTitle("Cari Pelanggan"); - + // getDialogPane().getButtonTypes().add(ButtonType.CANCEL); -// setResultConverter(buttonType -> { -// return str; -// }); + setResultConverter(buttonType -> { + return pelanggan; + }); } catch (IOException e) { Logger.getLogger(DialogCariBarangController.class .getName()).log(Level.SEVERE, null, e); } } - public void fillTable(List daftarBarang) { + public void fillTable() { // Button btnTambah = new Button("Tambah"); // btnTambah.setOnAction((event) -> { // setResult("Pak Coba"); // this.close(); // }); - daftarTabelPelanggan.add(new TabelPelanggan("0103201401", "Pak Coba","Jl. Wates Percobaan", "-")); } - + + public void updateTabelPelanggan(List daftarPelanggan) { + daftarTabelPelanggan.clear(); + for (Pelanggan pelanggan : daftarPelanggan) { + daftarTabelPelanggan.add(new TabelPelanggan( + pelanggan.getAlias(), + pelanggan.getNama(), + pelanggan.getAlamat(), + pelanggan.getTelp() + " / " +pelanggan.getPonsel(), + pelanggan.getUpline())); + } + } + + @FXML + void tfPencarianOnKeyReleased(KeyEvent event) { + if (((RadioButton) tgTipe.getSelectedToggle()) == rbMember + && event.getCode() == KeyCode.ENTER) { + System.out.println("MASUK DONGssssssss"); + posRx.getPelangganByKodeMember(tfPencarian.getText()).subscribe(pelangganMemberObserver); + } else if (((RadioButton) tgTipe.getSelectedToggle()) == rbNama + && tfPencarian.getText().length() >= 3) { + posRx.getPelangganByNama(tfPencarian.getText()).subscribe(daftarPelangganObserver); + } else if (((RadioButton) tgTipe.getSelectedToggle()) == rbNoTelpNoHp + && tfPencarian.getText().length() >= 3) { + posRx.getPelangganByNoTelpNoHp(tfPencarian.getText()).subscribe(daftarPelangganObserver); + } + } + + public Observer pelangganMemberObserver = new Observer() { + @Override + public void onSubscribe(Disposable dspsbl) { + } + + @Override + public void onNext(Pelanggan p) { + System.out.println("COBA AJA"); + if (p != null) { + pelanggan = p; + close(); + } + } + + @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(apContent.getScene().getWindow()); + alert.show(); + } + } else { + Alert alert = AlertUtil.getAlertError( + AlertUtil.ERROR_TIDAK_TERDUGA_TITLE, + "Terjadi kesalahan yang tidak terduga."); + alert.initOwner(apContent.getScene().getWindow()); + alert.show(); + Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, error); + } + } + + @Override + public void onComplete() { + } + }; + + public Observer> daftarPelangganObserver = new Observer>() { + @Override + public void onSubscribe(Disposable dspsbl) { + } + + @Override + public void onNext(Pagination p) { + if (p != null) { + updateTabelPelanggan(p.getData()); + } + } + + @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(apContent.getScene().getWindow()); + alert.show(); + } + } else { + Alert alert = AlertUtil.getAlertError( + AlertUtil.ERROR_TIDAK_TERDUGA_TITLE, + "Terjadi kesalahan yang tidak terduga."); + alert.initOwner(apContent.getScene().getWindow()); + alert.show(); + Logger.getLogger(FormUtamaController.class.getName()).log(Level.SEVERE, null, error); + } + } + + @Override + public void onComplete() { + } + }; } diff --git a/src/main/java/id/amigogroup/posterminal/pencarian/TabelPelanggan.java b/src/main/java/id/amigogroup/posterminal/pencarian/TabelPelanggan.java index d7eedbb..339c764 100644 --- a/src/main/java/id/amigogroup/posterminal/pencarian/TabelPelanggan.java +++ b/src/main/java/id/amigogroup/posterminal/pencarian/TabelPelanggan.java @@ -5,24 +5,25 @@ */ package id.amigogroup.posterminal.pencarian; -import javafx.beans.property.SimpleObjectProperty; import javafx.beans.property.SimpleStringProperty; -import javafx.scene.control.Button; /** * * @author ronal */ public class TabelPelanggan { + private final SimpleStringProperty kode; private final SimpleStringProperty nama; private final SimpleStringProperty alamat; + private final SimpleStringProperty noTelp; private final SimpleStringProperty upline; - public TabelPelanggan(String kode, String nama, String alamat,String upline) { + public TabelPelanggan(String kode, String nama, String alamat, String noTelp, String upline) { this.kode = new SimpleStringProperty(kode); this.nama = new SimpleStringProperty(nama); this.alamat = new SimpleStringProperty(alamat); + this.noTelp = new SimpleStringProperty(noTelp); this.upline = new SimpleStringProperty(upline); } @@ -57,15 +58,29 @@ public class TabelPelanggan { /** * @return the no */ - public String getNomor() { + public String getAlamat() { return alamat.get(); } /** * @param no the no to set */ - public void setNomor(String nomor) { - this.alamat.set(nomor); + public void setAlamat(String alamat) { + this.alamat.set(alamat); + } + + /** + * @return the noTelp + */ + public String getNoTelp() { + return noTelp.get(); + } + + /** + * @param noTelp the no to set + */ + public void setNoTelp(String noTelp) { + this.noTelp.set(noTelp); } /** diff --git a/src/main/resources/fxml/DialogCariPelanggan.fxml b/src/main/resources/fxml/DialogCariPelanggan.fxml index 3b46dce..ea37b4e 100644 --- a/src/main/resources/fxml/DialogCariPelanggan.fxml +++ b/src/main/resources/fxml/DialogCariPelanggan.fxml @@ -1,9 +1,11 @@ + + @@ -14,14 +16,23 @@ - -