/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package id.amigogroup.posterminal.transaksi; import id.amigogroup.posterminal.FormUtamaController; 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.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.ResourceBundle; import java.util.logging.Level; import java.util.logging.Logger; import javafx.application.Platform; import javafx.beans.property.ReadOnlyObjectWrapper; import javafx.collections.FXCollections; import javafx.collections.ObservableList; import javafx.concurrent.Task; import javafx.fxml.FXML; import javafx.fxml.Initializable; import javafx.scene.control.Alert; import javafx.scene.control.Label; import javafx.scene.control.TableColumn; import javafx.scene.control.TableView; import javafx.scene.control.TextField; import javafx.scene.control.cell.PropertyValueFactory; import javafx.scene.input.KeyCode; import javafx.scene.input.KeyEvent; import javafx.scene.layout.AnchorPane; import retrofit2.HttpException; /** * FXML Controller class * * @author ronal */ public class FormTransaksiReturController implements Initializable { @FXML private AnchorPane apMain; @FXML private TextField fldNotaPenjualan; @FXML private TableView tbvPenjualan; @FXML private TableColumn tcNo; @FXML private TableColumn tcKode; @FXML private TableColumn tcNama; @FXML private TableColumn tcUkur; @FXML private TableColumn tcJumlah; @FXML private TableColumn tcHarga; @FXML private TableColumn tcDisc1; @FXML private TableColumn tcDisc2; @FXML private TableColumn tcSubTotal; @FXML private TableColumn tcPramuniaga; // @FXML // private TableView tbvRetur; // @FXML // private TableColumn tcNoRetur; // @FXML // private TableColumn tcKodeRetur; // @FXML // private TableColumn tcNamaRetur; // @FXML // private TableColumn tcUkurRetur; // @FXML // private TableColumn tcJumlahRetur; // @FXML // private TableColumn tcHargaRetur; // @FXML // private TableColumn tcDisc1Retur; // @FXML // private TableColumn tcDisc2Retur; // @FXML // private TableColumn tcSubtotalRetur; // @FXML // private TableColumn tcPramuniagaRetur; private final AmigoPosRx posRx = new AmigoPosRx(); private final ObservableList daftarTabelPenjualan = FXCollections.observableArrayList(); private List daftarDetailTransaksi = new ArrayList<>(); /** * Initializes the controller class. */ @Override public void initialize(URL url, ResourceBundle rb) { tcNo.setCellValueFactory((TableColumn.CellDataFeatures cell) -> { return new ReadOnlyObjectWrapper(tbvPenjualan.getItems().indexOf(cell.getValue()) + 1); }); tcKode.setCellValueFactory(new PropertyValueFactory<>("kode")); tcNama.setCellValueFactory(new PropertyValueFactory<>("nama")); tcUkur.setCellValueFactory(new PropertyValueFactory<>("ukur")); tcJumlah.setCellValueFactory(new PropertyValueFactory<>("jumlah")); tcHarga.setCellValueFactory(new PropertyValueFactory<>("harga")); tcDisc1.setCellValueFactory(new PropertyValueFactory<>("disc1")); tcDisc2.setCellValueFactory(new PropertyValueFactory<>("disc2")); tcSubTotal.setCellValueFactory(new PropertyValueFactory<>("subTotal")); tcPramuniaga.setCellValueFactory(new PropertyValueFactory<>("fldPramuniaga")); tbvPenjualan.setItems(daftarTabelPenjualan); Platform.runLater(() -> { fldNotaPenjualan.requestFocus(); }); } private void mapCurrentDataToDetailTransaksi() { } int count = 0; @FXML Label lbl; private void refreshData(List daftarNotaTunai) { daftarTabelPenjualan.clear(); for (DNotaTunai dNotaTunai : daftarNotaTunai) { TextField fldPramuniaga = new TextField(dNotaTunai.getKodePram()); String namaBarang = "..."; if (BarangCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { namaBarang = Fucout.getText(BarangCache.getInstance().getDaftarBarang() .get(dNotaTunai.getKdBarang()).getNamaBarang()); } daftarTabelPenjualan.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())), null, Fucout.getText(Fucout.formatRibuan( dNotaTunai.getHargaJual() * dNotaTunai.getJumlah() )), fldPramuniaga)); if (!BarangCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { posRx.getBarangByKodeBarang(dNotaTunai.getKdBarang()).subscribe(getBarangObserver); } } } @FXML void fldNotaPenjualanOnKeyPressed(KeyEvent event) { if (event.getCode() == KeyCode.ENTER) { posRx.getDNotaTunaiByNoNota(fldNotaPenjualan.getText()).subscribe(getDNotaTunaiObserver); } } Observer> getDNotaTunaiObserver = new Observer<>() { @Override public void onSubscribe(Disposable dspsbl) { } @Override public void onNext(List daftarDNotaTunai) { refreshData(daftarDNotaTunai); } @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, "Data nota tidak ditemukan."); alert.initOwner(apMain.getScene().getWindow()); alert.show(); }); } } else if (error instanceof SocketTimeoutException) { Platform.runLater(() -> { Alert alert = AlertUtil.getAlertError( AlertUtil.ERROR_KONEKSI_TIMEOUT_TITLE, AlertUtil.ERROR_KONEKSI_TIMEOUT_MESSAGE); alert.initOwner(apMain.getScene().getWindow()); alert.show(); }); } else { Platform.runLater(() -> { 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 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 : tbvPenjualan.getItems()) { if (tbt.getKode().equals(b.getKodeBarang())) { tbt.setNama(b.getNamaBarang()); tbvPenjualan.refresh(); } } } @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(apMain.getScene().getWindow()); alert.show(); }); } } else if (error instanceof SocketTimeoutException) { Platform.runLater(() -> { Alert alert = AlertUtil.getAlertError( AlertUtil.ERROR_KONEKSI_TIMEOUT_TITLE, AlertUtil.ERROR_KONEKSI_TIMEOUT_MESSAGE); alert.initOwner(apMain.getScene().getWindow()); alert.show(); }); } else { Platform.runLater(() -> { 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() { } }; }