@ -5,15 +5,21 @@
* /
* /
package id.amigogroup.posterminal.pencarian ;
package id.amigogroup.posterminal.pencarian ;
import id.amigogroup.posterminal.FormUtamaController ;
import id.amigogroup.posterminal.api.AmigoPosRx ;
import id.amigogroup.posterminal.api.AmigoPosRx ;
import id.amigogroup.posterminal.model.Barang ;
import id.amigogroup.posterminal.model.Barang ;
import id.amigogroup.posterminal.model.NoBarang ;
import id.amigogroup.posterminal.model.Pagination ;
import id.amigogroup.posterminal.model.Pagination ;
import id.amigogroup.posterminal.transaksi.BarangFull ;
import id.amigogroup.posterminal.util.AlertUtil ;
import id.amigogroup.posterminal.util.AlertUtil ;
import id.amigogroup.posterminal.util.AmigoPosCache ;
import id.amigogroup.posterminal.util.Fucout ;
import id.amigogroup.posterminal.util.Fucout ;
import io.reactivex.Observable ;
import io.reactivex.Observer ;
import io.reactivex.Observer ;
import io.reactivex.disposables.CompositeDisposable ;
import io.reactivex.disposables.Disposable ;
import io.reactivex.disposables.Disposable ;
import io.reactivex.observers.DisposableObserver ;
import java.io.IOException ;
import java.io.IOException ;
import java.io.InterruptedIOException ;
import java.net.HttpURLConnection ;
import java.net.HttpURLConnection ;
import java.net.URL ;
import java.net.URL ;
import java.util.ArrayList ;
import java.util.ArrayList ;
@ -41,6 +47,8 @@ import javafx.scene.control.ToggleGroup;
import javafx.scene.control.cell.PropertyValueFactory ;
import javafx.scene.control.cell.PropertyValueFactory ;
import javafx.scene.input.KeyCode ;
import javafx.scene.input.KeyCode ;
import javafx.scene.input.KeyEvent ;
import javafx.scene.input.KeyEvent ;
import javafx.scene.input.MouseButton ;
import javafx.scene.input.MouseEvent ;
import javafx.scene.layout.AnchorPane ;
import javafx.scene.layout.AnchorPane ;
import javafx.stage.Window ;
import javafx.stage.Window ;
import retrofit2.HttpException ;
import retrofit2.HttpException ;
@ -50,7 +58,7 @@ import retrofit2.HttpException;
*
*
* @author ronal
* @author ronal
* /
* /
public class DialogCariBarangController extends Dialog < Barang > implements Initializable {
public class DialogCariBarangController extends Dialog < Barang Full > implements Initializable {
@FXML
@FXML
AnchorPane apContent ;
AnchorPane apContent ;
@ -68,8 +76,6 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
private TableColumn < TabelBarangCari , String > tcUkur ;
private TableColumn < TabelBarangCari , String > tcUkur ;
@FXML
@FXML
private TableColumn < TabelBarangCari , String > tcHarga ;
private TableColumn < TabelBarangCari , String > tcHarga ;
// @FXML
// private TableColumn<TabelBarangCari, Button> tcBtnTambah;
@FXML
@FXML
private ToggleGroup tgTipe ;
private ToggleGroup tgTipe ;
@FXML
@FXML
@ -79,7 +85,8 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
final ObservableList < TabelBarangCari > daftarTabelBarang = FXCollections . observableArrayList ( ) ;
final ObservableList < TabelBarangCari > daftarTabelBarang = FXCollections . observableArrayList ( ) ;
AmigoPosRx posRx = new AmigoPosRx ( ) ;
AmigoPosRx posRx = new AmigoPosRx ( ) ;
private Barang barang = null ;
CompositeDisposable compositeDisposable = new CompositeDisposable ( ) ;
private BarangFull selectedBarangFull = null ;
/ * *
/ * *
* Initializes the controller class .
* Initializes the controller class .
@ -97,29 +104,24 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
tcNama . setCellValueFactory ( new PropertyValueFactory < > ( "nama" ) ) ;
tcNama . setCellValueFactory ( new PropertyValueFactory < > ( "nama" ) ) ;
tcUkur . setCellValueFactory ( new PropertyValueFactory < > ( "ukur" ) ) ;
tcUkur . setCellValueFactory ( new PropertyValueFactory < > ( "ukur" ) ) ;
tcHarga . setCellValueFactory ( new PropertyValueFactory < > ( "harga" ) ) ;
tcHarga . setCellValueFactory ( new PropertyValueFactory < > ( "harga" ) ) ;
// tcBtnTambah.setCellValueFactory(new PropertyValueFactory<>("btnTambah"));
tbvBarang . setItems ( daftarTabelBarang ) ;
tbvBarang . setItems ( daftarTabelBarang ) ;
// fillTable(new ArrayList<>());
}
}
public DialogCariBarangController ( /*FormPresensiController parent*/ ) {
public DialogCariBarangController ( ) {
selectedBarangFull = new BarangFull ( ) ;
try {
try {
Window window = getDialogPane ( ) . getScene ( ) . getWindow ( ) ;
Window window = getDialogPane ( ) . getScene ( ) . getWindow ( ) ;
window . setOnCloseRequest ( event - > this . close ( ) ) ;
window . setOnCloseRequest ( event - > this . close ( ) ) ;
FXMLLoader loader = new FXMLLoader ( getClass ( ) . getResource ( "/fxml/DialogCariBarang.fxml" ) ) ;
FXMLLoader loader = new FXMLLoader ( getClass ( ) . getResource ( "/fxml/DialogCariBarang.fxml" ) ) ;
loader . setController ( this ) ;
loader . setController ( this ) ;
// DialogCariBarangController controller = loader.<DialogCariBarangController>getController();
Parent root = loader . load ( ) ;
Parent root = loader . load ( ) ;
getDialogPane ( ) . setContent ( root ) ;
getDialogPane ( ) . setContent ( root ) ;
setTitle ( "Cari Barang" ) ;
setTitle ( "Cari Barang" ) ;
// getDialogPane().getButtonTypes().add(ButtonType.CANCEL);
// setResultConverter(buttonType -> {
// return str;
// });
setResultConverter ( buttonType - > {
setResultConverter ( buttonType - > {
return barang ;
return selectedBarangFull ;
} ) ;
} ) ;
} catch ( IOException e ) {
} catch ( IOException e ) {
Logger . getLogger ( DialogCariBarangController . class
Logger . getLogger ( DialogCariBarangController . class
@ -130,18 +132,42 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
public void updateTabelBarang ( List < Barang > daftarBarang ) {
public void updateTabelBarang ( List < Barang > daftarBarang ) {
daftarTabelBarang . clear ( ) ;
daftarTabelBarang . clear ( ) ;
for ( Barang barang : daftarBarang ) {
for ( Barang barang : daftarBarang ) {
// String noBarang = "...";
TabelBarangCari tbc = new TabelBarangCari (
// if (BarangCache.getInstance().getDaftarNoBarang().containsKey(barang.getKodeBarang())) {
Fucout . getText ( barang . getKodeBarang ( ) ) ,
// noBarang = Fucout.getText(BarangCache.getInstance().getDaftarNoBarang()
Fucout . getText ( barang . getNamaBarang ( ) ) ,
// .get(barang.getKodeBarang()).getNomor());
"..." ,
// }
"..." ) ;
daftarTabelBarang . add ( new TabelBarangCari (
// Fucout.getText(barang.getKodeBarang()),
tbc . setDataBarang ( barang ) ;
barang . getKodeBarang ( ) ,
daftarTabelBarang . add ( tbc ) ;
barang . getNamaBarang ( ) ,
"-" ,
"-" ) ) ;
Disposable d = posRx . getNoBarangByIdGabunganSortNomor ( barang . getIdGabungan ( ) )
. subscribeWith ( getDaftarNoBarangObserver ( ) ) ;
compositeDisposable . add ( d ) ;
}
}
@FXML
void tbvBarangOnKeyPressed ( KeyEvent event ) {
if ( event . getCode ( ) = = KeyCode . ENTER ) {
if ( tbvBarang . getSelectionModel ( ) . getSelectedItem ( ) ! = null ) {
selectedBarangFull . setBarang ( tbvBarang . getSelectionModel ( ) . getSelectedItem ( ) . getDataBarang ( ) ) ;
selectedBarangFull . setNoBarang ( tbvBarang . getSelectionModel ( ) . getSelectedItem ( ) . getDataNoBarang ( ) ) ;
close ( ) ;
}
}
}
@FXML
void tbvBarangOnMouseClicked ( MouseEvent event ) {
if ( event . getButton ( ) . equals ( MouseButton . PRIMARY ) ) {
if ( event . getClickCount ( ) > = 2 ) {
if ( tbvBarang . getSelectionModel ( ) . getSelectedItem ( ) ! = null ) {
selectedBarangFull . setBarang ( tbvBarang . getSelectionModel ( ) . getSelectedItem ( ) . getDataBarang ( ) ) ;
selectedBarangFull . setNoBarang ( tbvBarang . getSelectionModel ( ) . getSelectedItem ( ) . getDataNoBarang ( ) ) ;
close ( ) ;
}
}
}
}
}
}
@ -149,12 +175,54 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
void tfPencarianOnKeyReleased ( KeyEvent event ) {
void tfPencarianOnKeyReleased ( KeyEvent event ) {
if ( ( ( RadioButton ) tgTipe . getSelectedToggle ( ) = = rbKodeBarang
if ( ( ( RadioButton ) tgTipe . getSelectedToggle ( ) = = rbKodeBarang
& & event . getCode ( ) = = KeyCode . ENTER ) ) {
& & event . getCode ( ) = = KeyCode . ENTER ) ) {
idx = 0 ;
if ( tfPencarian . getText ( ) . length ( ) < = 9 ) {
posRx . getBarangByKodeBarang ( tfPencarian . getText ( ) ) . subscribe ( barangKodeObserver ) ;
posRx . getBarangByKodeBarang ( tfPencarian . getText ( ) ) . subscribe ( barangKodeObserver ) ;
} else {
String kodeFull = tfPencarian . getText ( ) ;
String kodeBarang = Fucout . getKodeBarangFromKodeFull ( kodeFull ) ;
String ukur = Fucout . getNomorBarangFromKodeFull ( kodeFull ) ;
if ( AmigoPosCache . getInstance ( ) . getDaftarBarang ( ) . containsKey ( kodeBarang ) ) {
Barang barang = AmigoPosCache . getInstance ( ) . getDaftarBarang ( ) . get ( kodeBarang ) ;
selectedBarangFull . setBarang ( barang ) ;
if ( AmigoPosCache . getInstance ( ) . getDaftarNoBarang ( ) . containsKey (
barang . getIdGabungan ( ) + ukur ) ) {
NoBarang noBarang = AmigoPosCache . getInstance ( ) . getDaftarNoBarang ( )
. get ( barang . getIdGabungan ( ) + ukur ) ;
selectedBarangFull . setNoBarang ( noBarang ) ;
} else {
Observable . zip ( posRx . getBarangByKodeBarang ( kodeBarang ) ,
posRx . getNoBarangByIdGabunganNomor ( barang . getIdGabungan ( ) , ukur ) ,
( b , nB ) - > new BarangFull ( b , nB ) ) . subscribe ( getBarangFullGetNoBarangFromBarangObserver ) ;
}
}
if ( ! AmigoPosCache . getInstance ( ) . getDaftarBarang ( ) . containsKey ( kodeBarang ) ) {
Observable . zip ( posRx . getBarangByKodeBarang ( kodeBarang ) ,
Observable . just ( ukur ) ,
( barang , nomor ) - > {
barang . setNomor ( nomor ) ;
return barang ;
} ) . subscribe ( getTambahBarangObserver ) ;
}
}
} else if ( ( ( RadioButton ) tgTipe . getSelectedToggle ( ) = = rbNamaBarang
} else if ( ( ( RadioButton ) tgTipe . getSelectedToggle ( ) = = rbNamaBarang
& & tfPencarian . getText ( ) . length ( ) > = 3 ) ) {
& & tfPencarian . getText ( ) . length ( ) > = 3 ) ) {
posRx . getBarangByNamaBarang ( tfPencarian . getText ( ) ) . subscribe ( daftarBarangObserver ) ;
compositeDisposable . clear ( ) ;
daftarTabelBarang . clear ( ) ;
idx = 0 ;
Disposable d = posRx . getBarangByNamaBarang ( tfPencarian . getText ( ) )
. subscribeWith ( getDaftarBarangObserver ( ) ) ;
compositeDisposable . add ( d ) ;
} else if ( ( RadioButton ) tgTipe . getSelectedToggle ( ) = = rbNamaBarang
& & tfPencarian . getText ( ) . length ( ) < 3 ) {
compositeDisposable . clear ( ) ;
daftarTabelBarang . clear ( ) ;
}
}
tfPencarian . requestFocus ( ) ;
}
}
public Observer < Barang > barangKodeObserver = new Observer < Barang > ( ) {
public Observer < Barang > barangKodeObserver = new Observer < Barang > ( ) {
@ -165,6 +233,9 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
@Override
@Override
public void onNext ( Barang b ) {
public void onNext ( Barang b ) {
if ( b ! = null ) {
if ( b ! = null ) {
if ( ! AmigoPosCache . getInstance ( ) . getDaftarBarang ( ) . containsKey ( b . getKodeBarang ( ) ) ) {
AmigoPosCache . getInstance ( ) . getDaftarBarang ( ) . put ( b . getKodeBarang ( ) , b ) ;
}
List < Barang > db = new ArrayList < > ( ) ;
List < Barang > db = new ArrayList < > ( ) ;
db . add ( b ) ;
db . add ( b ) ;
updateTabelBarang ( db ) ;
updateTabelBarang ( db ) ;
@ -183,12 +254,39 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
alert . show ( ) ;
alert . show ( ) ;
}
}
} else {
} else {
AmigoPosRx . handleGenericError ( error , apContent . getScene ( ) . getWindow ( ) ) ;
}
}
@Override
public void onComplete ( ) {
}
} ;
private DisposableObserver < Pagination < Barang > > getDaftarBarangObserver ( ) {
return new DisposableObserver < Pagination < Barang > > ( ) {
@Override
public void onNext ( Pagination < Barang > b ) {
if ( b ! = null ) {
updateTabelBarang ( b . getData ( ) ) ;
}
}
@Override
public void onError ( Throwable error ) {
if ( error instanceof HttpException ) {
switch ( ( ( HttpException ) error ) . code ( ) ) {
case HttpURLConnection . HTTP_NOT_FOUND :
Platform . runLater ( ( ) - > {
Alert alert = AlertUtil . getAlertError (
Alert alert = AlertUtil . getAlertError (
AlertUtil . ERROR_TIDAK_TERDUGA_TITLE ,
AlertUtil . ERROR_TIDAK_DITEMUKAN _TITLE,
"Terjadi kesalahan yang tidak terduga." ) ;
"Barang dengan kode tersebut tidak ditemukan .") ;
alert . initOwner ( apContent . getScene ( ) . getWindow ( ) ) ;
alert . initOwner ( apContent . getScene ( ) . getWindow ( ) ) ;
alert . show ( ) ;
alert . show ( ) ;
Logger . getLogger ( FormUtamaController . class . getName ( ) ) . log ( Level . SEVERE , null , error ) ;
} ) ;
}
} else {
AmigoPosRx . handleGenericError ( error , apContent . getScene ( ) . getWindow ( ) ) ;
}
}
}
}
@ -196,16 +294,100 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
public void onComplete ( ) {
public void onComplete ( ) {
}
}
} ;
} ;
}
public Observer < Pagination < Barang > > daftarBarangObserver = new Observer < Pagination < Barang > > ( ) {
int idx = 0 ;
public DisposableObserver < List < NoBarang > > getDaftarNoBarangObserver ( ) {
return new DisposableObserver < List < NoBarang > > ( ) {
@Override
public void onNext ( List < NoBarang > daftarNb ) {
if ( idx < daftarTabelBarang . size ( ) ) {
TabelBarangCari tbc = daftarTabelBarang . get ( idx ) ;
String idGabungan = daftarNb . get ( 0 ) . getIdGabungan ( ) ;
// System.out.println("Barang " + (i + 1) + ": " + daftarTabelBarang.get(i).getDataBarang().getIdGabungan());
if ( tbc . getDataBarang ( ) ! = null & & tbc . getDataBarang ( ) . getIdGabungan ( ) . equals ( idGabungan ) ) {
Barang b = tbc . getDataBarang ( ) ;
// System.out.println("### Ditemukan id gabungan sama dengan hasil api: " + b.getNamaBarang()
// + "(Urutan ke: " + (i + 1) + ") ###");
int j = 0 ;
for ( NoBarang nb : daftarNb ) {
if ( j = = 0 ) {
// System.out.println("Nomor pertama: " + nb.getNomor());
b . setNomor ( nb . getNomor ( ) ) ;
tbc . setDataNoBarang ( nb ) ;
tbc . setUkur ( Fucout . getText ( nb . getNomor ( ) ) ) ;
tbc . setHarga ( Fucout . getText ( Fucout . formatRibuan ( nb . getHargaJual ( ) ) ) ) ;
tbvBarang . refresh ( ) ;
} else {
// System.out.println("Nomor " + (j + 1) + ": " + nb.getNomor());
TabelBarangCari tbcBaru = new TabelBarangCari (
Fucout . getText ( b . getKodeBarang ( ) ) ,
Fucout . getText ( b . getNamaBarang ( ) ) ,
Fucout . getText ( nb . getNomor ( ) ) ,
Fucout . getText ( Fucout . formatRibuan ( nb . getHargaJual ( ) ) ) ) ;
tbcBaru . setDataBarang ( b ) ;
tbcBaru . setDataNoBarang ( nb ) ;
daftarTabelBarang . add ( idx + j , tbcBaru ) ;
}
// System.out.println("Masuk di urutan: " + (i + j + 1));
j + + ;
}
idx + = daftarNb . size ( ) ;
// System.out.println("### SELESAI ###\n");
}
}
}
@Override
public void onError ( Throwable error ) {
if ( error instanceof HttpException ) {
switch ( ( ( HttpException ) error ) . code ( ) ) {
case HttpURLConnection . HTTP_NOT_FOUND :
Platform . runLater ( ( ) - > {
Alert alert = AlertUtil . getAlertError (
AlertUtil . ERROR_TIDAK_DITEMUKAN_TITLE ,
"Barang dengan kode tersebut tidak ditemukan." ) ;
alert . initOwner ( apContent . getScene ( ) . getWindow ( ) ) ;
alert . show ( ) ;
} ) ;
}
} else if ( error instanceof InterruptedIOException ) {
daftarTabelBarang . clear ( ) ;
} else {
AmigoPosRx . handleGenericError ( error , apContent . getScene ( ) . getWindow ( ) ) ;
}
}
@Override
public void onComplete ( ) {
}
} ;
}
Observer < Barang > getTambahBarangObserver = new Observer < > ( ) {
@Override
@Override
public void onSubscribe ( Disposable dspsbl ) {
public void onSubscribe ( Disposable dspsbl ) {
}
}
@Override
@Override
public void onNext ( Pagination < Barang > b ) {
public void onNext ( Barang b ) {
if ( b ! = null ) {
Barang bClone = new Barang ( b ) ;
updateTabelBarang ( b . getData ( ) ) ;
bClone . setNomor ( null ) ;
AmigoPosCache . getInstance ( ) . getDaftarBarang ( ) . put ( b . getKodeBarang ( ) , bClone ) ;
if ( b . getNomor ( ) ! = null & & ! b . getNomor ( ) . equals ( "" ) ) {
if ( ! AmigoPosCache . getInstance ( ) . getDaftarNoBarang ( ) . containsKey (
b . getIdGabungan ( ) + b . getNomor ( ) ) ) {
Observable . zip (
Observable . just ( b ) ,
posRx . getNoBarangByIdGabunganNomor ( b . getIdGabungan ( ) , b . getNomor ( ) ) ,
( barang , noBarang ) - > new BarangFull ( barang , noBarang ) )
. subscribe ( getBarangFullGetNoBarangFromBarangObserver ) ;
}
}
}
}
}
@ -214,19 +396,50 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
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 :
Platform . runLater ( ( ) - > {
Alert alert = AlertUtil . getAlertError (
Alert alert = AlertUtil . getAlertError (
AlertUtil . ERROR_TIDAK_DITEMUKAN_TITLE ,
AlertUtil . ERROR_TIDAK_DITEMUKAN_TITLE ,
"Barang dengan kode tersebut tidak ditemukan." ) ;
"Barang dengan kode tersebut tidak ditemukan." ) ;
alert . initOwner ( apContent . getScene ( ) . getWindow ( ) ) ;
alert . initOwner ( apContent . getScene ( ) . getWindow ( ) ) ;
alert . show ( ) ;
alert . show ( ) ;
} ) ;
}
}
} else {
} else {
AmigoPosRx . handleGenericError ( error , apContent . getScene ( ) . getWindow ( ) ) ;
}
}
@Override
public void onComplete ( ) {
}
} ;
Observer < BarangFull > getBarangFullGetNoBarangFromBarangObserver = new Observer < > ( ) {
@Override
public void onSubscribe ( Disposable dspsbl ) {
}
@Override
public void onNext ( BarangFull bf ) {
selectedBarangFull = bf ;
}
@Override
public void onError ( Throwable error ) {
if ( error instanceof HttpException ) {
switch ( ( ( HttpException ) error ) . code ( ) ) {
case HttpURLConnection . HTTP_NOT_FOUND :
Platform . runLater ( ( ) - > {
Alert alert = AlertUtil . getAlertError (
Alert alert = AlertUtil . getAlertError (
AlertUtil . ERROR_TIDAK_TERDUGA_TITLE ,
AlertUtil . ERROR_TIDAK_DITEMUKAN _TITLE,
"Terjadi kesalahan yang tidak terduga." ) ;
"Barang dengan kode tersebut tidak ditemukan .") ;
alert . initOwner ( apContent . getScene ( ) . getWindow ( ) ) ;
alert . initOwner ( apContent . getScene ( ) . getWindow ( ) ) ;
alert . show ( ) ;
alert . show ( ) ;
Logger . getLogger ( FormUtamaController . class . getName ( ) ) . log ( Level . SEVERE , null , error ) ;
} ) ;
}
} else {
AmigoPosRx . handleGenericError ( error , apContent . getScene ( ) . getWindow ( ) ) ;
}
}
}
}
@ -234,5 +447,4 @@ public class DialogCariBarangController extends Dialog<Barang> implements Initia
public void onComplete ( ) {
public void onComplete ( ) {
}
}
} ;
} ;
}
}