* [Logic + UI] Drag and Drop Retur, untuk memilih barang yang mau diretur dari nota penjualan * [Logic] Load data melengkapi data no barang (harga jual, stok)pull/5/head
| @@ -1,11 +1,7 @@ | |||
| package id.amigogroup.posterminal; | |||
| import com.fasterxml.jackson.core.JsonProcessingException; | |||
| import com.fasterxml.jackson.databind.ObjectMapper; | |||
| import id.amigogroup.posterminal.api.AmigoPosRx; | |||
| import id.amigogroup.posterminal.model.Barang; | |||
| import id.amigogroup.posterminal.model.MNotaRetur; | |||
| import id.amigogroup.posterminal.model.MNotaTunai; | |||
| import id.amigogroup.posterminal.model.Pelanggan; | |||
| import id.amigogroup.posterminal.pencarian.DialogCariBarangController; | |||
| import id.amigogroup.posterminal.pencarian.DialogCariNotaTundaController; | |||
| @@ -17,7 +13,6 @@ import id.amigogroup.posterminal.transaksi.FormTransaksiReturController; | |||
| import id.amigogroup.posterminal.transaksi.FormTransaksiTunaiController; | |||
| 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.io.IOException; | |||
| @@ -171,17 +166,13 @@ public class FormUtamaController implements Initializable { | |||
| loader.setLocation(getClass().getResource("/fxml/FormTransaksiTunai.fxml")); | |||
| node = loader.load(); | |||
| FormTransaksiTunaiController fttc = loader.getController(); | |||
| if (!baru) { | |||
| fttc.initData(noNota); | |||
| } | |||
| fttc.initData(noNota,baru); | |||
| break; | |||
| case FormConstanta.TRANSAKSI_RETUR: | |||
| loader.setLocation(getClass().getResource("/fxml/FormTransaksiRetur.fxml")); | |||
| node = loader.load(); | |||
| FormTransaksiReturController ftrc = loader.getController(); | |||
| if (!baru) { | |||
| // ftrc.initData(noNota); | |||
| } | |||
| ftrc.initData(noNota,baru); | |||
| break; | |||
| } | |||
| @@ -240,7 +231,6 @@ public class FormUtamaController implements Initializable { | |||
| dialogCariBarang.initOwner(bpMain.getScene().getWindow()); | |||
| Optional<Barang> result = dialogCariBarang.showAndWait(); | |||
| System.out.println(result); | |||
| }; | |||
| listShortcuts.put(kcCariBarang, rnCariBarang); | |||
| @@ -256,7 +246,6 @@ public class FormUtamaController implements Initializable { | |||
| updateLabelPelanggan(result.get()); | |||
| updateLabelMemberNonMember(); | |||
| } | |||
| System.out.println(result); | |||
| }; | |||
| listShortcuts.put(kcCariPelanggan, rnCariPelanggan); | |||
| @@ -11,6 +11,7 @@ import id.amigogroup.posterminal.model.Karyawan; | |||
| import id.amigogroup.posterminal.model.Pagination; | |||
| import id.amigogroup.posterminal.model.MNotaRetur; | |||
| import id.amigogroup.posterminal.model.MNotaTunai; | |||
| import id.amigogroup.posterminal.model.NoBarang; | |||
| import id.amigogroup.posterminal.model.Pelanggan; | |||
| import id.amigogroup.posterminal.model.Tas; | |||
| import io.reactivex.Observable; | |||
| @@ -31,6 +32,10 @@ public class AmigoPosRx { | |||
| public Observable<Pagination<Barang>> getBarangByNamaBarang(String namaBarang){ | |||
| return UtilsApi.getServiceApiBarang().getBarangByNamaBarang(namaBarang); | |||
| } | |||
| public Observable<NoBarang> getNoBarangByIdGabunganNomor(String idGabungan, String nomor) { | |||
| return UtilsApi.getServiceApiBarang().getByIdGabunganNomor(idGabungan, nomor); | |||
| } | |||
| public Observable<MNotaTunai> getMNotaTunaiByNoNota(String noNota) { | |||
| return UtilsApi.getServiceApiBarang().getMNotaTunaiByNoNota(noNota); | |||
| @@ -9,6 +9,7 @@ import id.amigogroup.posterminal.model.Barang; | |||
| import id.amigogroup.posterminal.model.DNotaTunai; | |||
| import id.amigogroup.posterminal.model.MNotaRetur; | |||
| import id.amigogroup.posterminal.model.MNotaTunai; | |||
| import id.amigogroup.posterminal.model.NoBarang; | |||
| import id.amigogroup.posterminal.model.Pagination; | |||
| import io.reactivex.Observable; | |||
| import java.util.List; | |||
| @@ -25,6 +26,13 @@ public interface ServiceApiBarang { | |||
| @GET("barangs/kode/{kode}") | |||
| Observable<Barang> getBarangByKodeBarang(@Path("kode") String kode); | |||
| //NO-BARANG | |||
| //Mengambil No Barang by Id Gabungan & Ukuran | |||
| @GET("no-barangs/id-gabungan/{idGabungan}/nomor/{nomor}") | |||
| Observable<NoBarang> getByIdGabunganNomor( | |||
| @Path("idGabungan") String idGabungan, | |||
| @Path("nomor") String nomor); | |||
| //M-NOTA-TUNAI | |||
| //Mengambil Master Nota Tunai by No Nota | |||
| @GET("m-nota-tunai/no-nota/{noNota}") | |||
| @@ -121,10 +121,11 @@ public class FormBayarController implements Initializable, BayarInterface { | |||
| loader.setLocation(getClass().getResource("/fxml/FormBayarTunai.fxml")); | |||
| node = loader.load(); | |||
| FormBayarTunaiController fbtc = loader.getController(); | |||
| fbtc.initData(this); | |||
| vbContent.getChildren().add(node); | |||
| bayarContent.setNodeTunai(node); | |||
| FormBayarTunaiController fbtc = loader.getController(); | |||
| fbtc.initData(this); | |||
| } else { | |||
| if (bayarContent.getNodeTunai() != null) { | |||
| vbContent.getChildren().remove(bayarContent.getNodeTunai()); | |||
| @@ -139,10 +140,11 @@ public class FormBayarController implements Initializable, BayarInterface { | |||
| loader.setLocation(getClass().getResource("/fxml/FormBayarKartu.fxml")); | |||
| node = loader.load(); | |||
| FormBayarKartuController fbkc = loader.getController(); | |||
| fbkc.initData(this); | |||
| vbContent.getChildren().add(node); | |||
| bayarContent.setNodeKartu(node); | |||
| FormBayarKartuController fbkc = loader.getController(); | |||
| fbkc.initData(this); | |||
| } else { | |||
| if (bayarContent.getNodeKartu() != null) { | |||
| vbContent.getChildren().remove(bayarContent.getNodeKartu()); | |||
| @@ -156,11 +158,12 @@ public class FormBayarController implements Initializable, BayarInterface { | |||
| if (bayarContent.getNodeRetur() == null && chkSource.selectedProperty().get()) { | |||
| loader.setLocation(getClass().getResource("/fxml/FormBayarRetur.fxml")); | |||
| node = loader.load(); | |||
| vbContent.getChildren().add(node); | |||
| bayarContent.setNodeRetur(node); | |||
| FormBayarReturController fbrc = loader.getController(); | |||
| fbrc.initData(this); | |||
| vbContent.getChildren().add(node); | |||
| bayarContent.setNodeRetur(node); | |||
| } else { | |||
| if (bayarContent.getNodeRetur() != null) { | |||
| vbContent.getChildren().remove(bayarContent.getNodeRetur()); | |||
| @@ -194,11 +197,12 @@ public class FormBayarController implements Initializable, BayarInterface { | |||
| if (bayarContent.getNodePoin() == null && chkSource.selectedProperty().get()) { | |||
| loader.setLocation(getClass().getResource("/fxml/FormBayarPoin.fxml")); | |||
| node = loader.load(); | |||
| vbContent.getChildren().add(node); | |||
| bayarContent.setNodePoin(node); | |||
| FormBayarPoinController fbpc = loader.getController(); | |||
| fbpc.initData(this); | |||
| vbContent.getChildren().add(node); | |||
| bayarContent.setNodePoin(node); | |||
| } else { | |||
| if (bayarContent.getNodePoin() != null) { | |||
| vbContent.getChildren().remove(bayarContent.getNodePoin()); | |||
| @@ -60,7 +60,7 @@ public class FormBayarTunaiController implements Initializable { | |||
| < parent.getBayarContent().getTotalBayar()) { | |||
| int kembali = parent.getBayarContent().getTotalBayar() | |||
| - parent.getBayarContent().getTotalPerluBayar(); | |||
| lblKembalian.setText(Fucout.formatRibuan(kembali)); | |||
| lblKembalian.setText(Fucout.getText(Fucout.formatRibuan(kembali))); | |||
| } else { | |||
| lblKembalian.setText("-"); | |||
| } | |||
| @@ -1,4 +1,3 @@ | |||
| package id.amigogroup.posterminal.model; | |||
| import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | |||
| @@ -51,10 +50,28 @@ public class Barang { | |||
| private String kedProduk; | |||
| @JsonProperty("kode_merk") | |||
| private String kodeMerk; | |||
| private String nomor; | |||
| private String noBarang; | |||
| public Barang() { | |||
| } | |||
| public Barang(Barang b) { | |||
| this.kodeBarang = b.kodeBarang; | |||
| this.kodeLama = b.kodeLama; | |||
| this.namaBarang = b.namaBarang; | |||
| this.kodeToko = b.kodeToko; | |||
| this.kelompok = b.kelompok; | |||
| this.tahun = b.tahun; | |||
| this.bulan = b.bulan; | |||
| this.idGabungan = b.idGabungan; | |||
| this.kodeStrip = b.kodeStrip; | |||
| this.kodeSupplier = b.kodeSupplier; | |||
| this.kedProduk = b.kedProduk; | |||
| this.kodeMerk = b.kodeMerk; | |||
| } | |||
| @JsonProperty("kode_barang") | |||
| public String getKodeBarang() { | |||
| return kodeBarang; | |||
| @@ -175,6 +192,20 @@ public class Barang { | |||
| this.kodeMerk = kodeMerk; | |||
| } | |||
| /** | |||
| * @return the nomor | |||
| */ | |||
| public String getNomor() { | |||
| return nomor; | |||
| } | |||
| /** | |||
| * @param nomor the nomor to set | |||
| */ | |||
| public void setNomor(String nomor) { | |||
| this.nomor = nomor; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return new ToStringBuilder(this).append("kodeBarang", kodeBarang).append("kodeLama", kodeLama).append("namaBarang", namaBarang).append("kodeToko", kodeToko).append("kelompok", kelompok).append("tahun", tahun).append("bulan", bulan).append("idGabungan", idGabungan).append("kodeStrip", kodeStrip).append("kodeSupplier", kodeSupplier).append("kedProduk", kedProduk).append("kodeMerk", kodeMerk).toString(); | |||
| @@ -196,5 +227,4 @@ public class Barang { | |||
| Barang rhs = ((Barang) other); | |||
| return new EqualsBuilder().append(tahun, rhs.tahun).append(kodeLama, rhs.kodeLama).append(idGabungan, rhs.idGabungan).append(kodeToko, rhs.kodeToko).append(kedProduk, rhs.kedProduk).append(namaBarang, rhs.namaBarang).append(kelompok, rhs.kelompok).append(kodeBarang, rhs.kodeBarang).append(bulan, rhs.bulan).append(kodeStrip, rhs.kodeStrip).append(kodeSupplier, rhs.kodeSupplier).append(kodeMerk, rhs.kodeMerk).isEquals(); | |||
| } | |||
| } | |||
| @@ -50,6 +50,26 @@ public class DNotaRetur { | |||
| @JsonProperty("bonus") | |||
| private double bonus; | |||
| private Barang barang; | |||
| public DNotaRetur(){ | |||
| } | |||
| public DNotaRetur(String noNota, DNotaTunai dNotaTunai) { | |||
| this.noNota = noNota; | |||
| this.kdBarang = dNotaTunai.getKdBarang(); | |||
| this.noBarang = dNotaTunai.getNoBarang(); | |||
| this.jumlah = 1; | |||
| this.diskon = dNotaTunai.getDiskon(); | |||
| this.diskon2 = dNotaTunai.getDiskon2(); | |||
| this.hargaJual = dNotaTunai.getHargaJual(); | |||
| this.hargaPokok = dNotaTunai.getHargaPokok(); | |||
| this.noNotaTunai = dNotaTunai.getNoNota(); | |||
| this.bonus = dNotaTunai.getBonus(); | |||
| this.barang = dNotaTunai.getBarang(); | |||
| } | |||
| @JsonProperty("id") | |||
| public int getId() { | |||
| return id; | |||
| @@ -170,6 +190,20 @@ public class DNotaRetur { | |||
| this.bonus = bonus; | |||
| } | |||
| /** | |||
| * @return the barang | |||
| */ | |||
| public Barang getBarang() { | |||
| return barang; | |||
| } | |||
| /** | |||
| * @param barang the barang to set | |||
| */ | |||
| public void setBarang(Barang barang) { | |||
| this.barang = barang; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return new ToStringBuilder(this).append("id", id).append("noNota", noNota).append("kdBarang", kdBarang).append("noBarang", noBarang).append("jumlah", jumlah).append("diskon", diskon).append("diskon2", diskon2).append("hargaJual", hargaJual).append("hargaPokok", hargaPokok).append("kodePram", kodePram).append("noNotaTunai", noNotaTunai).append("bonus", bonus).toString(); | |||
| @@ -1,4 +1,3 @@ | |||
| package id.amigogroup.posterminal.model; | |||
| import com.fasterxml.jackson.annotation.JsonInclude; | |||
| @@ -47,6 +46,23 @@ public class DNotaTunai { | |||
| @JsonProperty("bonus") | |||
| private int bonus; | |||
| private Barang barang; | |||
| public DNotaTunai(String noNota, String kdBarang, String noBarang, | |||
| int jumlah, int diskon, int diskon2, int hargaJual, String hargaPokok, | |||
| String kodePram, int bonus) { | |||
| this.noNota = noNota; | |||
| this.kdBarang = kdBarang; | |||
| this.noBarang = noBarang; | |||
| this.jumlah = jumlah; | |||
| this.diskon = diskon; | |||
| this.diskon2 = diskon2; | |||
| this.hargaJual = hargaJual; | |||
| this.hargaPokok = hargaPokok; | |||
| this.kodePram = kodePram; | |||
| this.bonus = bonus; | |||
| } | |||
| @JsonProperty("id") | |||
| public int getId() { | |||
| return id; | |||
| @@ -157,6 +173,20 @@ public class DNotaTunai { | |||
| this.bonus = bonus; | |||
| } | |||
| /** | |||
| * @return the barang | |||
| */ | |||
| public Barang getBarang() { | |||
| return barang; | |||
| } | |||
| /** | |||
| * @param barang the barang to set | |||
| */ | |||
| public void setBarang(Barang barang) { | |||
| this.barang = barang; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return new ToStringBuilder(this).append("id", id).append("noNota", noNota).append("kdBarang", kdBarang).append("noBarang", noBarang).append("jumlah", jumlah).append("diskon", diskon).append("diskon2", diskon2).append("hargaJual", hargaJual).append("hargaPokok", hargaPokok).append("kodePram", kodePram).append("bonus", bonus).toString(); | |||
| @@ -6,55 +6,48 @@ | |||
| package id.amigogroup.posterminal.transaksi; | |||
| import id.amigogroup.posterminal.model.Barang; | |||
| import id.amigogroup.posterminal.model.NoBarang; | |||
| /** | |||
| * | |||
| * @author ronal | |||
| */ | |||
| public class DetailTransaksi<T,U> { | |||
| private T masterNota; | |||
| private U detailNota; | |||
| public class BarangFull { | |||
| private Barang barang; | |||
| private NoBarang noBarang; | |||
| /** | |||
| * @return the masterNota | |||
| */ | |||
| public T getMasterNota() { | |||
| return masterNota; | |||
| } | |||
| /** | |||
| * @param masterNota the masterNota to set | |||
| */ | |||
| public void setMasterNota(T masterNota) { | |||
| this.masterNota = masterNota; | |||
| public BarangFull(Barang barang, NoBarang noBarang) { | |||
| this.barang = barang; | |||
| this.noBarang = noBarang; | |||
| } | |||
| /** | |||
| * @return the detailNota | |||
| * @return the barang | |||
| */ | |||
| public U getDetailNota() { | |||
| return detailNota; | |||
| public Barang getBarang() { | |||
| return barang; | |||
| } | |||
| /** | |||
| * @param detailNota the detailNota to set | |||
| * @param barang the barang to set | |||
| */ | |||
| public void setDetailNota(U detailNota) { | |||
| this.detailNota = detailNota; | |||
| public void setBarang(Barang barang) { | |||
| this.barang = barang; | |||
| } | |||
| /** | |||
| * @return the barang | |||
| * @return the noBarang | |||
| */ | |||
| public Barang getBarang() { | |||
| return barang; | |||
| public NoBarang getNoBarang() { | |||
| return noBarang; | |||
| } | |||
| /** | |||
| * @param barang the barang to set | |||
| * @param noBarang the noBarang to set | |||
| */ | |||
| public void setBarang(Barang barang) { | |||
| this.barang = barang; | |||
| public void setNoBarang(NoBarang noBarang) { | |||
| this.noBarang = noBarang; | |||
| } | |||
| } | |||
| @@ -8,8 +8,9 @@ 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.DNotaRetur; | |||
| import id.amigogroup.posterminal.model.DNotaTunai; | |||
| import id.amigogroup.posterminal.pencarian.BarangCache; | |||
| import id.amigogroup.posterminal.util.AmigoPosCache; | |||
| import id.amigogroup.posterminal.util.AlertUtil; | |||
| import id.amigogroup.posterminal.util.Fucout; | |||
| import io.reactivex.Observer; | |||
| @@ -17,7 +18,6 @@ import io.reactivex.disposables.Disposable; | |||
| import java.net.HttpURLConnection; | |||
| import java.net.SocketTimeoutException; | |||
| import java.net.URL; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| import java.util.ResourceBundle; | |||
| import java.util.logging.Level; | |||
| @@ -34,9 +34,15 @@ 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; | |||
| /** | |||
| @@ -72,33 +78,40 @@ public class FormTransaksiReturController implements Initializable { | |||
| private TableColumn<TabelBarangTunai, String> tcSubTotal; | |||
| @FXML | |||
| private TableColumn<TabelBarangTunai, TextField> tcPramuniaga; | |||
| @FXML | |||
| private Label lblNomorNota; | |||
| @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 StackPane stpReturDrop; | |||
| @FXML | |||
| private Label lblTambahKeTabelRetur; | |||
| // @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 String noNota = ""; | |||
| 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. | |||
| @@ -118,33 +131,47 @@ public class FormTransaksiReturController implements Initializable { | |||
| tcSubTotal.setCellValueFactory(new PropertyValueFactory<>("subTotal")); | |||
| tcPramuniaga.setCellValueFactory(new PropertyValueFactory<>("fldPramuniaga")); | |||
| 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(); | |||
| }); | |||
| } | |||
| 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) { | |||
| daftarTabelPenjualan.clear(); | |||
| daftarTabelRetur.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()); | |||
| if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { | |||
| Barang barang = AmigoPosCache.getInstance().getDaftarBarang() | |||
| .get(dNotaTunai.getKdBarang()); | |||
| namaBarang = Fucout.getText(barang.getNamaBarang()); | |||
| dNotaTunai.setBarang(barang); | |||
| } | |||
| daftarTabelPenjualan.add(new TabelBarangTunai( | |||
| TabelBarangTunai tbt = new TabelBarangTunai( | |||
| Fucout.getText(dNotaTunai.getKdBarang()), | |||
| namaBarang, | |||
| Fucout.getText(dNotaTunai.getNoBarang()), | |||
| @@ -156,9 +183,11 @@ public class FormTransaksiReturController implements Initializable { | |||
| Fucout.getText(Fucout.formatRibuan( | |||
| dNotaTunai.getHargaJual() * dNotaTunai.getJumlah() | |||
| )), | |||
| fldPramuniaga)); | |||
| fldPramuniaga); | |||
| tbt.setData(dNotaTunai); | |||
| daftarTabelPenjualan.add(tbt); | |||
| if (!BarangCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { | |||
| if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { | |||
| 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<>() { | |||
| @Override | |||
| public void onSubscribe(Disposable dspsbl) { | |||
| @@ -178,6 +336,7 @@ public class FormTransaksiReturController implements Initializable { | |||
| @Override | |||
| public void onNext(List<DNotaTunai> daftarDNotaTunai) { | |||
| fldNotaPenjualan.clear(); | |||
| refreshData(daftarDNotaTunai); | |||
| } | |||
| @@ -228,10 +387,12 @@ public class FormTransaksiReturController implements Initializable { | |||
| @Override | |||
| public void onNext(Barang b) { | |||
| BarangCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b); | |||
| AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b); | |||
| for (TabelBarangTunai tbt : tbvPenjualan.getItems()) { | |||
| if (tbt.getKode().equals(b.getKodeBarang())) { | |||
| if (tbt.getData().getKdBarang().equals(b.getKodeBarang())) { | |||
| tbt.setNama(b.getNamaBarang()); | |||
| tbt.getData().setBarang(b); | |||
| tbvPenjualan.refresh(); | |||
| } | |||
| } | |||
| @@ -9,9 +9,11 @@ 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.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; | |||
| @@ -83,6 +85,7 @@ public class FormTransaksiTunaiController implements Initializable { | |||
| @FXML | |||
| private Text lblGrandTotal; | |||
| private String noNota = ""; | |||
| private AmigoPosRx posRx = new AmigoPosRx(); | |||
| /** | |||
| @@ -90,6 +93,8 @@ public class FormTransaksiTunaiController implements Initializable { | |||
| */ | |||
| @Override | |||
| public void initialize(URL url, ResourceBundle rb) { | |||
| fldScan.requestFocus(); | |||
| tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangTunai, Integer> cell) -> { | |||
| return new ReadOnlyObjectWrapper(tbvTransaksi.getItems().indexOf(cell.getValue()) + 1); | |||
| }); | |||
| @@ -108,19 +113,21 @@ public class FormTransaksiTunaiController implements Initializable { | |||
| // fillTable(new ArrayList<>()); | |||
| } | |||
| public void initData(String noNota) { | |||
| posRx.getDNotaTunaiByNoNota(noNota).subscribe(getDNotaTunaiObserver); | |||
| 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(){ | |||
| public void setTanggal() { | |||
| java.util.Date skrg = new java.util.Date(); | |||
| java.text.SimpleDateFormat kal = new | |||
| java.text.SimpleDateFormat("dd/MM/yyyy"); | |||
| java.text.SimpleDateFormat kal = new java.text.SimpleDateFormat("dd/MM/yyyy"); | |||
| txtTanggal.setText(kal.format(skrg)); | |||
| } | |||
| private void refreshData(List<DNotaTunai> daftarNotaTunai) { | |||
| daftarTabelTransaksi.clear(); | |||
| @@ -137,8 +144,8 @@ public class FormTransaksiTunaiController implements Initializable { | |||
| }); | |||
| String namaBarang = "..."; | |||
| if (BarangCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { | |||
| namaBarang = Fucout.getText(BarangCache.getInstance().getDaftarBarang() | |||
| if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { | |||
| namaBarang = Fucout.getText(AmigoPosCache.getInstance().getDaftarBarang() | |||
| .get(dNotaTunai.getKdBarang()).getNamaBarang()); | |||
| } | |||
| @@ -156,41 +163,103 @@ public class FormTransaksiTunaiController implements Initializable { | |||
| )), | |||
| fldPramuniaga)); | |||
| if (!BarangCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { | |||
| if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { | |||
| posRx.getBarangByKodeBarang(dNotaTunai.getKdBarang()).subscribe(getBarangObserver); | |||
| } | |||
| } | |||
| } | |||
| public void addToTable(Barang barang, String ukur, String jumlah){ | |||
| String[] promo = {"Ulang Tahun", "Harbolnas", "Ultah Amigo"}; | |||
| ComboBox<String> cbxPromo = new ComboBox<>(FXCollections.observableArrayList(promo)); | |||
| cbxPromo.getSelectionModel().select("Ulang Tahun"); | |||
| TextField fldPramuniaga = new TextField(); | |||
| fldPramuniaga.setOnKeyPressed((t) -> { | |||
| if (t.getCode() == KeyCode.ENTER) { | |||
| fldScan.requestFocus(); | |||
| public void addToTable(Barang barang, NoBarang noBarang, int jumlah) { | |||
| if (barang != null && noBarang != null) { | |||
| if (noBarang.getStokOperasional() >= jumlah) { | |||
| boolean ada = false; | |||
| for (TabelBarangTunai tbt : daftarTabelTransaksi) { | |||
| if (tbt.getKode().equals(barang.getKodeBarang()) && tbt.getUkur().equals(noBarang.getNomor())) { | |||
| noBarang.setStokOperasional(noBarang.getStokOperasional() - jumlah); | |||
| tbt.getData().setJumlah(tbt.getData().getJumlah() + jumlah); | |||
| tbt.setJumlah(String.valueOf(tbt.getData().getJumlah())); | |||
| tbvTransaksi.refresh(); | |||
| 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"); | |||
| TextField fldPramuniaga = new TextField(); | |||
| fldPramuniaga.setOnKeyPressed((t) -> { | |||
| if (t.getCode() == KeyCode.ENTER) { | |||
| fldScan.requestFocus(); | |||
| } | |||
| }); | |||
| DNotaTunai dNotaTunai = new DNotaTunai( | |||
| noNota, | |||
| barang.getKodeBarang(), | |||
| barang.getNamaBarang(), | |||
| jumlah, | |||
| 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(jumlah), | |||
| Fucout.getText(Fucout.formatRibuan(noBarang.getHargaJual())), | |||
| "...", | |||
| "...", | |||
| cbxPromo, | |||
| Fucout.getText(Fucout.formatRibuan( | |||
| jumlah * noBarang.getHargaJual()) | |||
| ), | |||
| fldPramuniaga); | |||
| tbt.setData(dNotaTunai); | |||
| daftarTabelTransaksi.add(tbt); | |||
| } | |||
| } | |||
| }); | |||
| daftarTabelTransaksi.add(new TabelBarangTunai( | |||
| Fucout.getText(barang.getKodeBarang()), | |||
| Fucout.getText(barang.getNamaBarang()), | |||
| Fucout.getText(ukur), | |||
| Fucout.getText("1"), | |||
| "...", | |||
| "...", | |||
| "...", | |||
| cbxPromo, | |||
| "...", | |||
| fldPramuniaga)); | |||
| } | |||
| } | |||
| } | |||
| //SCAN BARANG | |||
| @FXML | |||
| void fldScanOnKeyPressed(KeyEvent event) { | |||
| if (event.getCode() == KeyCode.ENTER) { | |||
| posRx.getBarangByKodeBarang(fldScan.getText()).subscribe(getBarangBaruObserver); | |||
| 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, 1); | |||
| } else { | |||
| Observable.zip(posRx.getBarangByKodeBarang(kodeBarang), | |||
| posRx.getNoBarangByIdGabunganNomor(barang.getIdGabungan(), ukur), | |||
| (b, nB) -> new BarangFull(b, nB)).subscribe(getBarangFullGetNoBarangFromBarangObserver); | |||
| } | |||
| } | |||
| Observable.zip(posRx.getBarangByKodeBarang(kodeBarang), | |||
| Observable.just(ukur), | |||
| (barang, nomor) -> { | |||
| barang.setNomor(nomor); | |||
| return barang; | |||
| }).subscribe(getTambahBarangObserver); | |||
| } | |||
| } | |||
| Observer<List<DNotaTunai>> getDNotaTunaiObserver = new Observer<>() { | |||
| @@ -250,7 +319,7 @@ public class FormTransaksiTunaiController implements Initializable { | |||
| @Override | |||
| public void onNext(Barang b) { | |||
| BarangCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b); | |||
| AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b); | |||
| for (TabelBarangTunai tbt : daftarTabelTransaksi) { | |||
| if (tbt.getKode().equals(b.getKodeBarang())) { | |||
| tbt.setNama(b.getNamaBarang()); | |||
| @@ -258,11 +327,9 @@ public class FormTransaksiTunaiController implements Initializable { | |||
| } | |||
| }; | |||
| } | |||
| @Override | |||
| public void onError(Throwable error) { | |||
| System.out.println(".onError()"); | |||
| if (error instanceof HttpException) { | |||
| switch (((HttpException) error).code()) { | |||
| case HttpURLConnection.HTTP_NOT_FOUND: | |||
| @@ -294,22 +361,33 @@ public class FormTransaksiTunaiController implements Initializable { | |||
| } | |||
| }; | |||
| Observer<Barang> getBarangBaruObserver = new Observer<>() { | |||
| Observer<Barang> getTambahBarangObserver = new Observer<>() { | |||
| @Override | |||
| public void onSubscribe(Disposable dspsbl) { | |||
| } | |||
| @Override | |||
| public void onNext(Barang b) { | |||
| BarangCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b); | |||
| addToTable(b, "XL", "1"); | |||
| 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) { | |||
| System.out.println(".onError()"); | |||
| if (error instanceof HttpException) { | |||
| switch (((HttpException) error).code()) { | |||
| case HttpURLConnection.HTTP_NOT_FOUND: | |||
| @@ -341,4 +419,47 @@ public class FormTransaksiTunaiController implements Initializable { | |||
| } | |||
| }; | |||
| Observer<BarangFull> getBarangFullGetNoBarangFromBarangObserver = new Observer<>() { | |||
| @Override | |||
| public void onSubscribe(Disposable dspsbl) { | |||
| } | |||
| @Override | |||
| public void onNext(BarangFull bf) { | |||
| addToTable(bf.getBarang(), bf.getNoBarang(), 1); | |||
| } | |||
| @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() { | |||
| } | |||
| }; | |||
| } | |||
| @@ -5,10 +5,9 @@ | |||
| */ | |||
| package id.amigogroup.posterminal.transaksi; | |||
| import id.amigogroup.posterminal.model.DNotaRetur; | |||
| import javafx.beans.property.SimpleObjectProperty; | |||
| import javafx.beans.property.SimpleStringProperty; | |||
| import javafx.scene.control.Button; | |||
| import javafx.scene.control.ComboBox; | |||
| import javafx.scene.control.TextField; | |||
| /** | |||
| @@ -16,151 +15,169 @@ import javafx.scene.control.TextField; | |||
| * @author AGNES | |||
| */ | |||
| public class TabelBarangRetur { | |||
| private SimpleStringProperty tcKodeRetur; | |||
| private SimpleStringProperty tcNamaRetur; | |||
| private SimpleStringProperty tcUkurRetur; | |||
| private SimpleStringProperty tcJumlahRetur; | |||
| private SimpleStringProperty tcHargaRetur; | |||
| private SimpleStringProperty tcDisc1Retur; | |||
| private SimpleStringProperty tcDisc2Retur; | |||
| private SimpleStringProperty tcSubtotalRetur; | |||
| private SimpleObjectProperty<TextField>tcPramuniagaRetur; | |||
| public TabelBarangRetur(String tcKodeRetur, String tcNamaRetur, String tcUkurRetur, String tcJumlahRetur, String tcHargaRetur, String tcDisc1Retur, | |||
| String tcDisc2Retur, String tcSubtotalRetur, TextField tcPramuniagaRetur) { | |||
| this.tcKodeRetur = new SimpleStringProperty(tcKodeRetur); | |||
| this.tcNamaRetur = new SimpleStringProperty(tcNamaRetur); | |||
| this.tcUkurRetur = new SimpleStringProperty(tcUkurRetur); | |||
| this.tcJumlahRetur = new SimpleStringProperty(tcJumlahRetur); | |||
| this.tcHargaRetur = new SimpleStringProperty(tcHargaRetur); | |||
| this.tcDisc1Retur = new SimpleStringProperty(tcDisc1Retur); | |||
| this.tcDisc2Retur = new SimpleStringProperty(tcDisc2Retur); | |||
| this.tcSubtotalRetur = new SimpleStringProperty(tcSubtotalRetur); | |||
| this.tcPramuniagaRetur = new SimpleObjectProperty<TextField>(tcPramuniagaRetur); | |||
| private SimpleStringProperty kode; | |||
| private SimpleStringProperty nama; | |||
| private SimpleStringProperty ukur; | |||
| private SimpleStringProperty jumlah; | |||
| private SimpleStringProperty harga; | |||
| private SimpleStringProperty disc1; | |||
| private SimpleStringProperty disc2; | |||
| private SimpleStringProperty subTotal; | |||
| private SimpleObjectProperty<TextField> fldPramuniaga; | |||
| private DNotaRetur data; | |||
| public TabelBarangRetur(String kode, String nama, String ukur, String jumlah, String harga, String disc1, | |||
| String disc2, String subTotal, TextField fldPramuniaga) { | |||
| this.kode = new SimpleStringProperty(kode); | |||
| this.nama = new SimpleStringProperty(nama); | |||
| this.ukur = new SimpleStringProperty(ukur); | |||
| this.jumlah = new SimpleStringProperty(jumlah); | |||
| this.harga = new SimpleStringProperty(harga); | |||
| this.disc1 = new SimpleStringProperty(disc1); | |||
| this.disc2 = new SimpleStringProperty(disc2); | |||
| this.subTotal = new SimpleStringProperty(subTotal); | |||
| this.fldPramuniaga = new SimpleObjectProperty<TextField>(fldPramuniaga); | |||
| } | |||
| /** | |||
| * @return the tcKode | |||
| * @return the kode | |||
| */ | |||
| public String getTcKodeRetur() { | |||
| return tcKodeRetur.get(); | |||
| public String getKode() { | |||
| return kode.get(); | |||
| } | |||
| /** | |||
| * @param tcKode the tcKode to set | |||
| * @param kode the kode to set | |||
| */ | |||
| public void setTcKodeRetur(String tcKodeRetur) { | |||
| this.tcKodeRetur.set(tcKodeRetur); | |||
| public void setKode(String kode) { | |||
| this.kode.set(kode); | |||
| } | |||
| /** | |||
| * @return the tcNama | |||
| * @return the nama | |||
| */ | |||
| public String getTcNamaRetur() { | |||
| return tcNamaRetur.get(); | |||
| public String getNama() { | |||
| return nama.get(); | |||
| } | |||
| /** | |||
| * @param tcNama the tcNama to set | |||
| * @param nama the nama to set | |||
| */ | |||
| public void setTcNamaRetur(String tcNamaRetur) { | |||
| this.tcNamaRetur.set(tcNamaRetur); | |||
| public void setNama(String nama) { | |||
| this.nama.set(nama); | |||
| } | |||
| /** | |||
| * @return the tcUkur | |||
| * @return the ukur | |||
| */ | |||
| public String getTcUkurRetur() { | |||
| return tcUkurRetur.get(); | |||
| public String getUkur() { | |||
| return ukur.get(); | |||
| } | |||
| /** | |||
| * @param tcUkur the tcUkur to set | |||
| * @param ukur the ukur to set | |||
| */ | |||
| public void setTcUkurRetur(String tcUkurRetur) { | |||
| this.tcUkurRetur.set(tcUkurRetur); | |||
| public void setUkur(String ukur) { | |||
| this.ukur.set(ukur); | |||
| } | |||
| /** | |||
| * @return the tcJumlah | |||
| * @return the jumlah | |||
| */ | |||
| public String getTcJumlahRetur() { | |||
| return tcJumlahRetur.get(); | |||
| public String getJumlah() { | |||
| return jumlah.get(); | |||
| } | |||
| /** | |||
| * @param tcJumlah the tcJumlah to set | |||
| * @param jumlah the jumlah to set | |||
| */ | |||
| public void setTcJumlahRetur(String tcJumlahRetur) { | |||
| this.tcJumlahRetur.set(tcJumlahRetur); | |||
| public void setJumlah(String jumlah) { | |||
| this.jumlah.set(jumlah); | |||
| } | |||
| /** | |||
| * @return the tcHarga | |||
| * @return the harga | |||
| */ | |||
| public String getTcHargaRetur() { | |||
| return tcHargaRetur.get(); | |||
| public String getHarga() { | |||
| return harga.get(); | |||
| } | |||
| /** | |||
| * @param tcHarga the tcHarga to set | |||
| * @param harga the harga to set | |||
| */ | |||
| public void setTcHargaRetur(String tcHargaRetur) { | |||
| this.tcHargaRetur.set(tcHargaRetur); | |||
| public void setHarga(String harga) { | |||
| this.harga.set(harga); | |||
| } | |||
| /** | |||
| * @return the tcDisc1 | |||
| * @return the disc1 | |||
| */ | |||
| public String getTcDisc1Retur() { | |||
| return tcDisc1Retur.get(); | |||
| public String getDisc1() { | |||
| return disc1.get(); | |||
| } | |||
| /** | |||
| * @param tcDisc1 the tcDisc1 to set | |||
| * @param disc1 the disc1 to set | |||
| */ | |||
| public void setTcDisc1Retur(String tcDisc1Retur) { | |||
| this.tcDisc1Retur.set(tcDisc1Retur); | |||
| public void setDisc1(String disc1) { | |||
| this.disc1.set(disc1); | |||
| } | |||
| /** | |||
| * @return the tcDisc2 | |||
| * @return the disc2 | |||
| */ | |||
| public String getTcDisc2Retur() { | |||
| return tcDisc2Retur.get(); | |||
| public String getDisc2() { | |||
| return disc2.get(); | |||
| } | |||
| /** | |||
| * @param tcDisc2 the tcDisc2 to set | |||
| * @param disc2 the disc2 to set | |||
| */ | |||
| public void setTcDisc2Retur(String tcDisc2Retur) { | |||
| this.tcDisc2Retur.set(tcDisc2Retur); | |||
| public void setDisc2(String disc2) { | |||
| this.disc2.set(disc2); | |||
| } | |||
| /** | |||
| * @return the subTotal | |||
| */ | |||
| public String getSubTotal() { | |||
| return subTotal.get(); | |||
| } | |||
| /** | |||
| * @param subTotal the subTotal to set | |||
| */ | |||
| public void setSubTotal(String subTotal) { | |||
| this.subTotal.set(subTotal); | |||
| } | |||
| /** | |||
| * @return the tcSubtotal | |||
| * @return the fldPramuniaga | |||
| */ | |||
| public String getTcSubtotalRetur() { | |||
| return tcSubtotalRetur.get(); | |||
| public TextField getFldPramuniaga() { | |||
| return fldPramuniaga.get(); | |||
| } | |||
| /** | |||
| * @param tcSubtotal the tcSubtotal to set | |||
| * @param fldPramuniaga the fldPramuniaga to set | |||
| */ | |||
| public void setTcSubtotalRetur(String tcSubtotalRetur) { | |||
| this.tcSubtotalRetur.set(tcSubtotalRetur); | |||
| public void setFldPramuniaga(TextField fldPramuniaga) { | |||
| this.fldPramuniaga.set(fldPramuniaga); | |||
| } | |||
| /** | |||
| * @return the tcPramuniaga | |||
| * @return the data | |||
| */ | |||
| public TextField getTcPramuniagaRetur() { | |||
| return tcPramuniagaRetur.get(); | |||
| public DNotaRetur getData() { | |||
| return data; | |||
| } | |||
| /** | |||
| * @param tcPramuniaga the tcPramuniaga to set | |||
| * @param data the data to set | |||
| */ | |||
| public void setTcPramuniagaRetur(TextField tcPramuniagaRetur) { | |||
| this.tcPramuniagaRetur.set(tcPramuniagaRetur); | |||
| public void setData(DNotaRetur data) { | |||
| this.data = data; | |||
| } | |||
| } | |||
| } | |||
| @@ -5,9 +5,9 @@ | |||
| */ | |||
| package id.amigogroup.posterminal.transaksi; | |||
| import id.amigogroup.posterminal.model.DNotaTunai; | |||
| import javafx.beans.property.SimpleObjectProperty; | |||
| import javafx.beans.property.SimpleStringProperty; | |||
| import javafx.scene.control.Button; | |||
| import javafx.scene.control.ComboBox; | |||
| import javafx.scene.control.TextField; | |||
| @@ -26,6 +26,8 @@ public class TabelBarangTunai { | |||
| private SimpleObjectProperty<ComboBox> cbxPromo; | |||
| private SimpleStringProperty subTotal; | |||
| private SimpleObjectProperty<TextField> fldPramuniaga; | |||
| private DNotaTunai data; | |||
| public TabelBarangTunai(String kode, String nama, String ukur, String jumlah, String harga, String disc1, | |||
| String disc2, ComboBox cbxPromo, String subTotal, TextField fldPramuniaga) { | |||
| @@ -181,4 +183,18 @@ public class TabelBarangTunai { | |||
| public void setFldPramuniaga(TextField fldPramuniaga) { | |||
| this.fldPramuniaga.set(fldPramuniaga); | |||
| } | |||
| /** | |||
| * @return the data | |||
| */ | |||
| public DNotaTunai getData() { | |||
| return data; | |||
| } | |||
| /** | |||
| * @param data the data to set | |||
| */ | |||
| public void setData(DNotaTunai data) { | |||
| this.data = data; | |||
| } | |||
| } | |||
| @@ -3,7 +3,7 @@ | |||
| * To change this template file, choose Tools | Templates | |||
| * and open the template in the editor. | |||
| */ | |||
| package id.amigogroup.posterminal.pencarian; | |||
| package id.amigogroup.posterminal.util; | |||
| import id.amigogroup.posterminal.model.Barang; | |||
| import id.amigogroup.posterminal.model.NoBarang; | |||
| @@ -14,17 +14,18 @@ import java.util.Map; | |||
| * | |||
| * @author ronal | |||
| */ | |||
| public class BarangCache { | |||
| private static BarangCache instance; | |||
| private Map<String, Barang> daftarBarang; | |||
| private Map<String, NoBarang> daftarNoBarang; | |||
| public class AmigoPosCache { | |||
| private static AmigoPosCache instance; | |||
| private final Map<String, Barang> daftarBarang; | |||
| private final Map<String, NoBarang> daftarNoBarang; | |||
| private BarangCache(){ | |||
| private AmigoPosCache(){ | |||
| daftarBarang = new HashMap<>(); | |||
| daftarNoBarang = new HashMap<>(); | |||
| } | |||
| public static BarangCache getInstance(){ | |||
| if(instance == null) instance = new BarangCache(); | |||
| public static AmigoPosCache getInstance(){ | |||
| if(instance == null) instance = new AmigoPosCache(); | |||
| return instance; | |||
| } | |||
| @@ -159,4 +159,18 @@ public class Fucout { | |||
| .atZone(ZoneId.systemDefault()) | |||
| .toLocalDate(); | |||
| } | |||
| public static String getKodeBarangFromKodeFull(String kodeFull){ | |||
| if(kodeFull.length() >= 9){ | |||
| return kodeFull.substring(0, 9); | |||
| } | |||
| return ""; | |||
| } | |||
| public static String getNomorBarangFromKodeFull(String kodeFull){ | |||
| if(kodeFull.length() > 9){ | |||
| return kodeFull.substring(9); | |||
| } | |||
| return ""; | |||
| } | |||
| } | |||
| @@ -11,6 +11,7 @@ | |||
| <?import javafx.scene.layout.GridPane?> | |||
| <?import javafx.scene.layout.HBox?> | |||
| <?import javafx.scene.layout.RowConstraints?> | |||
| <?import javafx.scene.layout.StackPane?> | |||
| <?import javafx.scene.text.Font?> | |||
| <AnchorPane id="AnchorPane" fx:id="apMain" minHeight="-Infinity" minWidth="-Infinity" prefHeight="450.0" prefWidth="750.0" stylesheets="@../styles/pos_styles.css" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.amigogroup.posterminal.transaksi.FormTransaksiReturController"> | |||
| @@ -24,14 +25,14 @@ | |||
| <items> | |||
| <AnchorPane> | |||
| <children> | |||
| <Label fx:id="lbl" layoutX="14.0" layoutY="6.0" text="Histori Penjualan" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="0.0"> | |||
| <Label layoutX="14.0" layoutY="6.0" text="Histori Penjualan" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="0.0"> | |||
| <font> | |||
| <Font size="14.0" /> | |||
| </font> | |||
| </Label> | |||
| <Label layoutX="14.0" layoutY="20.0" text="Nomor Nota Penjualan" /> | |||
| <TextField fx:id="fldNotaPenjualan" layoutX="14.0" layoutY="37.0" onKeyPressed="#fldNotaPenjualanOnKeyPressed" prefHeight="25.0" prefWidth="329.0" promptText="Nomor Nota Penjualan" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="37.0" /> | |||
| <TableView fx:id="tbvPenjualan" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="65.0"> | |||
| <TableView fx:id="tbvPenjualan" onDragDetected="#tbvPenjualanOnDragDetected" onDragDone="#tbvPenjualanOnDragDone" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="65.0"> | |||
| <columns> | |||
| <TableColumn fx:id="tcNo" editable="false" maxWidth="30.0" minWidth="30.0" prefWidth="30.0" resizable="false" sortable="false" text="No" /> | |||
| <TableColumn fx:id="tcKode" prefWidth="75.0" text="Kode Barang" /> | |||
| @@ -70,7 +71,7 @@ | |||
| <HBox alignment="CENTER_LEFT" maxWidth="1.7976931348623157E308" spacing="5.0"> | |||
| <children> | |||
| <Label text="Nomor Nota" /> | |||
| <Label text=": -"> | |||
| <Label fx:id="lblNomorNota" text=": -"> | |||
| <HBox.margin> | |||
| <Insets /> | |||
| </HBox.margin> | |||
| @@ -121,6 +122,15 @@ | |||
| <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> | |||
| </columnResizePolicy> | |||
| </TableView> | |||
| <StackPane fx:id="stpReturDrop" layoutY="76.0" onDragDropped="#stpReturDropOnDragDropped" onDragEntered="#stpReturDropOnDragEntered" onDragExited="#stpReturDropOnDragExited" onDragOver="#stpReturDropOnDragOver" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="75.0"> | |||
| <children> | |||
| <Label fx:id="lblTambahKeTabelRetur" text="Tambahkan Barang ke Nota Retur" textFill="GREY" visible="false"> | |||
| <font> | |||
| <Font name="System Bold" size="18.0" /> | |||
| </font> | |||
| </Label> | |||
| </children> | |||
| </StackPane> | |||
| </children> | |||
| </AnchorPane> | |||
| </items> | |||
| @@ -1,6 +1,7 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <?import javafx.geometry.Insets?> | |||
| <?import javafx.scene.canvas.Canvas?> | |||
| <?import javafx.scene.control.Label?> | |||
| <?import javafx.scene.control.Separator?> | |||
| <?import javafx.scene.control.TableColumn?> | |||
| @@ -94,6 +95,7 @@ | |||
| </children> | |||
| </GridPane> | |||
| <Separator layoutY="116.0" prefHeight="0.0" prefWidth="800.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="116.0" /> | |||
| <Canvas height="200.0" layoutX="63.0" layoutY="16.0" width="200.0" AnchorPane.bottomAnchor="55.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="130.0" /> | |||
| <TableView fx:id="tbvTransaksi" layoutY="150.0" prefHeight="245.0" prefWidth="800.0" AnchorPane.bottomAnchor="55.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="130.0"> | |||
| <columns> | |||
| <TableColumn fx:id="tcNo" editable="false" maxWidth="30.0" minWidth="30.0" prefWidth="30.0" resizable="false" sortable="false" text="No" /> | |||
| @@ -19,16 +19,18 @@ and open the template in the editor. | |||
| -fx-cursor: hand; | |||
| } | |||
| .button-navigasi-transaksi:hover{ | |||
| /*-fx-background-color: #bbeeff;*/ | |||
| -fx-background-color: | |||
| linear-gradient(#d5f6fd 0%, #cae0ff 49%, #cae0ff 50%, #ffffff 100%);} | |||
| .button-navigasi-transaksi-selected{ | |||
| /*-fx-background-color: #33aaff;*/ | |||
| -fx-background-color: | |||
| linear-gradient(#abf6fd 0%, #8aa6fd 49%, #8aa6dd 50%, #50a6dd 100%); | |||
| } | |||
| .table-drag-over{ | |||
| -fx-background-color: lightgreen; | |||
| } | |||
| #header{ | |||
| -fx-border-style: solid; | |||
| -fx-border-color: black; | |||