@ -5,42 +5,41 @@
* /
* /
package id.amigogroup.posterminal.transaksi ;
package id.amigogroup.posterminal.transaksi ;
import id.amigogroup.posterminal.pencarian.DialogCariBarangController ;
import id.amigogroup.posterminal.FormUtamaController ;
import java.io.IOException ;
import id.amigogroup.posterminal.api.AmigoPosRx ;
import id.amigogroup.posterminal.model.Barang ;
import id.amigogroup.posterminal.model.DNotaTunai ;
import id.amigogroup.posterminal.pencarian.BarangCache ;
import id.amigogroup.posterminal.util.AlertUtil ;
import id.amigogroup.posterminal.util.Fucout ;
import io.reactivex.Observer ;
import io.reactivex.disposables.Disposable ;
import java.net.HttpURLConnection ;
import java.net.SocketTimeoutException ;
import java.net.URL ;
import java.net.URL ;
import java.util.ArrayList ;
import java.util.ArrayList ;
import java.util.HashMap ;
import java.util.List ;
import java.util.List ;
import java.util.Map ;
import java.util.ResourceBundle ;
import java.util.ResourceBundle ;
import java.util.logging.Level ;
import java.util.logging.Level ;
import java.util.logging.Logger ;
import java.util.logging.Logger ;
import javafx.application.Platform ;
import javafx.beans.property.ReadOnlyObjectWrapper ;
import javafx.beans.property.ReadOnlyObjectWrapper ;
import javafx.collections.FXCollections ;
import javafx.collections.FXCollections ;
import javafx.collections.ObservableList ;
import javafx.collections.ObservableList ;
import javafx.event.ActionEvent ;
import javafx.event.ActionEvent ;
import javafx.fxml.FXML ;
import javafx.fxml.FXML ;
import javafx.fxml.FXMLLoader ;
import javafx.fxml.Initializable ;
import javafx.fxml.Initializable ;
import javafx.scene.Parent ;
import javafx.scene.control.Alert ;
import javafx.scene.control.Button ;
import javafx.scene.control.ComboBox ;
import javafx.scene.control.ComboBox ;
import javafx.scene.control.Label ;
import javafx.scene.control.TableColumn ;
import javafx.scene.control.TableColumn ;
import javafx.scene.control.TableView ;
import javafx.scene.control.TableView ;
import javafx.scene.control.TextField ;
import javafx.scene.control.TextField ;
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.KeyCodeCombination ;
import javafx.scene.input.KeyCombination ;
import javafx.scene.input.KeyEvent ;
import javafx.scene.input.KeyEvent ;
import javafx.scene.layout.AnchorPane ;
import javafx.scene.text.Text ;
import javafx.scene.text.Text ;
import javafx.stage.Window ;
import retrofit2.HttpException ;
import java.util.Date ;
import java.text.DateFormat ;
import java.text.SimpleDateFormat ;
import javafx.scene.control.Label ;
/ * *
/ * *
* FXML Controller class
* FXML Controller class
@ -49,10 +48,14 @@ import javafx.scene.control.Label;
* /
* /
public class FormTransaksiTunaiController implements Initializable {
public class FormTransaksiTunaiController implements Initializable {
@FXML
private AnchorPane apMain ;
@FXML
@FXML
private TextField fldScan ;
private TextField fldScan ;
@FXML
@FXML
private TableView < TabelBarangTunai > tbvTranstunai ;
private Label lblNoNota ;
@FXML
private TableView < TabelBarangTunai > tbvTransaksi ;
@FXML
@FXML
private TableColumn < TabelBarangTunai , Integer > tcNo ;
private TableColumn < TabelBarangTunai , Integer > tcNo ;
@FXML
@FXML
@ -75,131 +78,194 @@ public class FormTransaksiTunaiController implements Initializable {
private TableColumn < TabelBarangTunai , String > tcSubtotal ;
private TableColumn < TabelBarangTunai , String > tcSubtotal ;
@FXML
@FXML
private TableColumn < TabelBarangTunai , TextField > tcPramuniaga ;
private TableColumn < TabelBarangTunai , TextField > tcPramuniaga ;
final ObservableList < TabelBarangTunai > daftarTabel Barang = FXCollections . observableArrayList ( ) ;
final ObservableList < TabelBarangTunai > daftarTabel Transaksi = FXCollections . observableArrayList ( ) ;
@FXML
@FXML
private Text lblGrandTotal ;
private Text lblGrandTotal ;
{
}
private AmigoPosRx posRx = new AmigoPosRx ( ) ;
// private String tableState = BTN_TUNAI;
/ * *
/ * *
* Initializes the controller class .
* Initializes the controller class .
* /
* /
@Override
@Override
public void initialize ( URL url , ResourceBundle rb ) {
public void initialize ( URL url , ResourceBundle rb ) {
tcNo . setCellValueFactory ( ( TableColumn . CellDataFeatures < TabelBarangTunai , Integer > cell ) - > {
tcNo . setCellValueFactory ( ( TableColumn . CellDataFeatures < TabelBarangTunai , Integer > cell ) - > {
return new ReadOnlyObjectWrapper ( tbvTrans tun ai. getItems ( ) . indexOf ( cell . getValue ( ) ) + 1 ) ;
return new ReadOnlyObjectWrapper ( tbvTrans aks i. getItems ( ) . indexOf ( cell . getValue ( ) ) + 1 ) ;
} ) ;
} ) ;
tcKode . setCellValueFactory ( new PropertyValueFactory < > ( "tcKode" ) ) ;
tcKode . setCellValueFactory ( new PropertyValueFactory < > ( "kode" ) ) ;
tcNama . setCellValueFactory ( new PropertyValueFactory < > ( "tcNama" ) ) ;
tcNama . setCellValueFactory ( new PropertyValueFactory < > ( "nama" ) ) ;
tcUkur . setCellValueFactory ( new PropertyValueFactory < > ( "tcUkur" ) ) ;
tcUkur . setCellValueFactory ( new PropertyValueFactory < > ( "ukur" ) ) ;
tcJumlah . setCellValueFactory ( new PropertyValueFactory < > ( "tcJumlah" ) ) ;
tcJumlah . setCellValueFactory ( new PropertyValueFactory < > ( "jumlah" ) ) ;
tcHarga . setCellValueFactory ( new PropertyValueFactory < > ( "tcHarga" ) ) ;
tcHarga . setCellValueFactory ( new PropertyValueFactory < > ( "harga" ) ) ;
tcDisc1 . setCellValueFactory ( new PropertyValueFactory < > ( "tcDisc1" ) ) ;
tcDisc1 . setCellValueFactory ( new PropertyValueFactory < > ( "disc1" ) ) ;
tcDisc2 . setCellValueFactory ( new PropertyValueFactory < > ( "tcDisc2" ) ) ;
tcDisc2 . setCellValueFactory ( new PropertyValueFactory < > ( "disc2" ) ) ;
tcPromo . setCellValueFactory ( new PropertyValueFactory < > ( "tcPromo" ) ) ;
tcPromo . setCellValueFactory ( new PropertyValueFactory < > ( "cbxPromo" ) ) ;
tcSubtotal . setCellValueFactory ( new PropertyValueFactory < > ( "tcSubtotal" ) ) ;
tcSubtotal . setCellValueFactory ( new PropertyValueFactory < > ( "subTotal" ) ) ;
tcPramuniaga . setCellValueFactory ( new PropertyValueFactory < > ( "tcPramuniaga" ) ) ;
tcPramuniaga . setCellValueFactory ( new PropertyValueFactory < > ( "fldPramuniaga" ) ) ;
tbvTranstunai . setItems ( daftarTabelBarang ) ;
tbvTransaksi . setItems ( daftarTabelTransaksi ) ;
fillTable ( new ArrayList < > ( ) ) ;
// fillTable(new ArrayList<>());
}
}
public void initData ( String noNota ) {
posRx . getDNotaTunaiByNoNota ( noNota ) . subscribe ( getDNotaTunaiObserver ) ;
lblNoNota . setText ( Fucout . getTextColon ( noNota ) ) ;
}
private void initShortcuts ( ) {
private void refreshData ( List < DNotaTunai > daftarNotaTunai ) {
// Map<KeyCombination, Runnable> listShortcuts = new HashMap<>();
daftarTabelTransaksi . clear ( ) ;
//
// KeyCombination kcBtnTunai = new KeyCodeCombination(KeyCode.F1);
String [ ] promo = { "Ulang Tahun" , "Harbolnas" , "Ultah Amigo" } ;
// Runnable rnBtnTunai = () -> btnTunai.fire();
for ( DNotaTunai dNotaTunai : daftarNotaTunai ) {
// listShortcuts.put(kcBtnTunai, rnBtnTunai);
ComboBox < String > cbxPromo = new ComboBox < > ( FXCollections . observableArrayList ( promo ) ) ;
//
cbxPromo . getSelectionModel ( ) . select ( "Ulang Tahun" ) ;
// KeyCombination kcBtnBawa = new KeyCodeCombination(KeyCode.F2);
// Runnable rnBtnBawa = () -> btnBawaDulu.fire();
TextField fldPramuniaga = new TextField ( dNotaTunai . getKodePram ( ) ) ;
// listShortcuts.put(kcBtnBawa, rnBtnBawa);
fldPramuniaga . setOnKeyPressed ( ( t ) - > {
//
if ( t . getCode ( ) = = KeyCode . ENTER ) {
// KeyCombination kcBon = new KeyCodeCombination(KeyCode.F3);
fldScan . requestFocus ( ) ;
// Runnable rnBon = () -> btnBon.fire();
}
// listShortcuts.put(kcBon, rnBon);
} ) ;
//
// KeyCombination kcRetur = new KeyCodeCombination(KeyCode.F4);
String namaBarang = "..." ;
// Runnable rnRetur = () -> btnRetur.fire();
if ( BarangCache . getInstance ( ) . getDaftarBarang ( ) . containsKey ( dNotaTunai . getKdBarang ( ) ) ) {
// listShortcuts.put(kcRetur, rnRetur);
namaBarang = Fucout . getText ( BarangCache . getInstance ( ) . getDaftarBarang ( )
//
. get ( dNotaTunai . getKdBarang ( ) ) . getNamaBarang ( ) ) ;
// Platform.runLater(() -> {
}
// fldScan.getScene().getAccelerators().putAll(listShortcuts);
// });
daftarTabelTransaksi . add ( new TabelBarangTunai (
Fucout . getText ( dNotaTunai . getKdBarang ( ) ) ,
namaBarang ,
Fucout . getText ( dNotaTunai . getNoBarang ( ) ) ,
Fucout . getText ( String . valueOf ( dNotaTunai . getJumlah ( ) ) ) ,
Fucout . getText ( Fucout . formatRibuan ( dNotaTunai . getHargaJual ( ) ) ) ,
Fucout . getText ( Fucout . formatPersentase ( dNotaTunai . getDiskon ( ) ) ) ,
Fucout . getText ( Fucout . formatPersentase ( dNotaTunai . getDiskon2 ( ) ) ) ,
cbxPromo ,
Fucout . getText ( Fucout . formatRibuan (
dNotaTunai . getHargaJual ( ) * dNotaTunai . getJumlah ( )
) ) ,
fldPramuniaga ) ) ;
if ( ! BarangCache . getInstance ( ) . getDaftarBarang ( ) . containsKey ( dNotaTunai . getKdBarang ( ) ) ) {
posRx . getBarangByKodeBarang ( dNotaTunai . getKdBarang ( ) ) . subscribe ( getBarangObserver ) ;
}
}
}
}
@FXML
// public void fillTable(List<TabelBarangTunai> daftarBarangTunai) {
void btnNavigasiOnAction ( ActionEvent event ) {
// String[] promo = {"Ulang Tahun", "Harbolnas", "Ultah Amigo"};
// Button buttonSource = (Button) event.getSource();
// ComboBox<String> cbxAction = new ComboBox<>(FXCollections.observableArrayList(promo));
// if (!tableState.equals(buttonSource.getText().toLowerCase())) {
// cbxAction.getSelectionModel().select("Ulang Tahun");
// switch (buttonSource.getText().toLowerCase()) {
// TextField txtScan = new TextField();
// case BTN_TUNAI:
// txtScan.setOnKeyPressed((t) -> {
// //ambil data tunai
// if (t.getCode() == KeyCode.ENTER) {
// tableState = BTN_TUNAI;
// fldScan.requestFocus();
// System.out.println("ambil data tunai");
// break;
// case BTN_BAWA_DULU:
// //ambil data bawa dulu
// tableState = BTN_BAWA_DULU;
// System.out.println("ambil data bawa dulu");
// break;
// case BTN_BON:
// //ambil data bon
// tableState = BTN_BON;
// System.out.println("ambil data bon");
// break;
// case BTN_RETUR:
// //ambil data retur
// tableState = BTN_RETUR;
// System.out.println("ambil data retur");
// break;
// }
// }
//
// for (Button button : navigasi) {
// if (button.equals(buttonSource)) {
// if (!button.getStyleClass().contains("button-navigasi-transaksi-selected")) {
// button.getStyleClass().add("button-navigasi-transaksi-selected");
// }
// } else {
// if (button.getStyleClass().contains("button-navigasi-transaksi-selected")) {
// button.getStyleClass().remove("button-navigasi-transaksi-selected");
// }
// }
// }
// }
// });
//
// daftarTabelTransaksi.add(new TabelBarangTunai("AACOBA001ABCDXL", "Barang x", "XL", "1", "79.900", "0", "0", cbxAction,
// fldScan.requestFocus( );
// "79.900", txtScan));
}
// }
@FXML
@FXML
void fldScanOnKeyPressed ( KeyEvent event ) {
void fldScanOnKeyPressed ( KeyEvent event ) {
if ( event . getCode ( ) = = KeyCode . ENTER ) {
if ( event . getCode ( ) = = KeyCode . ENTER ) {
//proses scan
//proses scan
System . out . println ( "Scan" ) ;
System . out . println ( "Scan" ) ;
}
}
}
}
Observer < List < DNotaTunai > > getDNotaTunaiObserver = new Observer < > ( ) {
@Override
public void onSubscribe ( Disposable dspsbl ) {
}
@Override
public void onNext ( List < DNotaTunai > daftarDNotaTunai ) {
refreshData ( daftarDNotaTunai ) ;
}
public void fillTable ( List < TabelBarangTunai > daftarBarangTunai ) {
@Override
String [ ] promo = { "Ulang Tahun" , "Harbolnas" , "Ultah Amigo" } ;
public void onError ( Throwable error ) {
ComboBox < String > cbxAction = new ComboBox < > ( FXCollections . observableArrayList ( promo ) ) ;
if ( error instanceof HttpException ) {
cbxAction . getSelectionModel ( ) . select ( "Ulang Tahun" ) ;
switch ( ( ( HttpException ) error ) . code ( ) ) {
TextField txtScan = new TextField ( ) ;
case HttpURLConnection . HTTP_NOT_FOUND :
txtScan . setOnKeyPressed ( ( t ) - > {
Alert alert = AlertUtil . getAlertError (
if ( t . getCode ( ) = = KeyCode . ENTER ) {
AlertUtil . ERROR_TIDAK_DITEMUKAN_TITLE ,
fldScan . requestFocus ( ) ;
"Data nota tidak ditemukan." ) ;
}
alert . initOwner ( apMain . getScene ( ) . getWindow ( ) ) ;
} ) ;
alert . show ( ) ;
daftarTabelBarang . add ( new TabelBarangTunai ( "AACOBA001ABCDXL" , "Barang x" , "XL" , "1" , "79.900" , "0" , "0" , cbxAction ,
}
"79.900" , txtScan ) ) ;
} else if ( error instanceof SocketTimeoutException ) {
}
Alert alert = AlertUtil . getAlertError (
AlertUtil . ERROR_KONEKSI_TIMEOUT_TITLE ,
AlertUtil . ERROR_KONEKSI_TIMEOUT_MESSAGE ) ;
alert . initOwner ( apMain . getScene ( ) . getWindow ( ) ) ;
alert . show ( ) ;
} else {
Alert alert = AlertUtil . getAlertError (
AlertUtil . ERROR_TIDAK_TERDUGA_TITLE ,
AlertUtil . ERROR_TIDAK_TERDUGA_MESSAGE ) ;
alert . initOwner ( apMain . getScene ( ) . getWindow ( ) ) ;
alert . show ( ) ;
Logger . getLogger ( FormUtamaController . class
. getName ( ) ) . log ( Level . SEVERE , null , error ) ;
}
}
@Override
public void onComplete ( ) {
}
} ;
Observer < Barang > getBarangObserver = new Observer < > ( ) {
@Override
public void onSubscribe ( Disposable dspsbl ) {
}
@Override
public void onNext ( Barang b ) {
BarangCache . getInstance ( ) . getDaftarBarang ( ) . put ( b . getKodeBarang ( ) , b ) ;
for ( TabelBarangTunai tbt : daftarTabelTransaksi ) {
if ( tbt . getKode ( ) . equals ( b . getKodeBarang ( ) ) ) {
tbt . setNama ( b . getNamaBarang ( ) ) ;
tbvTransaksi . refresh ( ) ;
}
}
}
@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 ,
"Barang dengan kode tersebut tidak ditemukan." ) ;
alert . initOwner ( apMain . getScene ( ) . getWindow ( ) ) ;
alert . show ( ) ;
}
} else if ( error instanceof SocketTimeoutException ) {
Alert alert = AlertUtil . getAlertError (
AlertUtil . ERROR_KONEKSI_TIMEOUT_TITLE ,
AlertUtil . ERROR_KONEKSI_TIMEOUT_MESSAGE ) ;
alert . initOwner ( apMain . getScene ( ) . getWindow ( ) ) ;
alert . show ( ) ;
} else {
Alert alert = AlertUtil . getAlertError (
AlertUtil . ERROR_TIDAK_TERDUGA_TITLE ,
AlertUtil . ERROR_TIDAK_TERDUGA_MESSAGE ) ;
alert . initOwner ( apMain . getScene ( ) . getWindow ( ) ) ;
alert . show ( ) ;
Logger . getLogger ( FormUtamaController . class
. getName ( ) ) . log ( Level . SEVERE , null , error ) ;
}
}
@Override
public void onComplete ( ) {
}
} ;
}
}