* [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; | 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.api.AmigoPosRx; | ||||
| import id.amigogroup.posterminal.model.Barang; | 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.model.Pelanggan; | ||||
| import id.amigogroup.posterminal.pencarian.DialogCariBarangController; | import id.amigogroup.posterminal.pencarian.DialogCariBarangController; | ||||
| import id.amigogroup.posterminal.pencarian.DialogCariNotaTundaController; | 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.transaksi.FormTransaksiTunaiController; | ||||
| import id.amigogroup.posterminal.util.AlertUtil; | import id.amigogroup.posterminal.util.AlertUtil; | ||||
| import id.amigogroup.posterminal.util.Fucout; | import id.amigogroup.posterminal.util.Fucout; | ||||
| import io.reactivex.Observable; | |||||
| import io.reactivex.Observer; | import io.reactivex.Observer; | ||||
| import io.reactivex.disposables.Disposable; | import io.reactivex.disposables.Disposable; | ||||
| import java.io.IOException; | import java.io.IOException; | ||||
| @@ -171,17 +166,13 @@ public class FormUtamaController implements Initializable { | |||||
| loader.setLocation(getClass().getResource("/fxml/FormTransaksiTunai.fxml")); | loader.setLocation(getClass().getResource("/fxml/FormTransaksiTunai.fxml")); | ||||
| node = loader.load(); | node = loader.load(); | ||||
| FormTransaksiTunaiController fttc = loader.getController(); | FormTransaksiTunaiController fttc = loader.getController(); | ||||
| if (!baru) { | |||||
| fttc.initData(noNota); | |||||
| } | |||||
| fttc.initData(noNota,baru); | |||||
| break; | break; | ||||
| case FormConstanta.TRANSAKSI_RETUR: | case FormConstanta.TRANSAKSI_RETUR: | ||||
| loader.setLocation(getClass().getResource("/fxml/FormTransaksiRetur.fxml")); | loader.setLocation(getClass().getResource("/fxml/FormTransaksiRetur.fxml")); | ||||
| node = loader.load(); | node = loader.load(); | ||||
| FormTransaksiReturController ftrc = loader.getController(); | FormTransaksiReturController ftrc = loader.getController(); | ||||
| if (!baru) { | |||||
| // ftrc.initData(noNota); | |||||
| } | |||||
| ftrc.initData(noNota,baru); | |||||
| break; | break; | ||||
| } | } | ||||
| @@ -240,7 +231,6 @@ public class FormUtamaController implements Initializable { | |||||
| dialogCariBarang.initOwner(bpMain.getScene().getWindow()); | dialogCariBarang.initOwner(bpMain.getScene().getWindow()); | ||||
| Optional<Barang> result = dialogCariBarang.showAndWait(); | Optional<Barang> result = dialogCariBarang.showAndWait(); | ||||
| System.out.println(result); | |||||
| }; | }; | ||||
| listShortcuts.put(kcCariBarang, rnCariBarang); | listShortcuts.put(kcCariBarang, rnCariBarang); | ||||
| @@ -256,7 +246,6 @@ public class FormUtamaController implements Initializable { | |||||
| updateLabelPelanggan(result.get()); | updateLabelPelanggan(result.get()); | ||||
| updateLabelMemberNonMember(); | updateLabelMemberNonMember(); | ||||
| } | } | ||||
| System.out.println(result); | |||||
| }; | }; | ||||
| listShortcuts.put(kcCariPelanggan, rnCariPelanggan); | 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.Pagination; | ||||
| import id.amigogroup.posterminal.model.MNotaRetur; | import id.amigogroup.posterminal.model.MNotaRetur; | ||||
| import id.amigogroup.posterminal.model.MNotaTunai; | import id.amigogroup.posterminal.model.MNotaTunai; | ||||
| import id.amigogroup.posterminal.model.NoBarang; | |||||
| import id.amigogroup.posterminal.model.Pelanggan; | import id.amigogroup.posterminal.model.Pelanggan; | ||||
| import id.amigogroup.posterminal.model.Tas; | import id.amigogroup.posterminal.model.Tas; | ||||
| import io.reactivex.Observable; | import io.reactivex.Observable; | ||||
| @@ -31,6 +32,10 @@ public class AmigoPosRx { | |||||
| public Observable<Pagination<Barang>> getBarangByNamaBarang(String namaBarang){ | public Observable<Pagination<Barang>> getBarangByNamaBarang(String namaBarang){ | ||||
| return UtilsApi.getServiceApiBarang().getBarangByNamaBarang(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) { | public Observable<MNotaTunai> getMNotaTunaiByNoNota(String noNota) { | ||||
| return UtilsApi.getServiceApiBarang().getMNotaTunaiByNoNota(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.DNotaTunai; | ||||
| import id.amigogroup.posterminal.model.MNotaRetur; | import id.amigogroup.posterminal.model.MNotaRetur; | ||||
| import id.amigogroup.posterminal.model.MNotaTunai; | import id.amigogroup.posterminal.model.MNotaTunai; | ||||
| import id.amigogroup.posterminal.model.NoBarang; | |||||
| import id.amigogroup.posterminal.model.Pagination; | import id.amigogroup.posterminal.model.Pagination; | ||||
| import io.reactivex.Observable; | import io.reactivex.Observable; | ||||
| import java.util.List; | import java.util.List; | ||||
| @@ -25,6 +26,13 @@ public interface ServiceApiBarang { | |||||
| @GET("barangs/kode/{kode}") | @GET("barangs/kode/{kode}") | ||||
| Observable<Barang> getBarangByKodeBarang(@Path("kode") String 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 | //M-NOTA-TUNAI | ||||
| //Mengambil Master Nota Tunai by No Nota | //Mengambil Master Nota Tunai by No Nota | ||||
| @GET("m-nota-tunai/no-nota/{noNota}") | @GET("m-nota-tunai/no-nota/{noNota}") | ||||
| @@ -121,10 +121,11 @@ public class FormBayarController implements Initializable, BayarInterface { | |||||
| loader.setLocation(getClass().getResource("/fxml/FormBayarTunai.fxml")); | loader.setLocation(getClass().getResource("/fxml/FormBayarTunai.fxml")); | ||||
| node = loader.load(); | node = loader.load(); | ||||
| FormBayarTunaiController fbtc = loader.getController(); | |||||
| fbtc.initData(this); | |||||
| vbContent.getChildren().add(node); | vbContent.getChildren().add(node); | ||||
| bayarContent.setNodeTunai(node); | bayarContent.setNodeTunai(node); | ||||
| FormBayarTunaiController fbtc = loader.getController(); | |||||
| fbtc.initData(this); | |||||
| } else { | } else { | ||||
| if (bayarContent.getNodeTunai() != null) { | if (bayarContent.getNodeTunai() != null) { | ||||
| vbContent.getChildren().remove(bayarContent.getNodeTunai()); | vbContent.getChildren().remove(bayarContent.getNodeTunai()); | ||||
| @@ -139,10 +140,11 @@ public class FormBayarController implements Initializable, BayarInterface { | |||||
| loader.setLocation(getClass().getResource("/fxml/FormBayarKartu.fxml")); | loader.setLocation(getClass().getResource("/fxml/FormBayarKartu.fxml")); | ||||
| node = loader.load(); | node = loader.load(); | ||||
| FormBayarKartuController fbkc = loader.getController(); | |||||
| fbkc.initData(this); | |||||
| vbContent.getChildren().add(node); | vbContent.getChildren().add(node); | ||||
| bayarContent.setNodeKartu(node); | bayarContent.setNodeKartu(node); | ||||
| FormBayarKartuController fbkc = loader.getController(); | |||||
| fbkc.initData(this); | |||||
| } else { | } else { | ||||
| if (bayarContent.getNodeKartu() != null) { | if (bayarContent.getNodeKartu() != null) { | ||||
| vbContent.getChildren().remove(bayarContent.getNodeKartu()); | vbContent.getChildren().remove(bayarContent.getNodeKartu()); | ||||
| @@ -156,11 +158,12 @@ public class FormBayarController implements Initializable, BayarInterface { | |||||
| if (bayarContent.getNodeRetur() == null && chkSource.selectedProperty().get()) { | if (bayarContent.getNodeRetur() == null && chkSource.selectedProperty().get()) { | ||||
| loader.setLocation(getClass().getResource("/fxml/FormBayarRetur.fxml")); | loader.setLocation(getClass().getResource("/fxml/FormBayarRetur.fxml")); | ||||
| node = loader.load(); | node = loader.load(); | ||||
| vbContent.getChildren().add(node); | |||||
| bayarContent.setNodeRetur(node); | |||||
| FormBayarReturController fbrc = loader.getController(); | FormBayarReturController fbrc = loader.getController(); | ||||
| fbrc.initData(this); | fbrc.initData(this); | ||||
| vbContent.getChildren().add(node); | |||||
| bayarContent.setNodeRetur(node); | |||||
| } else { | } else { | ||||
| if (bayarContent.getNodeRetur() != null) { | if (bayarContent.getNodeRetur() != null) { | ||||
| vbContent.getChildren().remove(bayarContent.getNodeRetur()); | vbContent.getChildren().remove(bayarContent.getNodeRetur()); | ||||
| @@ -194,11 +197,12 @@ public class FormBayarController implements Initializable, BayarInterface { | |||||
| if (bayarContent.getNodePoin() == null && chkSource.selectedProperty().get()) { | if (bayarContent.getNodePoin() == null && chkSource.selectedProperty().get()) { | ||||
| loader.setLocation(getClass().getResource("/fxml/FormBayarPoin.fxml")); | loader.setLocation(getClass().getResource("/fxml/FormBayarPoin.fxml")); | ||||
| node = loader.load(); | node = loader.load(); | ||||
| vbContent.getChildren().add(node); | |||||
| bayarContent.setNodePoin(node); | |||||
| FormBayarPoinController fbpc = loader.getController(); | FormBayarPoinController fbpc = loader.getController(); | ||||
| fbpc.initData(this); | fbpc.initData(this); | ||||
| vbContent.getChildren().add(node); | |||||
| bayarContent.setNodePoin(node); | |||||
| } else { | } else { | ||||
| if (bayarContent.getNodePoin() != null) { | if (bayarContent.getNodePoin() != null) { | ||||
| vbContent.getChildren().remove(bayarContent.getNodePoin()); | vbContent.getChildren().remove(bayarContent.getNodePoin()); | ||||
| @@ -60,7 +60,7 @@ public class FormBayarTunaiController implements Initializable { | |||||
| < parent.getBayarContent().getTotalBayar()) { | < parent.getBayarContent().getTotalBayar()) { | ||||
| int kembali = parent.getBayarContent().getTotalBayar() | int kembali = parent.getBayarContent().getTotalBayar() | ||||
| - parent.getBayarContent().getTotalPerluBayar(); | - parent.getBayarContent().getTotalPerluBayar(); | ||||
| lblKembalian.setText(Fucout.formatRibuan(kembali)); | |||||
| lblKembalian.setText(Fucout.getText(Fucout.formatRibuan(kembali))); | |||||
| } else { | } else { | ||||
| lblKembalian.setText("-"); | lblKembalian.setText("-"); | ||||
| } | } | ||||
| @@ -1,4 +1,3 @@ | |||||
| package id.amigogroup.posterminal.model; | package id.amigogroup.posterminal.model; | ||||
| import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | import com.fasterxml.jackson.annotation.JsonIgnoreProperties; | ||||
| @@ -51,10 +50,28 @@ public class Barang { | |||||
| private String kedProduk; | private String kedProduk; | ||||
| @JsonProperty("kode_merk") | @JsonProperty("kode_merk") | ||||
| private String kodeMerk; | private String kodeMerk; | ||||
| private String nomor; | 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") | @JsonProperty("kode_barang") | ||||
| public String getKodeBarang() { | public String getKodeBarang() { | ||||
| return kodeBarang; | return kodeBarang; | ||||
| @@ -175,6 +192,20 @@ public class Barang { | |||||
| this.kodeMerk = kodeMerk; | 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 | @Override | ||||
| public String toString() { | 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(); | 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); | 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(); | 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") | @JsonProperty("bonus") | ||||
| private double 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") | @JsonProperty("id") | ||||
| public int getId() { | public int getId() { | ||||
| return id; | return id; | ||||
| @@ -170,6 +190,20 @@ public class DNotaRetur { | |||||
| this.bonus = bonus; | 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 | @Override | ||||
| public String toString() { | 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(); | 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; | package id.amigogroup.posterminal.model; | ||||
| import com.fasterxml.jackson.annotation.JsonInclude; | import com.fasterxml.jackson.annotation.JsonInclude; | ||||
| @@ -47,6 +46,23 @@ public class DNotaTunai { | |||||
| @JsonProperty("bonus") | @JsonProperty("bonus") | ||||
| private int 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") | @JsonProperty("id") | ||||
| public int getId() { | public int getId() { | ||||
| return id; | return id; | ||||
| @@ -157,6 +173,20 @@ public class DNotaTunai { | |||||
| this.bonus = bonus; | 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 | @Override | ||||
| public String toString() { | 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(); | 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; | package id.amigogroup.posterminal.transaksi; | ||||
| import id.amigogroup.posterminal.model.Barang; | import id.amigogroup.posterminal.model.Barang; | ||||
| import id.amigogroup.posterminal.model.NoBarang; | |||||
| /** | /** | ||||
| * | * | ||||
| * @author ronal | * @author ronal | ||||
| */ | */ | ||||
| public class DetailTransaksi<T,U> { | |||||
| private T masterNota; | |||||
| private U detailNota; | |||||
| public class BarangFull { | |||||
| private Barang barang; | 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.FormUtamaController; | ||||
| import id.amigogroup.posterminal.api.AmigoPosRx; | import id.amigogroup.posterminal.api.AmigoPosRx; | ||||
| import id.amigogroup.posterminal.model.Barang; | import id.amigogroup.posterminal.model.Barang; | ||||
| import id.amigogroup.posterminal.model.DNotaRetur; | |||||
| import id.amigogroup.posterminal.model.DNotaTunai; | import id.amigogroup.posterminal.model.DNotaTunai; | ||||
| import id.amigogroup.posterminal.pencarian.BarangCache; | |||||
| import id.amigogroup.posterminal.util.AmigoPosCache; | |||||
| import id.amigogroup.posterminal.util.AlertUtil; | import id.amigogroup.posterminal.util.AlertUtil; | ||||
| import id.amigogroup.posterminal.util.Fucout; | import id.amigogroup.posterminal.util.Fucout; | ||||
| import io.reactivex.Observer; | import io.reactivex.Observer; | ||||
| @@ -17,7 +18,6 @@ import io.reactivex.disposables.Disposable; | |||||
| import java.net.HttpURLConnection; | import java.net.HttpURLConnection; | ||||
| import java.net.SocketTimeoutException; | import java.net.SocketTimeoutException; | ||||
| import java.net.URL; | import java.net.URL; | ||||
| import java.util.ArrayList; | |||||
| import java.util.List; | import java.util.List; | ||||
| import java.util.ResourceBundle; | import java.util.ResourceBundle; | ||||
| import java.util.logging.Level; | import java.util.logging.Level; | ||||
| @@ -34,9 +34,15 @@ import javafx.scene.control.TableColumn; | |||||
| import javafx.scene.control.TableView; | import javafx.scene.control.TableView; | ||||
| import javafx.scene.control.TextField; | import javafx.scene.control.TextField; | ||||
| import javafx.scene.control.cell.PropertyValueFactory; | import javafx.scene.control.cell.PropertyValueFactory; | ||||
| import javafx.scene.input.ClipboardContent; | |||||
| import javafx.scene.input.DragEvent; | |||||
| import javafx.scene.input.Dragboard; | |||||
| import javafx.scene.input.KeyCode; | import javafx.scene.input.KeyCode; | ||||
| import javafx.scene.input.KeyEvent; | import javafx.scene.input.KeyEvent; | ||||
| import javafx.scene.input.MouseEvent; | |||||
| import javafx.scene.input.TransferMode; | |||||
| import javafx.scene.layout.AnchorPane; | import javafx.scene.layout.AnchorPane; | ||||
| import javafx.scene.layout.StackPane; | |||||
| import retrofit2.HttpException; | import retrofit2.HttpException; | ||||
| /** | /** | ||||
| @@ -72,33 +78,40 @@ public class FormTransaksiReturController implements Initializable { | |||||
| private TableColumn<TabelBarangTunai, String> tcSubTotal; | private TableColumn<TabelBarangTunai, String> tcSubTotal; | ||||
| @FXML | @FXML | ||||
| private TableColumn<TabelBarangTunai, TextField> tcPramuniaga; | private TableColumn<TabelBarangTunai, TextField> tcPramuniaga; | ||||
| @FXML | |||||
| 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 final AmigoPosRx posRx = new AmigoPosRx(); | ||||
| private String noNota = ""; | |||||
| private final ObservableList<TabelBarangTunai> daftarTabelPenjualan = FXCollections.observableArrayList(); | private final ObservableList<TabelBarangTunai> daftarTabelPenjualan = FXCollections.observableArrayList(); | ||||
| private List<DetailTransaksi> daftarDetailTransaksi = new ArrayList<>(); | |||||
| private final ObservableList<TabelBarangRetur> daftarTabelRetur = FXCollections.observableArrayList(); | |||||
| private TabelBarangTunai draggedTabelBarangTunai = null; | |||||
| /** | /** | ||||
| * Initializes the controller class. | * Initializes the controller class. | ||||
| @@ -118,33 +131,47 @@ public class FormTransaksiReturController implements Initializable { | |||||
| tcSubTotal.setCellValueFactory(new PropertyValueFactory<>("subTotal")); | tcSubTotal.setCellValueFactory(new PropertyValueFactory<>("subTotal")); | ||||
| tcPramuniaga.setCellValueFactory(new PropertyValueFactory<>("fldPramuniaga")); | tcPramuniaga.setCellValueFactory(new PropertyValueFactory<>("fldPramuniaga")); | ||||
| tbvPenjualan.setItems(daftarTabelPenjualan); | tbvPenjualan.setItems(daftarTabelPenjualan); | ||||
| tcNoRetur.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangRetur, Integer> cell) -> { | |||||
| return new ReadOnlyObjectWrapper(tbvRetur.getItems().indexOf(cell.getValue()) + 1); | |||||
| }); | |||||
| tcKodeRetur.setCellValueFactory(new PropertyValueFactory<>("kode")); | |||||
| tcNamaRetur.setCellValueFactory(new PropertyValueFactory<>("nama")); | |||||
| tcUkurRetur.setCellValueFactory(new PropertyValueFactory<>("ukur")); | |||||
| tcJumlahRetur.setCellValueFactory(new PropertyValueFactory<>("jumlah")); | |||||
| tcHargaRetur.setCellValueFactory(new PropertyValueFactory<>("harga")); | |||||
| tcDisc1Retur.setCellValueFactory(new PropertyValueFactory<>("disc1")); | |||||
| tcDisc2Retur.setCellValueFactory(new PropertyValueFactory<>("disc2")); | |||||
| tcSubTotalRetur.setCellValueFactory(new PropertyValueFactory<>("subTotal")); | |||||
| tcPramuniagaRetur.setCellValueFactory(new PropertyValueFactory<>("fldPramuniaga")); | |||||
| tbvRetur.setItems(daftarTabelRetur); | |||||
| Platform.runLater(() -> { | Platform.runLater(() -> { | ||||
| fldNotaPenjualan.requestFocus(); | fldNotaPenjualan.requestFocus(); | ||||
| }); | }); | ||||
| } | } | ||||
| private void mapCurrentDataToDetailTransaksi() { | |||||
| public void initData(String noNota, boolean baru) { | |||||
| this.noNota = noNota; | |||||
| lblNomorNota.setText(Fucout.getTextColon(noNota)); | |||||
| } | } | ||||
| int count = 0; | |||||
| @FXML | |||||
| Label lbl; | |||||
| private void refreshData(List<DNotaTunai> daftarNotaTunai) { | private void refreshData(List<DNotaTunai> daftarNotaTunai) { | ||||
| daftarTabelPenjualan.clear(); | daftarTabelPenjualan.clear(); | ||||
| daftarTabelRetur.clear(); | |||||
| for (DNotaTunai dNotaTunai : daftarNotaTunai) { | for (DNotaTunai dNotaTunai : daftarNotaTunai) { | ||||
| TextField fldPramuniaga = new TextField(dNotaTunai.getKodePram()); | TextField fldPramuniaga = new TextField(dNotaTunai.getKodePram()); | ||||
| String namaBarang = "..."; | String namaBarang = "..."; | ||||
| if (BarangCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { | |||||
| 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()), | Fucout.getText(dNotaTunai.getKdBarang()), | ||||
| namaBarang, | namaBarang, | ||||
| Fucout.getText(dNotaTunai.getNoBarang()), | Fucout.getText(dNotaTunai.getNoBarang()), | ||||
| @@ -156,9 +183,11 @@ public class FormTransaksiReturController implements Initializable { | |||||
| Fucout.getText(Fucout.formatRibuan( | Fucout.getText(Fucout.formatRibuan( | ||||
| dNotaTunai.getHargaJual() * dNotaTunai.getJumlah() | dNotaTunai.getHargaJual() * dNotaTunai.getJumlah() | ||||
| )), | )), | ||||
| fldPramuniaga)); | |||||
| fldPramuniaga); | |||||
| tbt.setData(dNotaTunai); | |||||
| daftarTabelPenjualan.add(tbt); | |||||
| if (!BarangCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { | |||||
| if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { | |||||
| posRx.getBarangByKodeBarang(dNotaTunai.getKdBarang()).subscribe(getBarangObserver); | posRx.getBarangByKodeBarang(dNotaTunai.getKdBarang()).subscribe(getBarangObserver); | ||||
| } | } | ||||
| } | } | ||||
| @@ -171,6 +200,135 @@ public class FormTransaksiReturController implements Initializable { | |||||
| } | } | ||||
| } | } | ||||
| @FXML | |||||
| void tbvPenjualanOnDragDetected(MouseEvent event) { | |||||
| Dragboard db = tbvPenjualan.startDragAndDrop(TransferMode.COPY); | |||||
| if (tbvPenjualan.getSelectionModel().getSelectedItem() != null) { | |||||
| stpReturDrop.setVisible(true); | |||||
| ClipboardContent content = new ClipboardContent(); | |||||
| content.putString(tbvPenjualan.getSelectionModel().getSelectedItem().getNama()); | |||||
| db.setContent(content); | |||||
| draggedTabelBarangTunai = tbvPenjualan.getSelectionModel().getSelectedItem(); | |||||
| } | |||||
| event.consume(); | |||||
| } | |||||
| @FXML | |||||
| void stpReturDropOnDragOver(DragEvent event) { | |||||
| if (event.getGestureSource() != tbvRetur | |||||
| && event.getDragboard().hasString()) { | |||||
| event.acceptTransferModes(TransferMode.COPY); | |||||
| } | |||||
| event.consume(); | |||||
| } | |||||
| @FXML | |||||
| void stpReturDropOnDragEntered(DragEvent event) { | |||||
| if (event.getGestureSource() != stpReturDrop | |||||
| && event.getDragboard().hasString()) { | |||||
| lblTambahKeTabelRetur.setText("Tambah Barang " + event.getDragboard().getString() + " ke Nota Retur"); | |||||
| lblTambahKeTabelRetur.setVisible(true); | |||||
| if (!stpReturDrop.getStyleClass().contains("table-drag-over")) { | |||||
| stpReturDrop.getStyleClass().add("table-drag-over"); | |||||
| } | |||||
| } | |||||
| event.consume(); | |||||
| } | |||||
| @FXML | |||||
| void stpReturDropOnDragExited(DragEvent event) { | |||||
| lblTambahKeTabelRetur.setVisible(false); | |||||
| if (stpReturDrop.getStyleClass().contains("table-drag-over")) { | |||||
| lblTambahKeTabelRetur.setText("Tambah Barang ke Nota Retur"); | |||||
| stpReturDrop.getStyleClass().remove("table-drag-over"); | |||||
| } | |||||
| event.consume(); | |||||
| } | |||||
| @FXML | |||||
| void stpReturDropOnDragDropped(DragEvent event) { | |||||
| /* data dropped | |||||
| * if there is a string data on dragboard, read it and use it */ | |||||
| Dragboard db = event.getDragboard(); | |||||
| boolean success = false; | |||||
| if (db.hasString()) { | |||||
| } | |||||
| if (draggedTabelBarangTunai != null) { | |||||
| boolean ada = false; | |||||
| for (TabelBarangRetur tbr : daftarTabelRetur) { | |||||
| if (tbr.getData() != null && draggedTabelBarangTunai.getData() != null) { | |||||
| DNotaRetur dNotaRetur = tbr.getData(); | |||||
| DNotaTunai dNotaTunai = draggedTabelBarangTunai.getData(); | |||||
| if (dNotaRetur.getKdBarang().equals(dNotaTunai.getKdBarang()) | |||||
| && dNotaRetur.getNoBarang().equals(dNotaTunai.getNoBarang())) { | |||||
| if ((dNotaRetur.getJumlah() + 1) <= dNotaTunai.getJumlah()) { | |||||
| dNotaRetur.setJumlah(dNotaRetur.getJumlah() + 1); | |||||
| tbr.setJumlah(Fucout.getText(String.valueOf(dNotaRetur.getJumlah()))); | |||||
| tbr.setSubTotal(Fucout.getText(Fucout.formatRibuan( | |||||
| dNotaRetur.getJumlah() * dNotaRetur.getHargaJual() | |||||
| ))); | |||||
| tbvRetur.refresh(); | |||||
| } else{ | |||||
| Alert alert = AlertUtil.getAlertError( | |||||
| "Jumlah Barang Kurang", | |||||
| "Barang di Nota Penjualan yang di-Retur sudah mencapai jumlah yang ada."); | |||||
| alert.initOwner(apMain.getScene().getWindow()); | |||||
| alert.show(); | |||||
| } | |||||
| ada = true; | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | |||||
| success = true; | |||||
| if (!ada) { | |||||
| TextField fldPramuniaga = new TextField(); | |||||
| DNotaRetur dNotaRetur = new DNotaRetur(noNota, draggedTabelBarangTunai.getData()); | |||||
| TabelBarangRetur tbr = new TabelBarangRetur( | |||||
| draggedTabelBarangTunai.getKode(), | |||||
| draggedTabelBarangTunai.getNama(), | |||||
| draggedTabelBarangTunai.getUkur(), | |||||
| Fucout.getText(String.valueOf(dNotaRetur.getJumlah())), | |||||
| draggedTabelBarangTunai.getHarga(), | |||||
| draggedTabelBarangTunai.getDisc1(), | |||||
| draggedTabelBarangTunai.getDisc2(), | |||||
| Fucout.getText(Fucout.formatRibuan( | |||||
| dNotaRetur.getJumlah() * dNotaRetur.getHargaJual() | |||||
| )), | |||||
| fldPramuniaga); | |||||
| tbr.setData(dNotaRetur); | |||||
| daftarTabelRetur.add(tbr); | |||||
| } | |||||
| } | |||||
| /* let the source know whether the string was successfully | |||||
| * transferred and used */ | |||||
| event.setDropCompleted(success); | |||||
| event.consume(); | |||||
| } | |||||
| @FXML | |||||
| void tbvPenjualanOnDragDone(DragEvent event) { | |||||
| /* the drag and drop gesture ended | |||||
| * if the data was successfully moved, clear it */ | |||||
| stpReturDrop.setVisible(false); | |||||
| // if (event.getTransferMode() == TransferMode.MOVE) { | |||||
| // } | |||||
| event.consume(); | |||||
| } | |||||
| Observer<List<DNotaTunai>> getDNotaTunaiObserver = new Observer<>() { | Observer<List<DNotaTunai>> getDNotaTunaiObserver = new Observer<>() { | ||||
| @Override | @Override | ||||
| public void onSubscribe(Disposable dspsbl) { | public void onSubscribe(Disposable dspsbl) { | ||||
| @@ -178,6 +336,7 @@ public class FormTransaksiReturController implements Initializable { | |||||
| @Override | @Override | ||||
| public void onNext(List<DNotaTunai> daftarDNotaTunai) { | public void onNext(List<DNotaTunai> daftarDNotaTunai) { | ||||
| fldNotaPenjualan.clear(); | |||||
| refreshData(daftarDNotaTunai); | refreshData(daftarDNotaTunai); | ||||
| } | } | ||||
| @@ -228,10 +387,12 @@ public class FormTransaksiReturController implements Initializable { | |||||
| @Override | @Override | ||||
| public void onNext(Barang b) { | public void onNext(Barang b) { | ||||
| BarangCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b); | |||||
| AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b); | |||||
| for (TabelBarangTunai tbt : tbvPenjualan.getItems()) { | for (TabelBarangTunai tbt : tbvPenjualan.getItems()) { | ||||
| if (tbt.getKode().equals(b.getKodeBarang())) { | |||||
| if (tbt.getData().getKdBarang().equals(b.getKodeBarang())) { | |||||
| tbt.setNama(b.getNamaBarang()); | tbt.setNama(b.getNamaBarang()); | ||||
| tbt.getData().setBarang(b); | |||||
| tbvPenjualan.refresh(); | tbvPenjualan.refresh(); | ||||
| } | } | ||||
| } | } | ||||
| @@ -9,9 +9,11 @@ import id.amigogroup.posterminal.FormUtamaController; | |||||
| import id.amigogroup.posterminal.api.AmigoPosRx; | import id.amigogroup.posterminal.api.AmigoPosRx; | ||||
| import id.amigogroup.posterminal.model.Barang; | import id.amigogroup.posterminal.model.Barang; | ||||
| import id.amigogroup.posterminal.model.DNotaTunai; | 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.AlertUtil; | ||||
| import id.amigogroup.posterminal.util.Fucout; | import id.amigogroup.posterminal.util.Fucout; | ||||
| import io.reactivex.Observable; | |||||
| import io.reactivex.Observer; | import io.reactivex.Observer; | ||||
| import io.reactivex.disposables.Disposable; | import io.reactivex.disposables.Disposable; | ||||
| import java.net.HttpURLConnection; | import java.net.HttpURLConnection; | ||||
| @@ -83,6 +85,7 @@ public class FormTransaksiTunaiController implements Initializable { | |||||
| @FXML | @FXML | ||||
| private Text lblGrandTotal; | private Text lblGrandTotal; | ||||
| private String noNota = ""; | |||||
| private AmigoPosRx posRx = new AmigoPosRx(); | private AmigoPosRx posRx = new AmigoPosRx(); | ||||
| /** | /** | ||||
| @@ -90,6 +93,8 @@ public class FormTransaksiTunaiController implements Initializable { | |||||
| */ | */ | ||||
| @Override | @Override | ||||
| public void initialize(URL url, ResourceBundle rb) { | public void initialize(URL url, ResourceBundle rb) { | ||||
| fldScan.requestFocus(); | |||||
| tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangTunai, Integer> cell) -> { | tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangTunai, Integer> cell) -> { | ||||
| return new ReadOnlyObjectWrapper(tbvTransaksi.getItems().indexOf(cell.getValue()) + 1); | return new ReadOnlyObjectWrapper(tbvTransaksi.getItems().indexOf(cell.getValue()) + 1); | ||||
| }); | }); | ||||
| @@ -108,19 +113,21 @@ public class FormTransaksiTunaiController implements Initializable { | |||||
| // fillTable(new ArrayList<>()); | // 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)); | lblNoNota.setText(Fucout.getTextColon(noNota)); | ||||
| setTanggal(); | setTanggal(); | ||||
| } | } | ||||
| public void setTanggal(){ | |||||
| public void setTanggal() { | |||||
| java.util.Date skrg = new java.util.Date(); | 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)); | txtTanggal.setText(kal.format(skrg)); | ||||
| } | } | ||||
| private void refreshData(List<DNotaTunai> daftarNotaTunai) { | private void refreshData(List<DNotaTunai> daftarNotaTunai) { | ||||
| daftarTabelTransaksi.clear(); | daftarTabelTransaksi.clear(); | ||||
| @@ -137,8 +144,8 @@ public class FormTransaksiTunaiController implements Initializable { | |||||
| }); | }); | ||||
| String namaBarang = "..."; | 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()); | .get(dNotaTunai.getKdBarang()).getNamaBarang()); | ||||
| } | } | ||||
| @@ -156,41 +163,103 @@ public class FormTransaksiTunaiController implements Initializable { | |||||
| )), | )), | ||||
| fldPramuniaga)); | fldPramuniaga)); | ||||
| if (!BarangCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { | |||||
| if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) { | |||||
| posRx.getBarangByKodeBarang(dNotaTunai.getKdBarang()).subscribe(getBarangObserver); | 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 | //SCAN BARANG | ||||
| @FXML | @FXML | ||||
| void fldScanOnKeyPressed(KeyEvent event) { | void fldScanOnKeyPressed(KeyEvent event) { | ||||
| if (event.getCode() == KeyCode.ENTER) { | 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<>() { | Observer<List<DNotaTunai>> getDNotaTunaiObserver = new Observer<>() { | ||||
| @@ -250,7 +319,7 @@ public class FormTransaksiTunaiController implements Initializable { | |||||
| @Override | @Override | ||||
| public void onNext(Barang b) { | public void onNext(Barang b) { | ||||
| BarangCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b); | |||||
| AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b); | |||||
| for (TabelBarangTunai tbt : daftarTabelTransaksi) { | for (TabelBarangTunai tbt : daftarTabelTransaksi) { | ||||
| if (tbt.getKode().equals(b.getKodeBarang())) { | if (tbt.getKode().equals(b.getKodeBarang())) { | ||||
| tbt.setNama(b.getNamaBarang()); | tbt.setNama(b.getNamaBarang()); | ||||
| @@ -258,11 +327,9 @@ public class FormTransaksiTunaiController implements Initializable { | |||||
| } | } | ||||
| }; | }; | ||||
| } | } | ||||
| @Override | @Override | ||||
| public void onError(Throwable error) { | public void onError(Throwable error) { | ||||
| System.out.println(".onError()"); | |||||
| if (error instanceof HttpException) { | if (error instanceof HttpException) { | ||||
| switch (((HttpException) error).code()) { | switch (((HttpException) error).code()) { | ||||
| case HttpURLConnection.HTTP_NOT_FOUND: | 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 | @Override | ||||
| public void onSubscribe(Disposable dspsbl) { | public void onSubscribe(Disposable dspsbl) { | ||||
| } | } | ||||
| @Override | @Override | ||||
| public void onNext(Barang b) { | 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 | @Override | ||||
| public void onError(Throwable error) { | public void onError(Throwable error) { | ||||
| System.out.println(".onError()"); | |||||
| if (error instanceof HttpException) { | if (error instanceof HttpException) { | ||||
| switch (((HttpException) error).code()) { | switch (((HttpException) error).code()) { | ||||
| case HttpURLConnection.HTTP_NOT_FOUND: | 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; | package id.amigogroup.posterminal.transaksi; | ||||
| import id.amigogroup.posterminal.model.DNotaRetur; | |||||
| import javafx.beans.property.SimpleObjectProperty; | import javafx.beans.property.SimpleObjectProperty; | ||||
| import javafx.beans.property.SimpleStringProperty; | import javafx.beans.property.SimpleStringProperty; | ||||
| import javafx.scene.control.Button; | |||||
| import javafx.scene.control.ComboBox; | |||||
| import javafx.scene.control.TextField; | import javafx.scene.control.TextField; | ||||
| /** | /** | ||||
| @@ -16,151 +15,169 @@ import javafx.scene.control.TextField; | |||||
| * @author AGNES | * @author AGNES | ||||
| */ | */ | ||||
| public class TabelBarangRetur { | 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; | package id.amigogroup.posterminal.transaksi; | ||||
| import id.amigogroup.posterminal.model.DNotaTunai; | |||||
| import javafx.beans.property.SimpleObjectProperty; | import javafx.beans.property.SimpleObjectProperty; | ||||
| import javafx.beans.property.SimpleStringProperty; | import javafx.beans.property.SimpleStringProperty; | ||||
| import javafx.scene.control.Button; | |||||
| import javafx.scene.control.ComboBox; | import javafx.scene.control.ComboBox; | ||||
| import javafx.scene.control.TextField; | import javafx.scene.control.TextField; | ||||
| @@ -26,6 +26,8 @@ public class TabelBarangTunai { | |||||
| private SimpleObjectProperty<ComboBox> cbxPromo; | private SimpleObjectProperty<ComboBox> cbxPromo; | ||||
| private SimpleStringProperty subTotal; | private SimpleStringProperty subTotal; | ||||
| private SimpleObjectProperty<TextField> fldPramuniaga; | private SimpleObjectProperty<TextField> fldPramuniaga; | ||||
| private DNotaTunai data; | |||||
| public TabelBarangTunai(String kode, String nama, String ukur, String jumlah, String harga, String disc1, | public TabelBarangTunai(String kode, String nama, String ukur, String jumlah, String harga, String disc1, | ||||
| String disc2, ComboBox cbxPromo, String subTotal, TextField fldPramuniaga) { | String disc2, ComboBox cbxPromo, String subTotal, TextField fldPramuniaga) { | ||||
| @@ -181,4 +183,18 @@ public class TabelBarangTunai { | |||||
| public void setFldPramuniaga(TextField fldPramuniaga) { | public void setFldPramuniaga(TextField fldPramuniaga) { | ||||
| this.fldPramuniaga.set(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 | * To change this template file, choose Tools | Templates | ||||
| * and open the template in the editor. | * 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.Barang; | ||||
| import id.amigogroup.posterminal.model.NoBarang; | import id.amigogroup.posterminal.model.NoBarang; | ||||
| @@ -14,17 +14,18 @@ import java.util.Map; | |||||
| * | * | ||||
| * @author ronal | * @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<>(); | 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; | return instance; | ||||
| } | } | ||||
| @@ -159,4 +159,18 @@ public class Fucout { | |||||
| .atZone(ZoneId.systemDefault()) | .atZone(ZoneId.systemDefault()) | ||||
| .toLocalDate(); | .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.GridPane?> | ||||
| <?import javafx.scene.layout.HBox?> | <?import javafx.scene.layout.HBox?> | ||||
| <?import javafx.scene.layout.RowConstraints?> | <?import javafx.scene.layout.RowConstraints?> | ||||
| <?import javafx.scene.layout.StackPane?> | |||||
| <?import javafx.scene.text.Font?> | <?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"> | <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> | <items> | ||||
| <AnchorPane> | <AnchorPane> | ||||
| <children> | <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> | ||||
| <Font size="14.0" /> | <Font size="14.0" /> | ||||
| </font> | </font> | ||||
| </Label> | </Label> | ||||
| <Label layoutX="14.0" layoutY="20.0" text="Nomor Nota Penjualan" /> | <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" /> | <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> | <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="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" /> | <TableColumn fx:id="tcKode" prefWidth="75.0" text="Kode Barang" /> | ||||
| @@ -70,7 +71,7 @@ | |||||
| <HBox alignment="CENTER_LEFT" maxWidth="1.7976931348623157E308" spacing="5.0"> | <HBox alignment="CENTER_LEFT" maxWidth="1.7976931348623157E308" spacing="5.0"> | ||||
| <children> | <children> | ||||
| <Label text="Nomor Nota" /> | <Label text="Nomor Nota" /> | ||||
| <Label text=": -"> | |||||
| <Label fx:id="lblNomorNota" text=": -"> | |||||
| <HBox.margin> | <HBox.margin> | ||||
| <Insets /> | <Insets /> | ||||
| </HBox.margin> | </HBox.margin> | ||||
| @@ -121,6 +122,15 @@ | |||||
| <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> | <TableView fx:constant="CONSTRAINED_RESIZE_POLICY" /> | ||||
| </columnResizePolicy> | </columnResizePolicy> | ||||
| </TableView> | </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> | </children> | ||||
| </AnchorPane> | </AnchorPane> | ||||
| </items> | </items> | ||||
| @@ -1,6 +1,7 @@ | |||||
| <?xml version="1.0" encoding="UTF-8"?> | <?xml version="1.0" encoding="UTF-8"?> | ||||
| <?import javafx.geometry.Insets?> | <?import javafx.geometry.Insets?> | ||||
| <?import javafx.scene.canvas.Canvas?> | |||||
| <?import javafx.scene.control.Label?> | <?import javafx.scene.control.Label?> | ||||
| <?import javafx.scene.control.Separator?> | <?import javafx.scene.control.Separator?> | ||||
| <?import javafx.scene.control.TableColumn?> | <?import javafx.scene.control.TableColumn?> | ||||
| @@ -94,6 +95,7 @@ | |||||
| </children> | </children> | ||||
| </GridPane> | </GridPane> | ||||
| <Separator layoutY="116.0" prefHeight="0.0" prefWidth="800.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="116.0" /> | <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"> | <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> | <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="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; | -fx-cursor: hand; | ||||
| } | } | ||||
| .button-navigasi-transaksi:hover{ | .button-navigasi-transaksi:hover{ | ||||
| /*-fx-background-color: #bbeeff;*/ | |||||
| -fx-background-color: | -fx-background-color: | ||||
| linear-gradient(#d5f6fd 0%, #cae0ff 49%, #cae0ff 50%, #ffffff 100%);} | linear-gradient(#d5f6fd 0%, #cae0ff 49%, #cae0ff 50%, #ffffff 100%);} | ||||
| .button-navigasi-transaksi-selected{ | .button-navigasi-transaksi-selected{ | ||||
| /*-fx-background-color: #33aaff;*/ | |||||
| -fx-background-color: | -fx-background-color: | ||||
| linear-gradient(#abf6fd 0%, #8aa6fd 49%, #8aa6dd 50%, #50a6dd 100%); | linear-gradient(#abf6fd 0%, #8aa6fd 49%, #8aa6dd 50%, #50a6dd 100%); | ||||
| } | } | ||||
| .table-drag-over{ | |||||
| -fx-background-color: lightgreen; | |||||
| } | |||||
| #header{ | #header{ | ||||
| -fx-border-style: solid; | -fx-border-style: solid; | ||||
| -fx-border-color: black; | -fx-border-color: black; | ||||