Browse Source

Fungsi Drag and Drop Retur, dan Menampilkan data No Barang di Form Tunai

* [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
Ronaldo Christnawan 5 years ago
parent
commit
e8756520aa
18 changed files with 667 additions and 230 deletions
  1. +2
    -13
      src/main/java/id/amigogroup/posterminal/FormUtamaController.java
  2. +5
    -0
      src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java
  3. +8
    -0
      src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java
  4. +12
    -8
      src/main/java/id/amigogroup/posterminal/bayar/FormBayarController.java
  5. +1
    -1
      src/main/java/id/amigogroup/posterminal/bayar/FormBayarTunaiController.java
  6. +34
    -4
      src/main/java/id/amigogroup/posterminal/model/Barang.java
  7. +34
    -0
      src/main/java/id/amigogroup/posterminal/model/DNotaRetur.java
  8. +31
    -1
      src/main/java/id/amigogroup/posterminal/model/DNotaTunai.java
  9. +20
    -27
      src/main/java/id/amigogroup/posterminal/transaksi/BarangFull.java
  10. +202
    -41
      src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java
  11. +164
    -43
      src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java
  12. +95
    -78
      src/main/java/id/amigogroup/posterminal/transaksi/TabelBarangRetur.java
  13. +17
    -1
      src/main/java/id/amigogroup/posterminal/transaksi/TabelBarangTunai.java
  14. +9
    -8
      src/main/java/id/amigogroup/posterminal/util/AmigoPosCache.java
  15. +14
    -0
      src/main/java/id/amigogroup/posterminal/util/Fucout.java
  16. +13
    -3
      src/main/resources/fxml/FormTransaksiRetur.fxml
  17. +2
    -0
      src/main/resources/fxml/FormTransaksiTunai.fxml
  18. +4
    -2
      src/main/resources/styles/pos_styles.css

+ 2
- 13
src/main/java/id/amigogroup/posterminal/FormUtamaController.java View File

@@ -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);




+ 5
- 0
src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java View File

@@ -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);


+ 8
- 0
src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java View File

@@ -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}")


+ 12
- 8
src/main/java/id/amigogroup/posterminal/bayar/FormBayarController.java View File

@@ -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());


+ 1
- 1
src/main/java/id/amigogroup/posterminal/bayar/FormBayarTunaiController.java View File

@@ -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("-");
} }


+ 34
- 4
src/main/java/id/amigogroup/posterminal/model/Barang.java View File

@@ -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();
} }

} }

+ 34
- 0
src/main/java/id/amigogroup/posterminal/model/DNotaRetur.java View File

@@ -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();


+ 31
- 1
src/main/java/id/amigogroup/posterminal/model/DNotaTunai.java View File

@@ -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();


src/main/java/id/amigogroup/posterminal/transaksi/DetailTransaksi.java → src/main/java/id/amigogroup/posterminal/transaksi/BarangFull.java View File

@@ -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;
} }
} }

+ 202
- 41
src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java View File

@@ -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();
} }
} }


+ 164
- 43
src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java View File

@@ -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() {
}
};
} }

+ 95
- 78
src/main/java/id/amigogroup/posterminal/transaksi/TabelBarangRetur.java View File

@@ -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;
} }
}
}

+ 17
- 1
src/main/java/id/amigogroup/posterminal/transaksi/TabelBarangTunai.java View File

@@ -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;
}
} }

src/main/java/id/amigogroup/posterminal/pencarian/BarangCache.java → src/main/java/id/amigogroup/posterminal/util/AmigoPosCache.java View File

@@ -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;
} }

+ 14
- 0
src/main/java/id/amigogroup/posterminal/util/Fucout.java View File

@@ -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 "";
}
} }

+ 13
- 3
src/main/resources/fxml/FormTransaksiRetur.fxml View File

@@ -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>


+ 2
- 0
src/main/resources/fxml/FormTransaksiTunai.fxml View File

@@ -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" />


+ 4
- 2
src/main/resources/styles/pos_styles.css View File

@@ -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;


Loading…
Cancel
Save