소스 검색

Merge Josua-FormSearchPelanggan

Conflicts:
	src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java
pull/3/head
부모
커밋
e87aa8d66e
6개의 변경된 파일217개의 추가작업 그리고 23개의 파일을 삭제
  1. +7
    -1
      src/main/java/id/amigogroup/posterminal/FormUtamaController.java
  2. +9
    -0
      src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java
  3. +10
    -0
      src/main/java/id/amigogroup/posterminal/api/ServiceApiPelanggan.java
  4. +156
    -13
      src/main/java/id/amigogroup/posterminal/pencarian/DialogCariPelangganController.java
  5. +21
    -6
      src/main/java/id/amigogroup/posterminal/pencarian/TabelPelanggan.java
  6. +14
    -3
      src/main/resources/fxml/DialogCariPelanggan.fxml

+ 7
- 1
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<String> result = dialogCariPelanggan.showAndWait();
Optional<Pelanggan> 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);


+ 9
- 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.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<Pelanggan> getPelangganByKodeMember(String kodeMember){
return UtilsApi.getServiceApiPelanggan().getPelangganByKodeMember(kodeMember);
}
public Observable<Pagination<Pelanggan>> getPelangganByNama(String nama){
return UtilsApi.getServiceApiPelanggan().getPelangganByNama(nama);
}
public Observable<Pagination<Pelanggan>> getPelangganByNoTelpNoHp(String no){
return UtilsApi.getServiceApiPelanggan().getPelangganByNoTelpNoHp(no);
}
}

+ 10
- 0
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<Pelanggan> getPelangganByKodeMember(@Path("alias") String alias);
//Mengambil Pelanggan berdasarkan Nama
@GET("pelanggans/nama/{nama}")
Observable<Pagination<Pelanggan>> getPelangganByNama(@Path("nama") String nama);
//Mengambil Pelanggan berdasarkan No.Telp No.Hp
@GET("pelanggans/no-kontak/{no}")
Observable<Pagination<Pelanggan>> getPelangganByNoTelpNoHp(@Path("no") String no);
}

+ 156
- 13
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<String> implements Initializable {
public class DialogCariPelangganController extends Dialog<Pelanggan> 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<TabelPelanggan> tbvPelanggan;
@FXML
private TableColumn<TabelPelanggan, Integer> tcNo;
@FXML
private TableColumn<TabelPelanggan, String> tcKode;
@FXML
private TableColumn<TabelPelanggan, String> tcNama;
@FXML
private TableColumn<TabelPelanggan, String> tcAlamat;
@FXML
private TableColumn<TabelPelanggan, String> tcNoTelp;
@FXML
private TableColumn<TabelPelanggan, String> tcUpline;

final ObservableList<TabelPelanggan> 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<TabelPelanggan, Integer> 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.<DialogCariBarangController>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<TabelPelanggan> 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<Pelanggan> 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<Pelanggan> pelangganMemberObserver = new Observer<Pelanggan>() {
@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<Pagination<Pelanggan>> daftarPelangganObserver = new Observer<Pagination<Pelanggan>>() {
@Override
public void onSubscribe(Disposable dspsbl) {
}

@Override
public void onNext(Pagination<Pelanggan> 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() {
}
};
}

+ 21
- 6
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);
}

/**


+ 14
- 3
src/main/resources/fxml/DialogCariPelanggan.fxml 파일 보기

@@ -1,9 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Label?>
<?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.layout.AnchorPane?>
<?import javafx.scene.text.Font?>

@@ -14,14 +16,23 @@
<Font size="16.0" />
</font>
</Label>
<TextField layoutX="14.0" layoutY="56.0" promptText="Nama Pelanggan" AnchorPane.leftAnchor="4.0" AnchorPane.rightAnchor="4.0" AnchorPane.topAnchor="46.0" />
<Label layoutX="14.0" layoutY="39.0" text="Nama Pelanggan" AnchorPane.leftAnchor="4.0" AnchorPane.topAnchor="29.0" />
<TableView fx:id="tbvPelanggan" layoutX="14.0" layoutY="91.0" AnchorPane.bottomAnchor="-5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="81.0">
<TextField fx:id="tfPencarian" layoutX="14.0" layoutY="56.0" onKeyReleased="#tfPencarianOnKeyReleased" promptText="Input Kode Member, Nama, No.Telp/No.Hp" AnchorPane.leftAnchor="4.0" AnchorPane.rightAnchor="4.0" AnchorPane.topAnchor="46.0" />
<Label layoutX="14.0" layoutY="39.0" text="Pencarian" AnchorPane.leftAnchor="4.0" AnchorPane.topAnchor="29.0" />
<Label layoutX="4.0" layoutY="76.0" text="Cari Berdasarkan :" AnchorPane.leftAnchor="4.0" AnchorPane.topAnchor="76.0" />
<RadioButton fx:id="rbMember" layoutX="3.0" layoutY="93.0" mnemonicParsing="false" text="Member" AnchorPane.leftAnchor="4.0" AnchorPane.topAnchor="93.0">
<toggleGroup>
<ToggleGroup fx:id="tgTipe" />
</toggleGroup>
</RadioButton>
<RadioButton fx:id="rbNama" layoutX="80.0" layoutY="93.0" mnemonicParsing="false" text="Nama" toggleGroup="$tgTipe" AnchorPane.leftAnchor="80.0" AnchorPane.topAnchor="93.0" />
<RadioButton fx:id="rbNoTelpNoHp" layoutX="143.0" layoutY="93.0" mnemonicParsing="false" text="NoTelp/No.Hp" toggleGroup="$tgTipe" AnchorPane.leftAnchor="143.0" AnchorPane.topAnchor="93.0" />
<TableView fx:id="tbvPelanggan" layoutX="14.0" layoutY="117.0" prefHeight="338.0" prefWidth="500.0" AnchorPane.bottomAnchor="-5.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="117.0">
<columns>
<TableColumn fx:id="tcNo" maxWidth="30.0" minWidth="30.0" prefWidth="30.0" resizable="false" text="No" />
<TableColumn fx:id="tcKode" prefWidth="75.0" text="Kode" />
<TableColumn fx:id="tcNama" prefWidth="75.0" text="Nama" />
<TableColumn fx:id="tcAlamat" text="Alamat" />
<TableColumn fx:id="tcNoTelp" prefWidth="75.0" text="No.Telp" />
<TableColumn fx:id="tcUpline" prefWidth="75.0" text="Upline" />
</columns>
<columnResizePolicy>


불러오는 중...
취소
저장