|
- /*
- * 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 com.fasterxml.jackson.databind.JsonNode;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.node.ObjectNode;
- import id.amigogroup.posterminal.SystemValue;
- import id.amigogroup.posterminal.api.AmigoPosRx;
- import id.amigogroup.posterminal.model.Barang;
- import id.amigogroup.posterminal.model.DNotaRetur;
- import id.amigogroup.posterminal.model.DNotaTunai;
- import id.amigogroup.posterminal.util.AmigoPosCache;
- import id.amigogroup.posterminal.util.AlertUtil;
- import id.amigogroup.posterminal.util.ButtonUtility;
- import id.amigogroup.posterminal.util.Fucout;
- import io.reactivex.Observer;
- import io.reactivex.disposables.Disposable;
- import java.net.HttpURLConnection;
- import java.net.URL;
- import java.util.List;
- import java.util.ResourceBundle;
- import javafx.application.Platform;
- import javafx.beans.property.ReadOnlyObjectWrapper;
- import javafx.collections.FXCollections;
- import javafx.collections.ObservableList;
- import javafx.fxml.FXML;
- import javafx.fxml.Initializable;
- import javafx.scene.control.Alert;
- import javafx.scene.control.Button;
- 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.ClipboardContent;
- import javafx.scene.input.DragEvent;
- import javafx.scene.input.Dragboard;
- import javafx.scene.input.KeyCode;
- import javafx.scene.input.KeyEvent;
- import javafx.scene.input.MouseEvent;
- import javafx.scene.input.TransferMode;
- import javafx.scene.layout.AnchorPane;
- import javafx.scene.layout.StackPane;
- import retrofit2.HttpException;
-
- /**
- * FXML Controller class
- *
- * @author ronal
- */
- public class FormTransaksiReturController implements Initializable {
-
- @FXML
- private AnchorPane apMain;
- @FXML
- private TextField fldNotaPenjualan;
- @FXML
- private TableView<TabelBarangTunai> tbvPenjualan;
- @FXML
- private TableColumn<TabelBarangTunai, Integer> tcNo;
- @FXML
- private TableColumn<TabelBarangTunai, String> tcKode;
- @FXML
- private TableColumn<TabelBarangTunai, String> tcNama;
- @FXML
- private TableColumn<TabelBarangTunai, String> tcUkur;
- @FXML
- private TableColumn<TabelBarangTunai, String> tcJumlah;
- @FXML
- private TableColumn<TabelBarangTunai, String> tcHarga;
- @FXML
- private TableColumn<TabelBarangTunai, String> tcDisc1;
- @FXML
- private TableColumn<TabelBarangTunai, String> tcDisc2;
- @FXML
- private TableColumn<TabelBarangTunai, String> tcSubTotal;
- @FXML
- private TableColumn<TabelBarangTunai, TextField> tcPramuniaga;
- @FXML
- private Label lblNomorNota;
- @FXML
- private Label lblKasir;
- @FXML
- private TableView<TabelBarangRetur> tbvRetur;
- @FXML
- private TableColumn<TabelBarangRetur, Integer> tcNoRetur;
- @FXML
- private TableColumn<TabelBarangRetur, String> tcKodeRetur;
- @FXML
- private TableColumn<TabelBarangRetur, String> tcNamaRetur;
- @FXML
- private TableColumn<TabelBarangRetur, String> tcUkurRetur;
- @FXML
- private TableColumn<TabelBarangRetur, String> tcJumlahRetur;
- @FXML
- private TableColumn<TabelBarangRetur, String> tcHargaRetur;
- @FXML
- private TableColumn<TabelBarangRetur, String> tcDisc1Retur;
- @FXML
- private TableColumn<TabelBarangRetur, String> tcDisc2Retur;
- @FXML
- private TableColumn<TabelBarangRetur, String> tcSubTotalRetur;
- @FXML
- private TableColumn<TabelBarangRetur, TextField> tcPramuniagaRetur;
- @FXML
- private TableColumn<TabelBarangRetur, Button> tcBtnBatal;
- @FXML
- private StackPane stpReturDrop;
- @FXML
- private Label lblTambahKeTabelRetur;
-
- private final AmigoPosRx posRx = new AmigoPosRx();
- private String noNota = "";
- private final ObservableList<TabelBarangTunai> daftarTabelPenjualan = FXCollections.observableArrayList();
- public final ObservableList<TabelBarangRetur> daftarTabelRetur = FXCollections.observableArrayList();
- private TabelBarangTunai draggedTabelBarangTunai = null;
-
- /**
- * Initializes the controller class.
- */
- @Override
- public void initialize(URL url, ResourceBundle rb) {
- tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangTunai, Integer> 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"));
- // tcBtnBatal.setCellValueFactory(new PropertyValueFactory<>("btnBatal"));
- 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(() -> {
- fldNotaPenjualan.requestFocus();
- });
- }
-
- public void initData(String noNota, boolean baru) {
- this.noNota = noNota;
- if (!baru) {
- posRx.getDNotaReturByNoNota(noNota).subscribe(getDaftarDNotaReturObserver);
- }
- if (SystemValue.karyawanLogin != null) {
- lblKasir.setText(Fucout.getTextColon(SystemValue.karyawanLogin.getNama()));
- }
-
- lblNomorNota.setText(Fucout.getTextColon(noNota));
- }
-
- private void refreshDataPenjualan(List<DNotaTunai> daftarNotaTunai) {
- daftarTabelPenjualan.clear();
-
- for (DNotaTunai dNotaTunai : daftarNotaTunai) {
- //Button
- Button btnBatal = ButtonUtility.generateButton(ButtonUtility.CLOSE_ICON);
- btnBatal.setOnAction((t) -> {
- Alert alert = AlertUtil.getAlertDialogKonfirmasi(
- AlertUtil.DIALOG_KONFIRMASI_MESSAGE,
- "Yakin ingin menghapus barang?");
- alert.initOwner(apMain.getScene().getWindow());
- alert.show();
-
- });
- TextField fldPramuniaga = new TextField(dNotaTunai.getKodePram());
-
- String namaBarang = "...";
- if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
- Barang barang = AmigoPosCache.getInstance().getDaftarBarang()
- .get(dNotaTunai.getKdBarang());
- namaBarang = Fucout.getText(barang.getNamaBarang());
- dNotaTunai.setBarang(barang);
- }
-
- TabelBarangTunai tbt = 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,
- btnBatal);
-
- tbt.setData(dNotaTunai);
- daftarTabelPenjualan.add(tbt);
-
- if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
- posRx.getBarangByKodeBarang(dNotaTunai.getKdBarang()).subscribe(getBarangPenjualanObserver);
- }
- }
- }
-
- private void refreshDataRetur(List<DNotaRetur> daftarDNotaRetur) {
- daftarTabelRetur.clear();
-
- for(DNotaRetur dNotaRetur : daftarDNotaRetur){
- //Button
- TextField fldPramuniaga = new TextField(dNotaRetur.getKodePram());
-
- String namaBarang = "...";
- if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaRetur.getKdBarang())) {
- Barang barang = AmigoPosCache.getInstance().getDaftarBarang()
- .get(dNotaRetur.getKdBarang());
- namaBarang = Fucout.getText(barang.getNamaBarang());
- dNotaRetur.setBarang(barang);
- }
-
- TabelBarangRetur tbr = new TabelBarangRetur(
- Fucout.getText(dNotaRetur.getKdBarang()),
- namaBarang,
- Fucout.getText(dNotaRetur.getNoBarang()),
- Fucout.getText(String.valueOf(dNotaRetur.getJumlah())),
- Fucout.getText(Fucout.formatRibuan(dNotaRetur.getHargaJual())),
- Fucout.getText(Fucout.formatPersentase(dNotaRetur.getDiskon())),
- Fucout.getText(Fucout.formatPersentase(dNotaRetur.getDiskon2())),
- Fucout.getText(Fucout.formatRibuan(
- dNotaRetur.getHargaJual() * dNotaRetur.getJumlah()
- )),
- fldPramuniaga);
-
- tbr.setData(dNotaRetur);
- daftarTabelRetur.add(tbr);
-
- if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaRetur.getKdBarang())) {
- posRx.getBarangByKodeBarang(dNotaRetur.getKdBarang()).subscribe(getBarangReturObserver);
- }
- }
- }
-
- @FXML
- void fldNotaPenjualanOnKeyPressed(KeyEvent event) {
- if (event.getCode() == KeyCode.ENTER) {
- Disposable disposable = posRx.validasiMNotaTunaiByNoNotaTanggal(fldNotaPenjualan.getText())
- .subscribe((response) -> {
- ObjectMapper mapper = new ObjectMapper();
- JsonNode jsonNode = mapper.readTree(response.string());
- ObjectNode node = jsonNode.deepCopy();
-
- if (node.get("result") != null && node.get("result").asBoolean()) {
- posRx.getDNotaTunaiByNoNota(fldNotaPenjualan.getText()).subscribe(getDNotaTunaiObserver);
- } else {
- Alert alert = AlertUtil.getAlertError(
- "Nota Tidak Bisa Digunakan",
- node.get("message").asText());
- alert.initOwner(apMain.getScene().getWindow());
- alert.show();
- }
- }, (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 {
- AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
- }
- });
- }
- }
-
- @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<>() {
- @Override
- public void onSubscribe(Disposable dspsbl) {
- }
-
- @Override
- public void onNext(List<DNotaTunai> daftarDNotaTunai) {
- fldNotaPenjualan.clear();
- refreshDataPenjualan(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 {
- AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
- }
- }
-
- @Override
- public void onComplete() {
- }
-
- };
-
- Observer<Barang> getBarangPenjualanObserver = new Observer<>() {
- @Override
- public void onSubscribe(Disposable dspsbl) {
- }
-
- @Override
- public void onNext(Barang b) {
- AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b);
- for (TabelBarangTunai tbt : tbvPenjualan.getItems()) {
- if (tbt.getData().getKdBarang().equals(b.getKodeBarang())) {
- tbt.setNama(b.getNamaBarang());
-
- tbt.getData().setBarang(b);
- 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 {
- AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
- }
- }
-
- @Override
- public void onComplete() {
- }
-
- };
-
- Observer<List<DNotaRetur>> getDaftarDNotaReturObserver = new Observer<>() {
- @Override
- public void onSubscribe(Disposable dspsbl) {
- }
-
- @Override
- public void onNext(List<DNotaRetur> daftarDNotaRetur) {
- refreshDataRetur(daftarDNotaRetur);
- }
-
- @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 {
- AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
- }
- }
-
- @Override
- public void onComplete() {
- }
- };
-
- Observer<Barang> getBarangReturObserver = new Observer<>() {
- @Override
- public void onSubscribe(Disposable dspsbl) {
- }
-
- @Override
- public void onNext(Barang b) {
- AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b);
- for (TabelBarangRetur tbr : tbvRetur.getItems()) {
- if (tbr.getData().getKdBarang().equals(b.getKodeBarang())) {
- tbr.setNama(b.getNamaBarang());
-
- tbr.getData().setBarang(b);
- tbvRetur.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 {
- AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
- }
- }
-
- @Override
- public void onComplete() {
- }
-
- };
- }
|