|
- /*
- * 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.api.AmigoPosRx;
- import id.amigogroup.posterminal.model.Barang;
- import id.amigogroup.posterminal.model.DNotaTunai;
- import id.amigogroup.posterminal.model.NoBarang;
- import id.amigogroup.posterminal.util.AmigoPosCache;
- import id.amigogroup.posterminal.util.AlertUtil;
- import id.amigogroup.posterminal.util.Fucout;
- import io.reactivex.Observable;
- 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.ButtonBar;
- import javafx.scene.control.ButtonType;
- import javafx.scene.control.ComboBox;
- 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 javafx.scene.text.Text;
- import retrofit2.HttpException;
-
- /**
- * FXML Controller class
- *
- * @author ronal
- */
- public class FormTransaksiTunaiController implements Initializable {
-
- @FXML
- private AnchorPane apMain;
- @FXML
- private TextField fldScan;
- @FXML
- private Label lblNoNota;
- @FXML
- private TableView<TabelBarangTunai> tbvTransaksi;
- @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, ComboBox<String>> tcPromo;
- @FXML
- private TableColumn<TabelBarangTunai, String> tcSubtotal;
- @FXML
- private TableColumn<TabelBarangTunai, TextField> tcPramuniaga;
- @FXML
- private TableColumn<TabelBarangTunai, Button> tcAction;
- @FXML
- private Label txtTanggal;
- @FXML
- private Text lblGrandTotal;
-
- public final ObservableList<TabelBarangTunai> daftarTabelTransaksi = FXCollections.observableArrayList();
- public static final ButtonType btnAction = new ButtonType("BATAL", ButtonBar.ButtonData.YES);
- private String noNota = "";
- private AmigoPosRx posRx = new AmigoPosRx();
- public int total = 0;
-
- /**
- * Initializes the controller class.
- */
- @Override
- public void initialize(URL url, ResourceBundle rb) {
- Platform.runLater(() -> {
- fldScan.requestFocus();
- });
-
- tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangTunai, Integer> cell) -> {
- return new ReadOnlyObjectWrapper(tbvTransaksi.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"));
- tcPromo.setCellValueFactory(new PropertyValueFactory<>("cbxPromo"));
- tcSubtotal.setCellValueFactory(new PropertyValueFactory<>("subTotal"));
- tcPramuniaga.setCellValueFactory(new PropertyValueFactory<>("fldPramuniaga"));
- tcAction.setCellValueFactory(new PropertyValueFactory<>("btnAction"));
- tbvTransaksi.setItems(daftarTabelTransaksi);
-
- lblGrandTotal.setText(Fucout.formatRupiah(0));
- }
-
- public void initData(String noNota, boolean baru) {
- if (!baru) {
- posRx.getDNotaTunaiByNoNota(noNota).subscribe(getDNotaTunaiObserver);
- }
- this.noNota = noNota;
- lblNoNota.setText(Fucout.getTextColon(noNota));
- setTanggal();
- }
-
- public void setTanggal() {
- java.util.Date skrg = new java.util.Date();
- java.text.SimpleDateFormat kal = new java.text.SimpleDateFormat("dd/MM/yyyy");
- txtTanggal.setText(kal.format(skrg));
- }
-
- private void refreshData(List<DNotaTunai> daftarNotaTunai) {
- daftarTabelTransaksi.clear();
- hitungTotal(daftarNotaTunai);
-
- String[] promo = {"Ulang Tahun", "Harbolnas", "Ultah Amigo"};
- for (DNotaTunai dNotaTunai : daftarNotaTunai) {
- //ComboBox
- ComboBox<String> cbxPromo = new ComboBox<>(FXCollections.observableArrayList(promo));
- cbxPromo.getSelectionModel().select("Ulang Tahun");
- //Button
- Button btnAction = new Button("BATAL");
- btnAction.setOnAction((t) -> {
- Alert alert = AlertUtil.getAlertError(
- AlertUtil.DIALOG_KONFIRMASI_MESSAGE,
- "Yakin ingin menghapus barang?");
- alert.initOwner(apMain.getScene().getWindow());
- alert.show();
-
- });
- //TextField
- TextField fldPramuniaga = new TextField(dNotaTunai.getKodePram());
- fldPramuniaga.setOnKeyPressed((t) -> {
- if (t.getCode() == KeyCode.ENTER) {
- fldScan.requestFocus();
- }
-
- });
-
- String namaBarang = "...";
- if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
- namaBarang = Fucout.getText(AmigoPosCache.getInstance().getDaftarBarang()
- .get(dNotaTunai.getKdBarang()).getNamaBarang());
- }
-
- 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,
- btnAction));
-
- if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
- posRx.getBarangByKodeBarang(dNotaTunai.getKdBarang()).subscribe(getBarangObserver);
- }
- }
- }
-
- public void addToTable(Barang barang, NoBarang noBarang) {
- if (barang != null && noBarang != null) {
- fldScan.setText("");
- if (noBarang.getStokOperasional() > 0) {
- boolean ada = false;
- for (TabelBarangTunai tbt : daftarTabelTransaksi) {
- if (tbt.getKode().equals(barang.getKodeBarang()) && tbt.getUkur().equals(noBarang.getNomor())) {
- if (tbt.getData() != null) {
- if (noBarang.getStokOperasional() >= tbt.getData().getJumlah() + 1) {
- tbt.getData().setJumlah(tbt.getData().getJumlah() + 1);
- tbt.setJumlah(String.valueOf(tbt.getData().getJumlah()));
- tbt.setSubTotal(Fucout.formatRibuan(
- tbt.getData().getJumlah() * tbt.getData().getHargaJual()));
-
- total += noBarang.getHargaJual();
- updateLabelGrandTotal();
- tbvTransaksi.refresh();
- } else {
- Platform.runLater(() -> {
- Alert alert = AlertUtil.getAlertWarning(
- "Stok Habis",
- "Tidak bisa menambahkan barang karena stok barang habis");
- alert.initOwner(apMain.getScene().getWindow());
- alert.show();
- });
-
- }
- }
-
- ada = true;
- break;
- }
- }
- if (!ada) {
- String[] promo = {"Ulang Tahun", "Harbolnas", "Ultah Amigo"};
- ComboBox<String> cbxPromo = new ComboBox<>(FXCollections.observableArrayList(promo));
- cbxPromo.getSelectionModel().select("Ulang Tahun");
-
- Button btnAction = new Button("BATAL");
- btnAction.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();
- fldPramuniaga.setOnKeyPressed((t) -> {
- if (t.getCode() == KeyCode.ENTER) {
- fldScan.requestFocus();
- }
- });
-
- DNotaTunai dNotaTunai = new DNotaTunai(
- noNota,
- barang.getKodeBarang(),
- barang.getNamaBarang(),
- 1,
- 0,
- 0,
- noBarang.getHargaJual(),
- noBarang.getHargaPokok(),
- "",
- 0);
-
- TabelBarangTunai tbt = new TabelBarangTunai(
- Fucout.getText(barang.getKodeBarang()),
- Fucout.getText(barang.getNamaBarang()),
- Fucout.getText(noBarang.getNomor()),
- String.valueOf(1),
- Fucout.getText(Fucout.formatRibuan(noBarang.getHargaJual())),
- "...",
- "...",
- cbxPromo,
- Fucout.getText(Fucout.formatRibuan(
- 1 * noBarang.getHargaJual())
- ),
- fldPramuniaga,
- btnAction);
- tbt.setData(dNotaTunai);
-
- total += noBarang.getHargaJual();
- updateLabelGrandTotal();
- daftarTabelTransaksi.add(tbt);
- }
- } else {
- Platform.runLater(() -> {
- Alert alert = AlertUtil.getAlertWarning(
- "Stok Habis",
- "Tidak bisa menambahkan barang karena stok barang habis");
- alert.initOwner(apMain.getScene().getWindow());
- alert.show();
- });
- }
- }
- }
-
- private int hitungTotal(List<DNotaTunai> daftarDNotaTunai) {
- int totalTemp = 0;
-
- for (DNotaTunai dNotaTunai : daftarDNotaTunai) {
- totalTemp += dNotaTunai.getJumlah() * dNotaTunai.getHargaJual();
- }
- total = totalTemp;
- updateLabelGrandTotal();
-
- return 0;
- }
-
- private void updateLabelGrandTotal() {
- lblGrandTotal.setText(Fucout.formatRupiah(total));
- }
-
- //SCAN BARANG
- @FXML
- void fldScanOnKeyPressed(KeyEvent event) {
- if (event.getCode() == KeyCode.ENTER) {
- String kodeFull = fldScan.getText();
- String kodeBarang = Fucout.getKodeBarangFromKodeFull(kodeFull);
- String ukur = Fucout.getNomorBarangFromKodeFull(kodeFull);
-
- if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(kodeBarang)) {
- Barang barang = AmigoPosCache.getInstance().getDaftarBarang().get(kodeBarang);
-
- if (AmigoPosCache.getInstance().getDaftarNoBarang().containsKey(
- barang.getIdGabungan() + ukur)) {
- NoBarang noBarang = AmigoPosCache.getInstance().getDaftarNoBarang()
- .get(barang.getIdGabungan() + ukur);
-
- addToTable(barang, 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);
- }
- }
-
- }
-
- Observer<List<DNotaTunai>> getDNotaTunaiObserver = new Observer<>() {
- @Override
- public void onSubscribe(Disposable dspsbl) {
- }
-
- @Override
- public void onNext(List<DNotaTunai> 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 {
- AmigoPosRx.handleGenericError(error, apMain.getScene().getWindow());
- }
- }
-
- @Override
- public void onComplete() {
- }
-
- };
-
- Observer<Barang> getBarangObserver = new Observer<>() {
- @Override
- public void onSubscribe(Disposable dspsbl) {
- }
-
- @Override
- public void onNext(Barang b) {
- AmigoPosCache.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:
- 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> getTambahBarangObserver = new Observer<>() {
- @Override
- public void onSubscribe(Disposable dspsbl) {
- }
-
- @Override
- public void onNext(Barang b) {
- Barang bClone = new Barang(b);
-
- 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);
- }
- }
- }
-
- @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<BarangFull> getBarangFullGetNoBarangFromBarangObserver = new Observer<>() {
- @Override
- public void onSubscribe(Disposable dspsbl) {
- }
-
- @Override
- public void onNext(BarangFull bf) {
- addToTable(bf.getBarang(), bf.getNoBarang());
- }
-
- @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() {
- }
- };
- }
|