@ -8,8 +8,9 @@ package id.amigogroup.posterminal.transaksi;
import id.amigogroup.posterminal.FormUtamaController ;
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.DNotaRetur ;
import id.amigogroup.posterminal.model.DNotaTunai ;
import id.amigogroup.posterminal.model.DNotaTunai ;
import id.amigogroup.posterminal. pencarian.Barang Cache;
import id.amigogroup.posterminal. util.AmigoPos Cache;
import id.amigogroup.posterminal.util.AlertUtil ;
import id.amigogroup.posterminal.util.AlertUtil ;
import id.amigogroup.posterminal.util.Fucout ;
import id.amigogroup.posterminal.util.Fucout ;
import io.reactivex.Observer ;
import io.reactivex.Observer ;
@ -17,7 +18,6 @@ import io.reactivex.disposables.Disposable;
import java.net.HttpURLConnection ;
import java.net.HttpURLConnection ;
import java.net.SocketTimeoutException ;
import java.net.SocketTimeoutException ;
import java.net.URL ;
import java.net.URL ;
import java.util.ArrayList ;
import java.util.List ;
import java.util.List ;
import java.util.ResourceBundle ;
import java.util.ResourceBundle ;
import java.util.logging.Level ;
import java.util.logging.Level ;
@ -34,9 +34,15 @@ 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.ClipboardContent ;
import javafx.scene.input.DragEvent ;
import javafx.scene.input.Dragboard ;
import javafx.scene.input.KeyCode ;
import javafx.scene.input.KeyCode ;
import javafx.scene.input.KeyEvent ;
import javafx.scene.input.KeyEvent ;
import javafx.scene.input.MouseEvent ;
import javafx.scene.input.TransferMode ;
import javafx.scene.layout.AnchorPane ;
import javafx.scene.layout.AnchorPane ;
import javafx.scene.layout.StackPane ;
import retrofit2.HttpException ;
import retrofit2.HttpException ;
/ * *
/ * *
@ -72,33 +78,40 @@ public class FormTransaksiReturController implements Initializable {
private TableColumn < TabelBarangTunai , String > tcSubTotal ;
private TableColumn < TabelBarangTunai , String > tcSubTotal ;
@FXML
@FXML
private TableColumn < TabelBarangTunai , TextField > tcPramuniaga ;
private TableColumn < TabelBarangTunai , TextField > tcPramuniaga ;
@FXML
// @FXML
private Label lblNomorNota ;
// private TableView<?> tbvRetur;
@FXML
// @FXML
private TableView < TabelBarangRetur > tbvRetur ;
// private TableColumn<?, ?> tcNoRetur;
@FXML
// @FXML
private TableColumn < TabelBarangRetur , Integer > tcNoRetur ;
// private TableColumn<?, ?> tcKodeRetur;
@FXML
// @FXML
private TableColumn < TabelBarangRetur , String > tcKodeRetur ;
// private TableColumn<?, ?> tcNamaRetur;
@FXML
// @FXML
private TableColumn < TabelBarangRetur , String > tcNamaRetur ;
// private TableColumn<?, ?> tcUkurRetur;
@FXML
// @FXML
private TableColumn < TabelBarangRetur , String > tcUkurRetur ;
// private TableColumn<?, ?> tcJumlahRetur;
@FXML
// @FXML
private TableColumn < TabelBarangRetur , String > tcJumlahRetur ;
// private TableColumn<?, ?> tcHargaRetur;
@FXML
// @FXML
private TableColumn < TabelBarangRetur , String > tcHargaRetur ;
// private TableColumn<?, ?> tcDisc1Retur;
@FXML
// @FXML
private TableColumn < TabelBarangRetur , String > tcDisc1Retur ;
// private TableColumn<?, ?> tcDisc2Retur;
@FXML
// @FXML
private TableColumn < TabelBarangRetur , String > tcDisc2Retur ;
// private TableColumn<?, ?> tcSubtotalRetur;
@FXML
// @FXML
private TableColumn < TabelBarangRetur , String > tcSubTotalRetur ;
// private TableColumn<?, ?> tcPramuniagaRetur;
@FXML
private TableColumn < TabelBarangRetur , TextField > tcPramuniagaRetur ;
@FXML
private StackPane stpReturDrop ;
@FXML
private Label lblTambahKeTabelRetur ;
private final AmigoPosRx posRx = new AmigoPosRx ( ) ;
private final AmigoPosRx posRx = new AmigoPosRx ( ) ;
private String noNota = "" ;
private final ObservableList < TabelBarangTunai > daftarTabelPenjualan = FXCollections . observableArrayList ( ) ;
private final ObservableList < TabelBarangTunai > daftarTabelPenjualan = FXCollections . observableArrayList ( ) ;
private List < DetailTransaksi > daftarDetailTransaksi = new ArrayList < > ( ) ;
private final ObservableList < TabelBarangRetur > daftarTabelRetur = FXCollections . observableArrayList ( ) ;
private TabelBarangTunai draggedTabelBarangTunai = null ;
/ * *
/ * *
* Initializes the controller class .
* Initializes the controller class .
@ -118,33 +131,47 @@ public class FormTransaksiReturController implements Initializable {
tcSubTotal . setCellValueFactory ( new PropertyValueFactory < > ( "subTotal" ) ) ;
tcSubTotal . setCellValueFactory ( new PropertyValueFactory < > ( "subTotal" ) ) ;
tcPramuniaga . setCellValueFactory ( new PropertyValueFactory < > ( "fldPramuniaga" ) ) ;
tcPramuniaga . setCellValueFactory ( new PropertyValueFactory < > ( "fldPramuniaga" ) ) ;
tbvPenjualan . setItems ( daftarTabelPenjualan ) ;
tbvPenjualan . setItems ( daftarTabelPenjualan ) ;
tcNoRetur . setCellValueFactory ( ( TableColumn . CellDataFeatures < TabelBarangRetur , Integer > cell ) - > {
return new ReadOnlyObjectWrapper ( tbvRetur . getItems ( ) . indexOf ( cell . getValue ( ) ) + 1 ) ;
} ) ;
tcKodeRetur . setCellValueFactory ( new PropertyValueFactory < > ( "kode" ) ) ;
tcNamaRetur . setCellValueFactory ( new PropertyValueFactory < > ( "nama" ) ) ;
tcUkurRetur . setCellValueFactory ( new PropertyValueFactory < > ( "ukur" ) ) ;
tcJumlahRetur . setCellValueFactory ( new PropertyValueFactory < > ( "jumlah" ) ) ;
tcHargaRetur . setCellValueFactory ( new PropertyValueFactory < > ( "harga" ) ) ;
tcDisc1Retur . setCellValueFactory ( new PropertyValueFactory < > ( "disc1" ) ) ;
tcDisc2Retur . setCellValueFactory ( new PropertyValueFactory < > ( "disc2" ) ) ;
tcSubTotalRetur . setCellValueFactory ( new PropertyValueFactory < > ( "subTotal" ) ) ;
tcPramuniagaRetur . setCellValueFactory ( new PropertyValueFactory < > ( "fldPramuniaga" ) ) ;
tbvRetur . setItems ( daftarTabelRetur ) ;
Platform . runLater ( ( ) - > {
Platform . runLater ( ( ) - > {
fldNotaPenjualan . requestFocus ( ) ;
fldNotaPenjualan . requestFocus ( ) ;
} ) ;
} ) ;
}
}
private void mapCurrentDataToDetailTransaksi ( ) {
public void initData ( String noNota , boolean baru ) {
this . noNota = noNota ;
lblNomorNota . setText ( Fucout . getTextColon ( noNota ) ) ;
}
}
int count = 0 ;
@FXML
Label lbl ;
private void refreshData ( List < DNotaTunai > daftarNotaTunai ) {
private void refreshData ( List < DNotaTunai > daftarNotaTunai ) {
daftarTabelPenjualan . clear ( ) ;
daftarTabelPenjualan . clear ( ) ;
daftarTabelRetur . clear ( ) ;
for ( DNotaTunai dNotaTunai : daftarNotaTunai ) {
for ( DNotaTunai dNotaTunai : daftarNotaTunai ) {
TextField fldPramuniaga = new TextField ( dNotaTunai . getKodePram ( ) ) ;
TextField fldPramuniaga = new TextField ( dNotaTunai . getKodePram ( ) ) ;
String namaBarang = "..." ;
String namaBarang = "..." ;
if ( BarangCache . getInstance ( ) . getDaftarBarang ( ) . containsKey ( dNotaTunai . getKdBarang ( ) ) ) {
if ( AmigoPosCache . getInstance ( ) . getDaftarBarang ( ) . containsKey ( dNotaTunai . getKdBarang ( ) ) ) {
namaBarang = Fucout . getText ( BarangCache . getInstance ( ) . getDaftarBarang ( )
Barang barang = AmigoPosCache . getInstance ( ) . getDaftarBarang ( )
. get ( dNotaTunai . getKdBarang ( ) ) . getNamaBarang ( ) ) ;
. get ( dNotaTunai . getKdBarang ( ) ) ;
namaBarang = Fucout . getText ( barang . getNamaBarang ( ) ) ;
dNotaTunai . setBarang ( barang ) ;
}
}
daftarTabelPenjualan. add ( new TabelBarangTunai (
TabelBarangTunai tbt = new TabelBarangTunai (
Fucout . getText ( dNotaTunai . getKdBarang ( ) ) ,
Fucout . getText ( dNotaTunai . getKdBarang ( ) ) ,
namaBarang ,
namaBarang ,
Fucout . getText ( dNotaTunai . getNoBarang ( ) ) ,
Fucout . getText ( dNotaTunai . getNoBarang ( ) ) ,
@ -156,9 +183,11 @@ public class FormTransaksiReturController implements Initializable {
Fucout . getText ( Fucout . formatRibuan (
Fucout . getText ( Fucout . formatRibuan (
dNotaTunai . getHargaJual ( ) * dNotaTunai . getJumlah ( )
dNotaTunai . getHargaJual ( ) * dNotaTunai . getJumlah ( )
) ) ,
) ) ,
fldPramuniaga ) ) ;
fldPramuniaga ) ;
tbt . setData ( dNotaTunai ) ;
daftarTabelPenjualan . add ( tbt ) ;
if ( ! BarangCache . getInstance ( ) . getDaftarBarang ( ) . containsKey ( dNotaTunai . getKdBarang ( ) ) ) {
if ( ! AmigoPos Cache. getInstance ( ) . getDaftarBarang ( ) . containsKey ( dNotaTunai . getKdBarang ( ) ) ) {
posRx . getBarangByKodeBarang ( dNotaTunai . getKdBarang ( ) ) . subscribe ( getBarangObserver ) ;
posRx . getBarangByKodeBarang ( dNotaTunai . getKdBarang ( ) ) . subscribe ( getBarangObserver ) ;
}
}
}
}
@ -171,6 +200,135 @@ public class FormTransaksiReturController implements Initializable {
}
}
}
}
@FXML
void tbvPenjualanOnDragDetected ( MouseEvent event ) {
Dragboard db = tbvPenjualan . startDragAndDrop ( TransferMode . COPY ) ;
if ( tbvPenjualan . getSelectionModel ( ) . getSelectedItem ( ) ! = null ) {
stpReturDrop . setVisible ( true ) ;
ClipboardContent content = new ClipboardContent ( ) ;
content . putString ( tbvPenjualan . getSelectionModel ( ) . getSelectedItem ( ) . getNama ( ) ) ;
db . setContent ( content ) ;
draggedTabelBarangTunai = tbvPenjualan . getSelectionModel ( ) . getSelectedItem ( ) ;
}
event . consume ( ) ;
}
@FXML
void stpReturDropOnDragOver ( DragEvent event ) {
if ( event . getGestureSource ( ) ! = tbvRetur
& & event . getDragboard ( ) . hasString ( ) ) {
event . acceptTransferModes ( TransferMode . COPY ) ;
}
event . consume ( ) ;
}
@FXML
void stpReturDropOnDragEntered ( DragEvent event ) {
if ( event . getGestureSource ( ) ! = stpReturDrop
& & event . getDragboard ( ) . hasString ( ) ) {
lblTambahKeTabelRetur . setText ( "Tambah Barang " + event . getDragboard ( ) . getString ( ) + " ke Nota Retur" ) ;
lblTambahKeTabelRetur . setVisible ( true ) ;
if ( ! stpReturDrop . getStyleClass ( ) . contains ( "table-drag-over" ) ) {
stpReturDrop . getStyleClass ( ) . add ( "table-drag-over" ) ;
}
}
event . consume ( ) ;
}
@FXML
void stpReturDropOnDragExited ( DragEvent event ) {
lblTambahKeTabelRetur . setVisible ( false ) ;
if ( stpReturDrop . getStyleClass ( ) . contains ( "table-drag-over" ) ) {
lblTambahKeTabelRetur . setText ( "Tambah Barang ke Nota Retur" ) ;
stpReturDrop . getStyleClass ( ) . remove ( "table-drag-over" ) ;
}
event . consume ( ) ;
}
@FXML
void stpReturDropOnDragDropped ( DragEvent event ) {
/ * data dropped
* if there is a string data on dragboard , read it and use it * /
Dragboard db = event . getDragboard ( ) ;
boolean success = false ;
if ( db . hasString ( ) ) {
}
if ( draggedTabelBarangTunai ! = null ) {
boolean ada = false ;
for ( TabelBarangRetur tbr : daftarTabelRetur ) {
if ( tbr . getData ( ) ! = null & & draggedTabelBarangTunai . getData ( ) ! = null ) {
DNotaRetur dNotaRetur = tbr . getData ( ) ;
DNotaTunai dNotaTunai = draggedTabelBarangTunai . getData ( ) ;
if ( dNotaRetur . getKdBarang ( ) . equals ( dNotaTunai . getKdBarang ( ) )
& & dNotaRetur . getNoBarang ( ) . equals ( dNotaTunai . getNoBarang ( ) ) ) {
if ( ( dNotaRetur . getJumlah ( ) + 1 ) < = dNotaTunai . getJumlah ( ) ) {
dNotaRetur . setJumlah ( dNotaRetur . getJumlah ( ) + 1 ) ;
tbr . setJumlah ( Fucout . getText ( String . valueOf ( dNotaRetur . getJumlah ( ) ) ) ) ;
tbr . setSubTotal ( Fucout . getText ( Fucout . formatRibuan (
dNotaRetur . getJumlah ( ) * dNotaRetur . getHargaJual ( )
) ) ) ;
tbvRetur . refresh ( ) ;
} else {
Alert alert = AlertUtil . getAlertError (
"Jumlah Barang Kurang" ,
"Barang di Nota Penjualan yang di-Retur sudah mencapai jumlah yang ada." ) ;
alert . initOwner ( apMain . getScene ( ) . getWindow ( ) ) ;
alert . show ( ) ;
}
ada = true ;
break ;
}
}
}
success = true ;
if ( ! ada ) {
TextField fldPramuniaga = new TextField ( ) ;
DNotaRetur dNotaRetur = new DNotaRetur ( noNota , draggedTabelBarangTunai . getData ( ) ) ;
TabelBarangRetur tbr = new TabelBarangRetur (
draggedTabelBarangTunai . getKode ( ) ,
draggedTabelBarangTunai . getNama ( ) ,
draggedTabelBarangTunai . getUkur ( ) ,
Fucout . getText ( String . valueOf ( dNotaRetur . getJumlah ( ) ) ) ,
draggedTabelBarangTunai . getHarga ( ) ,
draggedTabelBarangTunai . getDisc1 ( ) ,
draggedTabelBarangTunai . getDisc2 ( ) ,
Fucout . getText ( Fucout . formatRibuan (
dNotaRetur . getJumlah ( ) * dNotaRetur . getHargaJual ( )
) ) ,
fldPramuniaga ) ;
tbr . setData ( dNotaRetur ) ;
daftarTabelRetur . add ( tbr ) ;
}
}
/ * let the source know whether the string was successfully
* transferred and used * /
event . setDropCompleted ( success ) ;
event . consume ( ) ;
}
@FXML
void tbvPenjualanOnDragDone ( DragEvent event ) {
/ * the drag and drop gesture ended
* if the data was successfully moved , clear it * /
stpReturDrop . setVisible ( false ) ;
// if (event.getTransferMode() == TransferMode.MOVE) {
// }
event . consume ( ) ;
}
Observer < List < DNotaTunai > > getDNotaTunaiObserver = new Observer < > ( ) {
Observer < List < DNotaTunai > > getDNotaTunaiObserver = new Observer < > ( ) {
@Override
@Override
public void onSubscribe ( Disposable dspsbl ) {
public void onSubscribe ( Disposable dspsbl ) {
@ -178,6 +336,7 @@ public class FormTransaksiReturController implements Initializable {
@Override
@Override
public void onNext ( List < DNotaTunai > daftarDNotaTunai ) {
public void onNext ( List < DNotaTunai > daftarDNotaTunai ) {
fldNotaPenjualan . clear ( ) ;
refreshData ( daftarDNotaTunai ) ;
refreshData ( daftarDNotaTunai ) ;
}
}
@ -228,10 +387,12 @@ public class FormTransaksiReturController implements Initializable {
@Override
@Override
public void onNext ( Barang b ) {
public void onNext ( Barang b ) {
Barang Cache. getInstance ( ) . getDaftarBarang ( ) . put ( b . getKodeBarang ( ) , b ) ;
AmigoPos Cache. getInstance ( ) . getDaftarBarang ( ) . put ( b . getKodeBarang ( ) , b ) ;
for ( TabelBarangTunai tbt : tbvPenjualan . getItems ( ) ) {
for ( TabelBarangTunai tbt : tbvPenjualan . getItems ( ) ) {
if ( tbt . get Kode ( ) . equals ( b . getKodeBarang ( ) ) ) {
if ( tbt . get Data( ) . getKdBarang ( ) . equals ( b . getKodeBarang ( ) ) ) {
tbt . setNama ( b . getNamaBarang ( ) ) ;
tbt . setNama ( b . getNamaBarang ( ) ) ;
tbt . getData ( ) . setBarang ( b ) ;
tbvPenjualan . refresh ( ) ;
tbvPenjualan . refresh ( ) ;
}
}
}
}