Przeglądaj źródła

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 lat temu
rodzic
commit
e8756520aa
18 zmienionych plików z 667 dodań i 230 usunięć
  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 Wyświetl plik

@@ -1,11 +1,7 @@
package id.amigogroup.posterminal;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import id.amigogroup.posterminal.api.AmigoPosRx;
import id.amigogroup.posterminal.model.Barang;
import id.amigogroup.posterminal.model.MNotaRetur;
import id.amigogroup.posterminal.model.MNotaTunai;
import id.amigogroup.posterminal.model.Pelanggan;
import id.amigogroup.posterminal.pencarian.DialogCariBarangController;
import id.amigogroup.posterminal.pencarian.DialogCariNotaTundaController;
@@ -17,7 +13,6 @@ import id.amigogroup.posterminal.transaksi.FormTransaksiReturController;
import id.amigogroup.posterminal.transaksi.FormTransaksiTunaiController;
import id.amigogroup.posterminal.util.AlertUtil;
import id.amigogroup.posterminal.util.Fucout;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import java.io.IOException;
@@ -171,17 +166,13 @@ public class FormUtamaController implements Initializable {
loader.setLocation(getClass().getResource("/fxml/FormTransaksiTunai.fxml"));
node = loader.load();
FormTransaksiTunaiController fttc = loader.getController();
if (!baru) {
fttc.initData(noNota);
}
fttc.initData(noNota,baru);
break;
case FormConstanta.TRANSAKSI_RETUR:
loader.setLocation(getClass().getResource("/fxml/FormTransaksiRetur.fxml"));
node = loader.load();
FormTransaksiReturController ftrc = loader.getController();
if (!baru) {
// ftrc.initData(noNota);
}
ftrc.initData(noNota,baru);
break;

}
@@ -240,7 +231,6 @@ public class FormUtamaController implements Initializable {
dialogCariBarang.initOwner(bpMain.getScene().getWindow());

Optional<Barang> result = dialogCariBarang.showAndWait();
System.out.println(result);
};
listShortcuts.put(kcCariBarang, rnCariBarang);

@@ -256,7 +246,6 @@ public class FormUtamaController implements Initializable {
updateLabelPelanggan(result.get());
updateLabelMemberNonMember();
}
System.out.println(result);
};
listShortcuts.put(kcCariPelanggan, rnCariPelanggan);



+ 5
- 0
src/main/java/id/amigogroup/posterminal/api/AmigoPosRx.java Wyświetl plik

@@ -11,6 +11,7 @@ import id.amigogroup.posterminal.model.Karyawan;
import id.amigogroup.posterminal.model.Pagination;
import id.amigogroup.posterminal.model.MNotaRetur;
import id.amigogroup.posterminal.model.MNotaTunai;
import id.amigogroup.posterminal.model.NoBarang;
import id.amigogroup.posterminal.model.Pelanggan;
import id.amigogroup.posterminal.model.Tas;
import io.reactivex.Observable;
@@ -31,6 +32,10 @@ public class AmigoPosRx {
public Observable<Pagination<Barang>> getBarangByNamaBarang(String namaBarang){
return UtilsApi.getServiceApiBarang().getBarangByNamaBarang(namaBarang);
}
public Observable<NoBarang> getNoBarangByIdGabunganNomor(String idGabungan, String nomor) {
return UtilsApi.getServiceApiBarang().getByIdGabunganNomor(idGabungan, nomor);
}

public Observable<MNotaTunai> getMNotaTunaiByNoNota(String noNota) {
return UtilsApi.getServiceApiBarang().getMNotaTunaiByNoNota(noNota);


+ 8
- 0
src/main/java/id/amigogroup/posterminal/api/ServiceApiBarang.java Wyświetl plik

@@ -9,6 +9,7 @@ import id.amigogroup.posterminal.model.Barang;
import id.amigogroup.posterminal.model.DNotaTunai;
import id.amigogroup.posterminal.model.MNotaRetur;
import id.amigogroup.posterminal.model.MNotaTunai;
import id.amigogroup.posterminal.model.NoBarang;
import id.amigogroup.posterminal.model.Pagination;
import io.reactivex.Observable;
import java.util.List;
@@ -25,6 +26,13 @@ public interface ServiceApiBarang {
@GET("barangs/kode/{kode}")
Observable<Barang> getBarangByKodeBarang(@Path("kode") String kode);
//NO-BARANG
//Mengambil No Barang by Id Gabungan & Ukuran
@GET("no-barangs/id-gabungan/{idGabungan}/nomor/{nomor}")
Observable<NoBarang> getByIdGabunganNomor(
@Path("idGabungan") String idGabungan,
@Path("nomor") String nomor);
//M-NOTA-TUNAI
//Mengambil Master Nota Tunai by No Nota
@GET("m-nota-tunai/no-nota/{noNota}")


+ 12
- 8
src/main/java/id/amigogroup/posterminal/bayar/FormBayarController.java Wyświetl plik

@@ -121,10 +121,11 @@ public class FormBayarController implements Initializable, BayarInterface {
loader.setLocation(getClass().getResource("/fxml/FormBayarTunai.fxml"));
node = loader.load();

FormBayarTunaiController fbtc = loader.getController();
fbtc.initData(this);
vbContent.getChildren().add(node);
bayarContent.setNodeTunai(node);

FormBayarTunaiController fbtc = loader.getController();
fbtc.initData(this);
} else {
if (bayarContent.getNodeTunai() != null) {
vbContent.getChildren().remove(bayarContent.getNodeTunai());
@@ -139,10 +140,11 @@ public class FormBayarController implements Initializable, BayarInterface {
loader.setLocation(getClass().getResource("/fxml/FormBayarKartu.fxml"));
node = loader.load();

FormBayarKartuController fbkc = loader.getController();
fbkc.initData(this);
vbContent.getChildren().add(node);
bayarContent.setNodeKartu(node);

FormBayarKartuController fbkc = loader.getController();
fbkc.initData(this);
} else {
if (bayarContent.getNodeKartu() != null) {
vbContent.getChildren().remove(bayarContent.getNodeKartu());
@@ -156,11 +158,12 @@ public class FormBayarController implements Initializable, BayarInterface {
if (bayarContent.getNodeRetur() == null && chkSource.selectedProperty().get()) {
loader.setLocation(getClass().getResource("/fxml/FormBayarRetur.fxml"));
node = loader.load();

vbContent.getChildren().add(node);
bayarContent.setNodeRetur(node);
FormBayarReturController fbrc = loader.getController();
fbrc.initData(this);
vbContent.getChildren().add(node);
bayarContent.setNodeRetur(node);
} else {
if (bayarContent.getNodeRetur() != null) {
vbContent.getChildren().remove(bayarContent.getNodeRetur());
@@ -194,11 +197,12 @@ public class FormBayarController implements Initializable, BayarInterface {
if (bayarContent.getNodePoin() == null && chkSource.selectedProperty().get()) {
loader.setLocation(getClass().getResource("/fxml/FormBayarPoin.fxml"));
node = loader.load();

vbContent.getChildren().add(node);
bayarContent.setNodePoin(node);
FormBayarPoinController fbpc = loader.getController();
fbpc.initData(this);
vbContent.getChildren().add(node);
bayarContent.setNodePoin(node);
} else {
if (bayarContent.getNodePoin() != null) {
vbContent.getChildren().remove(bayarContent.getNodePoin());


+ 1
- 1
src/main/java/id/amigogroup/posterminal/bayar/FormBayarTunaiController.java Wyświetl plik

@@ -60,7 +60,7 @@ public class FormBayarTunaiController implements Initializable {
< parent.getBayarContent().getTotalBayar()) {
int kembali = parent.getBayarContent().getTotalBayar()
- parent.getBayarContent().getTotalPerluBayar();
lblKembalian.setText(Fucout.formatRibuan(kembali));
lblKembalian.setText(Fucout.getText(Fucout.formatRibuan(kembali)));
} else {
lblKembalian.setText("-");
}


+ 34
- 4
src/main/java/id/amigogroup/posterminal/model/Barang.java Wyświetl plik

@@ -1,4 +1,3 @@

package id.amigogroup.posterminal.model;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
@@ -51,10 +50,28 @@ public class Barang {
private String kedProduk;
@JsonProperty("kode_merk")
private String kodeMerk;
private String nomor;
private String noBarang;

public Barang() {
}

public Barang(Barang b) {
this.kodeBarang = b.kodeBarang;
this.kodeLama = b.kodeLama;
this.namaBarang = b.namaBarang;
this.kodeToko = b.kodeToko;
this.kelompok = b.kelompok;
this.tahun = b.tahun;
this.bulan = b.bulan;
this.idGabungan = b.idGabungan;
this.kodeStrip = b.kodeStrip;
this.kodeSupplier = b.kodeSupplier;
this.kedProduk = b.kedProduk;
this.kodeMerk = b.kodeMerk;
}
@JsonProperty("kode_barang")
public String getKodeBarang() {
return kodeBarang;
@@ -175,6 +192,20 @@ public class Barang {
this.kodeMerk = kodeMerk;
}

/**
* @return the nomor
*/
public String getNomor() {
return nomor;
}

/**
* @param nomor the nomor to set
*/
public void setNomor(String nomor) {
this.nomor = nomor;
}

@Override
public String toString() {
return new ToStringBuilder(this).append("kodeBarang", kodeBarang).append("kodeLama", kodeLama).append("namaBarang", namaBarang).append("kodeToko", kodeToko).append("kelompok", kelompok).append("tahun", tahun).append("bulan", bulan).append("idGabungan", idGabungan).append("kodeStrip", kodeStrip).append("kodeSupplier", kodeSupplier).append("kedProduk", kedProduk).append("kodeMerk", kodeMerk).toString();
@@ -196,5 +227,4 @@ public class Barang {
Barang rhs = ((Barang) other);
return new EqualsBuilder().append(tahun, rhs.tahun).append(kodeLama, rhs.kodeLama).append(idGabungan, rhs.idGabungan).append(kodeToko, rhs.kodeToko).append(kedProduk, rhs.kedProduk).append(namaBarang, rhs.namaBarang).append(kelompok, rhs.kelompok).append(kodeBarang, rhs.kodeBarang).append(bulan, rhs.bulan).append(kodeStrip, rhs.kodeStrip).append(kodeSupplier, rhs.kodeSupplier).append(kodeMerk, rhs.kodeMerk).isEquals();
}

}

+ 34
- 0
src/main/java/id/amigogroup/posterminal/model/DNotaRetur.java Wyświetl plik

@@ -50,6 +50,26 @@ public class DNotaRetur {
@JsonProperty("bonus")
private double bonus;

private Barang barang;
public DNotaRetur(){
}
public DNotaRetur(String noNota, DNotaTunai dNotaTunai) {
this.noNota = noNota;
this.kdBarang = dNotaTunai.getKdBarang();
this.noBarang = dNotaTunai.getNoBarang();
this.jumlah = 1;
this.diskon = dNotaTunai.getDiskon();
this.diskon2 = dNotaTunai.getDiskon2();
this.hargaJual = dNotaTunai.getHargaJual();
this.hargaPokok = dNotaTunai.getHargaPokok();
this.noNotaTunai = dNotaTunai.getNoNota();
this.bonus = dNotaTunai.getBonus();
this.barang = dNotaTunai.getBarang();
}

@JsonProperty("id")
public int getId() {
return id;
@@ -170,6 +190,20 @@ public class DNotaRetur {
this.bonus = bonus;
}

/**
* @return the barang
*/
public Barang getBarang() {
return barang;
}

/**
* @param barang the barang to set
*/
public void setBarang(Barang barang) {
this.barang = barang;
}

@Override
public String toString() {
return new ToStringBuilder(this).append("id", id).append("noNota", noNota).append("kdBarang", kdBarang).append("noBarang", noBarang).append("jumlah", jumlah).append("diskon", diskon).append("diskon2", diskon2).append("hargaJual", hargaJual).append("hargaPokok", hargaPokok).append("kodePram", kodePram).append("noNotaTunai", noNotaTunai).append("bonus", bonus).toString();


+ 31
- 1
src/main/java/id/amigogroup/posterminal/model/DNotaTunai.java Wyświetl plik

@@ -1,4 +1,3 @@

package id.amigogroup.posterminal.model;

import com.fasterxml.jackson.annotation.JsonInclude;
@@ -47,6 +46,23 @@ public class DNotaTunai {
@JsonProperty("bonus")
private int bonus;

private Barang barang;

public DNotaTunai(String noNota, String kdBarang, String noBarang,
int jumlah, int diskon, int diskon2, int hargaJual, String hargaPokok,
String kodePram, int bonus) {
this.noNota = noNota;
this.kdBarang = kdBarang;
this.noBarang = noBarang;
this.jumlah = jumlah;
this.diskon = diskon;
this.diskon2 = diskon2;
this.hargaJual = hargaJual;
this.hargaPokok = hargaPokok;
this.kodePram = kodePram;
this.bonus = bonus;
}

@JsonProperty("id")
public int getId() {
return id;
@@ -157,6 +173,20 @@ public class DNotaTunai {
this.bonus = bonus;
}

/**
* @return the barang
*/
public Barang getBarang() {
return barang;
}

/**
* @param barang the barang to set
*/
public void setBarang(Barang barang) {
this.barang = barang;
}

@Override
public String toString() {
return new ToStringBuilder(this).append("id", id).append("noNota", noNota).append("kdBarang", kdBarang).append("noBarang", noBarang).append("jumlah", jumlah).append("diskon", diskon).append("diskon2", diskon2).append("hargaJual", hargaJual).append("hargaPokok", hargaPokok).append("kodePram", kodePram).append("bonus", bonus).toString();


src/main/java/id/amigogroup/posterminal/transaksi/DetailTransaksi.java → src/main/java/id/amigogroup/posterminal/transaksi/BarangFull.java Wyświetl plik

@@ -6,55 +6,48 @@
package id.amigogroup.posterminal.transaksi;

import id.amigogroup.posterminal.model.Barang;
import id.amigogroup.posterminal.model.NoBarang;

/**
*
* @author ronal
*/
public class DetailTransaksi<T,U> {
private T masterNota;
private U detailNota;
public class BarangFull {
private Barang barang;
private NoBarang noBarang;

/**
* @return the masterNota
*/
public T getMasterNota() {
return masterNota;
}

/**
* @param masterNota the masterNota to set
*/
public void setMasterNota(T masterNota) {
this.masterNota = masterNota;
public BarangFull(Barang barang, NoBarang noBarang) {
this.barang = barang;
this.noBarang = noBarang;
}

/**
* @return the detailNota
* @return the barang
*/
public U getDetailNota() {
return detailNota;
public Barang getBarang() {
return barang;
}

/**
* @param detailNota the detailNota to set
* @param barang the barang to set
*/
public void setDetailNota(U detailNota) {
this.detailNota = detailNota;
public void setBarang(Barang barang) {
this.barang = barang;
}

/**
* @return the barang
* @return the noBarang
*/
public Barang getBarang() {
return barang;
public NoBarang getNoBarang() {
return noBarang;
}

/**
* @param barang the barang to set
* @param noBarang the noBarang to set
*/
public void setBarang(Barang barang) {
this.barang = barang;
public void setNoBarang(NoBarang noBarang) {
this.noBarang = noBarang;
}
}

+ 202
- 41
src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiReturController.java Wyświetl plik

@@ -8,8 +8,9 @@ package id.amigogroup.posterminal.transaksi;
import id.amigogroup.posterminal.FormUtamaController;
import id.amigogroup.posterminal.api.AmigoPosRx;
import id.amigogroup.posterminal.model.Barang;
import id.amigogroup.posterminal.model.DNotaRetur;
import id.amigogroup.posterminal.model.DNotaTunai;
import id.amigogroup.posterminal.pencarian.BarangCache;
import id.amigogroup.posterminal.util.AmigoPosCache;
import id.amigogroup.posterminal.util.AlertUtil;
import id.amigogroup.posterminal.util.Fucout;
import io.reactivex.Observer;
@@ -17,7 +18,6 @@ import io.reactivex.disposables.Disposable;
import java.net.HttpURLConnection;
import java.net.SocketTimeoutException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.ResourceBundle;
import java.util.logging.Level;
@@ -34,9 +34,15 @@ import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;
import javafx.scene.input.ClipboardContent;
import javafx.scene.input.DragEvent;
import javafx.scene.input.Dragboard;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.input.MouseEvent;
import javafx.scene.input.TransferMode;
import javafx.scene.layout.AnchorPane;
import javafx.scene.layout.StackPane;
import retrofit2.HttpException;

/**
@@ -72,33 +78,40 @@ public class FormTransaksiReturController implements Initializable {
private TableColumn<TabelBarangTunai, String> tcSubTotal;
@FXML
private TableColumn<TabelBarangTunai, TextField> tcPramuniaga;
@FXML
private Label lblNomorNota;
@FXML
private TableView<TabelBarangRetur> tbvRetur;
@FXML
private TableColumn<TabelBarangRetur, Integer> tcNoRetur;
@FXML
private TableColumn<TabelBarangRetur, String> tcKodeRetur;
@FXML
private TableColumn<TabelBarangRetur, String> tcNamaRetur;
@FXML
private TableColumn<TabelBarangRetur, String> tcUkurRetur;
@FXML
private TableColumn<TabelBarangRetur, String> tcJumlahRetur;
@FXML
private TableColumn<TabelBarangRetur, String> tcHargaRetur;
@FXML
private TableColumn<TabelBarangRetur, String> tcDisc1Retur;
@FXML
private TableColumn<TabelBarangRetur, String> tcDisc2Retur;
@FXML
private TableColumn<TabelBarangRetur, String> tcSubTotalRetur;
@FXML
private TableColumn<TabelBarangRetur, TextField> tcPramuniagaRetur;
@FXML
private StackPane stpReturDrop;
@FXML
private Label lblTambahKeTabelRetur;

// @FXML
// private TableView<?> tbvRetur;
// @FXML
// private TableColumn<?, ?> tcNoRetur;
// @FXML
// private TableColumn<?, ?> tcKodeRetur;
// @FXML
// private TableColumn<?, ?> tcNamaRetur;
// @FXML
// private TableColumn<?, ?> tcUkurRetur;
// @FXML
// private TableColumn<?, ?> tcJumlahRetur;
// @FXML
// private TableColumn<?, ?> tcHargaRetur;
// @FXML
// private TableColumn<?, ?> tcDisc1Retur;
// @FXML
// private TableColumn<?, ?> tcDisc2Retur;
// @FXML
// private TableColumn<?, ?> tcSubtotalRetur;
// @FXML
// private TableColumn<?, ?> tcPramuniagaRetur;
private final AmigoPosRx posRx = new AmigoPosRx();
private String noNota = "";
private final ObservableList<TabelBarangTunai> daftarTabelPenjualan = FXCollections.observableArrayList();
private List<DetailTransaksi> daftarDetailTransaksi = new ArrayList<>();
private final ObservableList<TabelBarangRetur> daftarTabelRetur = FXCollections.observableArrayList();
private TabelBarangTunai draggedTabelBarangTunai = null;

/**
* Initializes the controller class.
@@ -118,33 +131,47 @@ public class FormTransaksiReturController implements Initializable {
tcSubTotal.setCellValueFactory(new PropertyValueFactory<>("subTotal"));
tcPramuniaga.setCellValueFactory(new PropertyValueFactory<>("fldPramuniaga"));
tbvPenjualan.setItems(daftarTabelPenjualan);

tcNoRetur.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangRetur, Integer> cell) -> {
return new ReadOnlyObjectWrapper(tbvRetur.getItems().indexOf(cell.getValue()) + 1);
});
tcKodeRetur.setCellValueFactory(new PropertyValueFactory<>("kode"));
tcNamaRetur.setCellValueFactory(new PropertyValueFactory<>("nama"));
tcUkurRetur.setCellValueFactory(new PropertyValueFactory<>("ukur"));
tcJumlahRetur.setCellValueFactory(new PropertyValueFactory<>("jumlah"));
tcHargaRetur.setCellValueFactory(new PropertyValueFactory<>("harga"));
tcDisc1Retur.setCellValueFactory(new PropertyValueFactory<>("disc1"));
tcDisc2Retur.setCellValueFactory(new PropertyValueFactory<>("disc2"));
tcSubTotalRetur.setCellValueFactory(new PropertyValueFactory<>("subTotal"));
tcPramuniagaRetur.setCellValueFactory(new PropertyValueFactory<>("fldPramuniaga"));
tbvRetur.setItems(daftarTabelRetur);

Platform.runLater(() -> {
fldNotaPenjualan.requestFocus();
});
}

private void mapCurrentDataToDetailTransaksi() {

public void initData(String noNota, boolean baru) {
this.noNota = noNota;
lblNomorNota.setText(Fucout.getTextColon(noNota));
}

int count = 0;

@FXML
Label lbl;

private void refreshData(List<DNotaTunai> daftarNotaTunai) {
daftarTabelPenjualan.clear();
daftarTabelRetur.clear();

for (DNotaTunai dNotaTunai : daftarNotaTunai) {
TextField fldPramuniaga = new TextField(dNotaTunai.getKodePram());

String namaBarang = "...";
if (BarangCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
namaBarang = Fucout.getText(BarangCache.getInstance().getDaftarBarang()
.get(dNotaTunai.getKdBarang()).getNamaBarang());
if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
Barang barang = AmigoPosCache.getInstance().getDaftarBarang()
.get(dNotaTunai.getKdBarang());
namaBarang = Fucout.getText(barang.getNamaBarang());
dNotaTunai.setBarang(barang);
}

daftarTabelPenjualan.add(new TabelBarangTunai(
TabelBarangTunai tbt = new TabelBarangTunai(
Fucout.getText(dNotaTunai.getKdBarang()),
namaBarang,
Fucout.getText(dNotaTunai.getNoBarang()),
@@ -156,9 +183,11 @@ public class FormTransaksiReturController implements Initializable {
Fucout.getText(Fucout.formatRibuan(
dNotaTunai.getHargaJual() * dNotaTunai.getJumlah()
)),
fldPramuniaga));
fldPramuniaga);
tbt.setData(dNotaTunai);
daftarTabelPenjualan.add(tbt);

if (!BarangCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
posRx.getBarangByKodeBarang(dNotaTunai.getKdBarang()).subscribe(getBarangObserver);
}
}
@@ -171,6 +200,135 @@ public class FormTransaksiReturController implements Initializable {
}
}

@FXML
void tbvPenjualanOnDragDetected(MouseEvent event) {
Dragboard db = tbvPenjualan.startDragAndDrop(TransferMode.COPY);

if (tbvPenjualan.getSelectionModel().getSelectedItem() != null) {
stpReturDrop.setVisible(true);
ClipboardContent content = new ClipboardContent();
content.putString(tbvPenjualan.getSelectionModel().getSelectedItem().getNama());
db.setContent(content);
draggedTabelBarangTunai = tbvPenjualan.getSelectionModel().getSelectedItem();
}
event.consume();
}

@FXML
void stpReturDropOnDragOver(DragEvent event) {
if (event.getGestureSource() != tbvRetur
&& event.getDragboard().hasString()) {
event.acceptTransferModes(TransferMode.COPY);
}

event.consume();
}

@FXML
void stpReturDropOnDragEntered(DragEvent event) {
if (event.getGestureSource() != stpReturDrop
&& event.getDragboard().hasString()) {
lblTambahKeTabelRetur.setText("Tambah Barang " + event.getDragboard().getString() + " ke Nota Retur");
lblTambahKeTabelRetur.setVisible(true);
if (!stpReturDrop.getStyleClass().contains("table-drag-over")) {
stpReturDrop.getStyleClass().add("table-drag-over");
}
}

event.consume();
}

@FXML
void stpReturDropOnDragExited(DragEvent event) {
lblTambahKeTabelRetur.setVisible(false);
if (stpReturDrop.getStyleClass().contains("table-drag-over")) {
lblTambahKeTabelRetur.setText("Tambah Barang ke Nota Retur");
stpReturDrop.getStyleClass().remove("table-drag-over");
}

event.consume();
}

@FXML
void stpReturDropOnDragDropped(DragEvent event) {
/* data dropped
* if there is a string data on dragboard, read it and use it */
Dragboard db = event.getDragboard();
boolean success = false;
if (db.hasString()) {
}

if (draggedTabelBarangTunai != null) {
boolean ada = false;
for (TabelBarangRetur tbr : daftarTabelRetur) {
if (tbr.getData() != null && draggedTabelBarangTunai.getData() != null) {
DNotaRetur dNotaRetur = tbr.getData();
DNotaTunai dNotaTunai = draggedTabelBarangTunai.getData();

if (dNotaRetur.getKdBarang().equals(dNotaTunai.getKdBarang())
&& dNotaRetur.getNoBarang().equals(dNotaTunai.getNoBarang())) {
if ((dNotaRetur.getJumlah() + 1) <= dNotaTunai.getJumlah()) {
dNotaRetur.setJumlah(dNotaRetur.getJumlah() + 1);
tbr.setJumlah(Fucout.getText(String.valueOf(dNotaRetur.getJumlah())));
tbr.setSubTotal(Fucout.getText(Fucout.formatRibuan(
dNotaRetur.getJumlah() * dNotaRetur.getHargaJual()
)));
tbvRetur.refresh();
} else{
Alert alert = AlertUtil.getAlertError(
"Jumlah Barang Kurang",
"Barang di Nota Penjualan yang di-Retur sudah mencapai jumlah yang ada.");
alert.initOwner(apMain.getScene().getWindow());
alert.show();
}
ada = true;
break;
}
}
}
success = true;

if (!ada) {
TextField fldPramuniaga = new TextField();

DNotaRetur dNotaRetur = new DNotaRetur(noNota, draggedTabelBarangTunai.getData());
TabelBarangRetur tbr = new TabelBarangRetur(
draggedTabelBarangTunai.getKode(),
draggedTabelBarangTunai.getNama(),
draggedTabelBarangTunai.getUkur(),
Fucout.getText(String.valueOf(dNotaRetur.getJumlah())),
draggedTabelBarangTunai.getHarga(),
draggedTabelBarangTunai.getDisc1(),
draggedTabelBarangTunai.getDisc2(),
Fucout.getText(Fucout.formatRibuan(
dNotaRetur.getJumlah() * dNotaRetur.getHargaJual()
)),
fldPramuniaga);
tbr.setData(dNotaRetur);

daftarTabelRetur.add(tbr);
}
}

/* let the source know whether the string was successfully
* transferred and used */
event.setDropCompleted(success);

event.consume();
}

@FXML
void tbvPenjualanOnDragDone(DragEvent event) {
/* the drag and drop gesture ended
* if the data was successfully moved, clear it */
stpReturDrop.setVisible(false);
// if (event.getTransferMode() == TransferMode.MOVE) {
// }
event.consume();
}

Observer<List<DNotaTunai>> getDNotaTunaiObserver = new Observer<>() {
@Override
public void onSubscribe(Disposable dspsbl) {
@@ -178,6 +336,7 @@ public class FormTransaksiReturController implements Initializable {

@Override
public void onNext(List<DNotaTunai> daftarDNotaTunai) {
fldNotaPenjualan.clear();
refreshData(daftarDNotaTunai);
}

@@ -228,10 +387,12 @@ public class FormTransaksiReturController implements Initializable {

@Override
public void onNext(Barang b) {
BarangCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b);
AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b);
for (TabelBarangTunai tbt : tbvPenjualan.getItems()) {
if (tbt.getKode().equals(b.getKodeBarang())) {
if (tbt.getData().getKdBarang().equals(b.getKodeBarang())) {
tbt.setNama(b.getNamaBarang());

tbt.getData().setBarang(b);
tbvPenjualan.refresh();
}
}


+ 164
- 43
src/main/java/id/amigogroup/posterminal/transaksi/FormTransaksiTunaiController.java Wyświetl plik

@@ -9,9 +9,11 @@ import id.amigogroup.posterminal.FormUtamaController;
import id.amigogroup.posterminal.api.AmigoPosRx;
import id.amigogroup.posterminal.model.Barang;
import id.amigogroup.posterminal.model.DNotaTunai;
import id.amigogroup.posterminal.pencarian.BarangCache;
import id.amigogroup.posterminal.model.NoBarang;
import id.amigogroup.posterminal.util.AmigoPosCache;
import id.amigogroup.posterminal.util.AlertUtil;
import id.amigogroup.posterminal.util.Fucout;
import io.reactivex.Observable;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import java.net.HttpURLConnection;
@@ -83,6 +85,7 @@ public class FormTransaksiTunaiController implements Initializable {
@FXML
private Text lblGrandTotal;

private String noNota = "";
private AmigoPosRx posRx = new AmigoPosRx();

/**
@@ -90,6 +93,8 @@ public class FormTransaksiTunaiController implements Initializable {
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
fldScan.requestFocus();
tcNo.setCellValueFactory((TableColumn.CellDataFeatures<TabelBarangTunai, Integer> cell) -> {
return new ReadOnlyObjectWrapper(tbvTransaksi.getItems().indexOf(cell.getValue()) + 1);
});
@@ -108,19 +113,21 @@ public class FormTransaksiTunaiController implements Initializable {
// fillTable(new ArrayList<>());
}

public void initData(String noNota) {
posRx.getDNotaTunaiByNoNota(noNota).subscribe(getDNotaTunaiObserver);
public void initData(String noNota, boolean baru) {
if (!baru) {
posRx.getDNotaTunaiByNoNota(noNota).subscribe(getDNotaTunaiObserver);
}
this.noNota = noNota;
lblNoNota.setText(Fucout.getTextColon(noNota));
setTanggal();
}

public void setTanggal(){
public void setTanggal() {
java.util.Date skrg = new java.util.Date();
java.text.SimpleDateFormat kal = new
java.text.SimpleDateFormat("dd/MM/yyyy");
java.text.SimpleDateFormat kal = new java.text.SimpleDateFormat("dd/MM/yyyy");
txtTanggal.setText(kal.format(skrg));
}
private void refreshData(List<DNotaTunai> daftarNotaTunai) {
daftarTabelTransaksi.clear();

@@ -137,8 +144,8 @@ public class FormTransaksiTunaiController implements Initializable {
});

String namaBarang = "...";
if (BarangCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
namaBarang = Fucout.getText(BarangCache.getInstance().getDaftarBarang()
if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
namaBarang = Fucout.getText(AmigoPosCache.getInstance().getDaftarBarang()
.get(dNotaTunai.getKdBarang()).getNamaBarang());
}

@@ -156,41 +163,103 @@ public class FormTransaksiTunaiController implements Initializable {
)),
fldPramuniaga));

if (!BarangCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
if (!AmigoPosCache.getInstance().getDaftarBarang().containsKey(dNotaTunai.getKdBarang())) {
posRx.getBarangByKodeBarang(dNotaTunai.getKdBarang()).subscribe(getBarangObserver);
}
}
}
public void addToTable(Barang barang, String ukur, String jumlah){
String[] promo = {"Ulang Tahun", "Harbolnas", "Ultah Amigo"};
ComboBox<String> cbxPromo = new ComboBox<>(FXCollections.observableArrayList(promo));
cbxPromo.getSelectionModel().select("Ulang Tahun");
TextField fldPramuniaga = new TextField();
fldPramuniaga.setOnKeyPressed((t) -> {
if (t.getCode() == KeyCode.ENTER) {
fldScan.requestFocus();

public void addToTable(Barang barang, NoBarang noBarang, int jumlah) {
if (barang != null && noBarang != null) {

if (noBarang.getStokOperasional() >= jumlah) {
boolean ada = false;
for (TabelBarangTunai tbt : daftarTabelTransaksi) {
if (tbt.getKode().equals(barang.getKodeBarang()) && tbt.getUkur().equals(noBarang.getNomor())) {
noBarang.setStokOperasional(noBarang.getStokOperasional() - jumlah);

tbt.getData().setJumlah(tbt.getData().getJumlah() + jumlah);
tbt.setJumlah(String.valueOf(tbt.getData().getJumlah()));
tbvTransaksi.refresh();
ada = true;
break;
}
}

if (!ada) {
String[] promo = {"Ulang Tahun", "Harbolnas", "Ultah Amigo"};
ComboBox<String> cbxPromo = new ComboBox<>(FXCollections.observableArrayList(promo));
cbxPromo.getSelectionModel().select("Ulang Tahun");
TextField fldPramuniaga = new TextField();
fldPramuniaga.setOnKeyPressed((t) -> {
if (t.getCode() == KeyCode.ENTER) {
fldScan.requestFocus();
}
});

DNotaTunai dNotaTunai = new DNotaTunai(
noNota,
barang.getKodeBarang(),
barang.getNamaBarang(),
jumlah,
0,
0,
noBarang.getHargaJual(),
noBarang.getHargaPokok(),
"",
0);
TabelBarangTunai tbt = new TabelBarangTunai(
Fucout.getText(barang.getKodeBarang()),
Fucout.getText(barang.getNamaBarang()),
Fucout.getText(noBarang.getNomor()),
String.valueOf(jumlah),
Fucout.getText(Fucout.formatRibuan(noBarang.getHargaJual())),
"...",
"...",
cbxPromo,
Fucout.getText(Fucout.formatRibuan(
jumlah * noBarang.getHargaJual())
),
fldPramuniaga);
tbt.setData(dNotaTunai);

daftarTabelTransaksi.add(tbt);
}
}
});
daftarTabelTransaksi.add(new TabelBarangTunai(
Fucout.getText(barang.getKodeBarang()),
Fucout.getText(barang.getNamaBarang()),
Fucout.getText(ukur),
Fucout.getText("1"),
"...",
"...",
"...",
cbxPromo,
"...",
fldPramuniaga));
}
}
}

//SCAN BARANG
@FXML
void fldScanOnKeyPressed(KeyEvent event) {
if (event.getCode() == KeyCode.ENTER) {
posRx.getBarangByKodeBarang(fldScan.getText()).subscribe(getBarangBaruObserver);
String kodeFull = fldScan.getText();
String kodeBarang = Fucout.getKodeBarangFromKodeFull(kodeFull);
String ukur = Fucout.getNomorBarangFromKodeFull(kodeFull);

if (AmigoPosCache.getInstance().getDaftarBarang().containsKey(kodeBarang)) {
Barang barang = AmigoPosCache.getInstance().getDaftarBarang().get(kodeBarang);

if (AmigoPosCache.getInstance().getDaftarNoBarang().containsKey(
barang.getIdGabungan() + ukur)) {
NoBarang noBarang = AmigoPosCache.getInstance().getDaftarNoBarang()
.get(barang.getIdGabungan() + ukur);

addToTable(barang, noBarang, 1);
} else {
Observable.zip(posRx.getBarangByKodeBarang(kodeBarang),
posRx.getNoBarangByIdGabunganNomor(barang.getIdGabungan(), ukur),
(b, nB) -> new BarangFull(b, nB)).subscribe(getBarangFullGetNoBarangFromBarangObserver);
}
}
Observable.zip(posRx.getBarangByKodeBarang(kodeBarang),
Observable.just(ukur),
(barang, nomor) -> {
barang.setNomor(nomor);
return barang;
}).subscribe(getTambahBarangObserver);
}

}

Observer<List<DNotaTunai>> getDNotaTunaiObserver = new Observer<>() {
@@ -250,7 +319,7 @@ public class FormTransaksiTunaiController implements Initializable {

@Override
public void onNext(Barang b) {
BarangCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b);
AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b);
for (TabelBarangTunai tbt : daftarTabelTransaksi) {
if (tbt.getKode().equals(b.getKodeBarang())) {
tbt.setNama(b.getNamaBarang());
@@ -258,11 +327,9 @@ public class FormTransaksiTunaiController implements Initializable {
}
};
}

@Override
public void onError(Throwable error) {
System.out.println(".onError()");
if (error instanceof HttpException) {
switch (((HttpException) error).code()) {
case HttpURLConnection.HTTP_NOT_FOUND:
@@ -294,22 +361,33 @@ public class FormTransaksiTunaiController implements Initializable {
}

};
Observer<Barang> getBarangBaruObserver = new Observer<>() {
Observer<Barang> getTambahBarangObserver = new Observer<>() {
@Override
public void onSubscribe(Disposable dspsbl) {
}

@Override
public void onNext(Barang b) {
BarangCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), b);
addToTable(b, "XL", "1");
Barang bClone = new Barang(b);

bClone.setNomor(null);
AmigoPosCache.getInstance().getDaftarBarang().put(b.getKodeBarang(), bClone);

if (b.getNomor() != null && !b.getNomor().equals("")) {
if (!AmigoPosCache.getInstance().getDaftarNoBarang().containsKey(
b.getIdGabungan() + b.getNomor())) {
Observable.zip(
Observable.just(b),
posRx.getNoBarangByIdGabunganNomor(b.getIdGabungan(), b.getNomor()),
(barang, noBarang) -> new BarangFull(barang, noBarang))
.subscribe(getBarangFullGetNoBarangFromBarangObserver);
}
}
}

@Override
public void onError(Throwable error) {
System.out.println(".onError()");
if (error instanceof HttpException) {
switch (((HttpException) error).code()) {
case HttpURLConnection.HTTP_NOT_FOUND:
@@ -341,4 +419,47 @@ public class FormTransaksiTunaiController implements Initializable {
}

};

Observer<BarangFull> getBarangFullGetNoBarangFromBarangObserver = new Observer<>() {
@Override
public void onSubscribe(Disposable dspsbl) {
}

@Override
public void onNext(BarangFull bf) {
addToTable(bf.getBarang(), bf.getNoBarang(), 1);
}

@Override
public void onError(Throwable error) {
if (error instanceof HttpException) {
switch (((HttpException) error).code()) {
case HttpURLConnection.HTTP_NOT_FOUND:
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_DITEMUKAN_TITLE,
"Barang dengan kode tersebut tidak ditemukan.");
alert.initOwner(apMain.getScene().getWindow());
alert.show();
}
} else if (error instanceof SocketTimeoutException) {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_KONEKSI_TIMEOUT_TITLE,
AlertUtil.ERROR_KONEKSI_TIMEOUT_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
} else {
Alert alert = AlertUtil.getAlertError(
AlertUtil.ERROR_TIDAK_TERDUGA_TITLE,
AlertUtil.ERROR_TIDAK_TERDUGA_MESSAGE);
alert.initOwner(apMain.getScene().getWindow());
alert.show();
Logger.getLogger(FormUtamaController.class
.getName()).log(Level.SEVERE, null, error);
}
}

@Override
public void onComplete() {
}
};
}

+ 95
- 78
src/main/java/id/amigogroup/posterminal/transaksi/TabelBarangRetur.java Wyświetl plik

@@ -5,10 +5,9 @@
*/
package id.amigogroup.posterminal.transaksi;

import id.amigogroup.posterminal.model.DNotaRetur;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;

/**
@@ -16,151 +15,169 @@ import javafx.scene.control.TextField;
* @author AGNES
*/
public class TabelBarangRetur {
private SimpleStringProperty tcKodeRetur;
private SimpleStringProperty tcNamaRetur;
private SimpleStringProperty tcUkurRetur;
private SimpleStringProperty tcJumlahRetur;
private SimpleStringProperty tcHargaRetur;
private SimpleStringProperty tcDisc1Retur;
private SimpleStringProperty tcDisc2Retur;
private SimpleStringProperty tcSubtotalRetur;
private SimpleObjectProperty<TextField>tcPramuniagaRetur;

public TabelBarangRetur(String tcKodeRetur, String tcNamaRetur, String tcUkurRetur, String tcJumlahRetur, String tcHargaRetur, String tcDisc1Retur,
String tcDisc2Retur, String tcSubtotalRetur, TextField tcPramuniagaRetur) {
this.tcKodeRetur = new SimpleStringProperty(tcKodeRetur);
this.tcNamaRetur = new SimpleStringProperty(tcNamaRetur);
this.tcUkurRetur = new SimpleStringProperty(tcUkurRetur);
this.tcJumlahRetur = new SimpleStringProperty(tcJumlahRetur);
this.tcHargaRetur = new SimpleStringProperty(tcHargaRetur);
this.tcDisc1Retur = new SimpleStringProperty(tcDisc1Retur);
this.tcDisc2Retur = new SimpleStringProperty(tcDisc2Retur);
this.tcSubtotalRetur = new SimpleStringProperty(tcSubtotalRetur);
this.tcPramuniagaRetur = new SimpleObjectProperty<TextField>(tcPramuniagaRetur);
private SimpleStringProperty kode;
private SimpleStringProperty nama;
private SimpleStringProperty ukur;
private SimpleStringProperty jumlah;
private SimpleStringProperty harga;
private SimpleStringProperty disc1;
private SimpleStringProperty disc2;
private SimpleStringProperty subTotal;
private SimpleObjectProperty<TextField> fldPramuniaga;
private DNotaRetur data;

public TabelBarangRetur(String kode, String nama, String ukur, String jumlah, String harga, String disc1,
String disc2, String subTotal, TextField fldPramuniaga) {
this.kode = new SimpleStringProperty(kode);
this.nama = new SimpleStringProperty(nama);
this.ukur = new SimpleStringProperty(ukur);
this.jumlah = new SimpleStringProperty(jumlah);
this.harga = new SimpleStringProperty(harga);
this.disc1 = new SimpleStringProperty(disc1);
this.disc2 = new SimpleStringProperty(disc2);
this.subTotal = new SimpleStringProperty(subTotal);
this.fldPramuniaga = new SimpleObjectProperty<TextField>(fldPramuniaga);
}

/**
* @return the tcKode
* @return the kode
*/
public String getTcKodeRetur() {
return tcKodeRetur.get();
public String getKode() {
return kode.get();
}

/**
* @param tcKode the tcKode to set
* @param kode the kode to set
*/
public void setTcKodeRetur(String tcKodeRetur) {
this.tcKodeRetur.set(tcKodeRetur);
public void setKode(String kode) {
this.kode.set(kode);
}

/**
* @return the tcNama
* @return the nama
*/
public String getTcNamaRetur() {
return tcNamaRetur.get();
public String getNama() {
return nama.get();
}

/**
* @param tcNama the tcNama to set
* @param nama the nama to set
*/
public void setTcNamaRetur(String tcNamaRetur) {
this.tcNamaRetur.set(tcNamaRetur);
public void setNama(String nama) {
this.nama.set(nama);
}

/**
* @return the tcUkur
* @return the ukur
*/
public String getTcUkurRetur() {
return tcUkurRetur.get();
public String getUkur() {
return ukur.get();
}

/**
* @param tcUkur the tcUkur to set
* @param ukur the ukur to set
*/
public void setTcUkurRetur(String tcUkurRetur) {
this.tcUkurRetur.set(tcUkurRetur);
public void setUkur(String ukur) {
this.ukur.set(ukur);
}

/**
* @return the tcJumlah
* @return the jumlah
*/
public String getTcJumlahRetur() {
return tcJumlahRetur.get();
public String getJumlah() {
return jumlah.get();
}

/**
* @param tcJumlah the tcJumlah to set
* @param jumlah the jumlah to set
*/
public void setTcJumlahRetur(String tcJumlahRetur) {
this.tcJumlahRetur.set(tcJumlahRetur);
public void setJumlah(String jumlah) {
this.jumlah.set(jumlah);
}

/**
* @return the tcHarga
* @return the harga
*/
public String getTcHargaRetur() {
return tcHargaRetur.get();
public String getHarga() {
return harga.get();
}

/**
* @param tcHarga the tcHarga to set
* @param harga the harga to set
*/
public void setTcHargaRetur(String tcHargaRetur) {
this.tcHargaRetur.set(tcHargaRetur);
public void setHarga(String harga) {
this.harga.set(harga);
}

/**
* @return the tcDisc1
* @return the disc1
*/
public String getTcDisc1Retur() {
return tcDisc1Retur.get();
public String getDisc1() {
return disc1.get();
}

/**
* @param tcDisc1 the tcDisc1 to set
* @param disc1 the disc1 to set
*/
public void setTcDisc1Retur(String tcDisc1Retur) {
this.tcDisc1Retur.set(tcDisc1Retur);
public void setDisc1(String disc1) {
this.disc1.set(disc1);
}

/**
* @return the tcDisc2
* @return the disc2
*/
public String getTcDisc2Retur() {
return tcDisc2Retur.get();
public String getDisc2() {
return disc2.get();
}

/**
* @param tcDisc2 the tcDisc2 to set
* @param disc2 the disc2 to set
*/
public void setTcDisc2Retur(String tcDisc2Retur) {
this.tcDisc2Retur.set(tcDisc2Retur);
public void setDisc2(String disc2) {
this.disc2.set(disc2);
}

/**
* @return the subTotal
*/
public String getSubTotal() {
return subTotal.get();
}

/**
* @param subTotal the subTotal to set
*/
public void setSubTotal(String subTotal) {
this.subTotal.set(subTotal);
}

/**
* @return the tcSubtotal
* @return the fldPramuniaga
*/
public String getTcSubtotalRetur() {
return tcSubtotalRetur.get();
public TextField getFldPramuniaga() {
return fldPramuniaga.get();
}

/**
* @param tcSubtotal the tcSubtotal to set
* @param fldPramuniaga the fldPramuniaga to set
*/
public void setTcSubtotalRetur(String tcSubtotalRetur) {
this.tcSubtotalRetur.set(tcSubtotalRetur);
public void setFldPramuniaga(TextField fldPramuniaga) {
this.fldPramuniaga.set(fldPramuniaga);
}

/**
* @return the tcPramuniaga
* @return the data
*/
public TextField getTcPramuniagaRetur() {
return tcPramuniagaRetur.get();
public DNotaRetur getData() {
return data;
}

/**
* @param tcPramuniaga the tcPramuniaga to set
* @param data the data to set
*/
public void setTcPramuniagaRetur(TextField tcPramuniagaRetur) {
this.tcPramuniagaRetur.set(tcPramuniagaRetur);
public void setData(DNotaRetur data) {
this.data = data;
}
}
}

+ 17
- 1
src/main/java/id/amigogroup/posterminal/transaksi/TabelBarangTunai.java Wyświetl plik

@@ -5,9 +5,9 @@
*/
package id.amigogroup.posterminal.transaksi;

import id.amigogroup.posterminal.model.DNotaTunai;
import javafx.beans.property.SimpleObjectProperty;
import javafx.beans.property.SimpleStringProperty;
import javafx.scene.control.Button;
import javafx.scene.control.ComboBox;
import javafx.scene.control.TextField;

@@ -26,6 +26,8 @@ public class TabelBarangTunai {
private SimpleObjectProperty<ComboBox> cbxPromo;
private SimpleStringProperty subTotal;
private SimpleObjectProperty<TextField> fldPramuniaga;
private DNotaTunai data;

public TabelBarangTunai(String kode, String nama, String ukur, String jumlah, String harga, String disc1,
String disc2, ComboBox cbxPromo, String subTotal, TextField fldPramuniaga) {
@@ -181,4 +183,18 @@ public class TabelBarangTunai {
public void setFldPramuniaga(TextField fldPramuniaga) {
this.fldPramuniaga.set(fldPramuniaga);
}

/**
* @return the data
*/
public DNotaTunai getData() {
return data;
}

/**
* @param data the data to set
*/
public void setData(DNotaTunai data) {
this.data = data;
}
}

src/main/java/id/amigogroup/posterminal/pencarian/BarangCache.java → src/main/java/id/amigogroup/posterminal/util/AmigoPosCache.java Wyświetl plik

@@ -3,7 +3,7 @@
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package id.amigogroup.posterminal.pencarian;
package id.amigogroup.posterminal.util;

import id.amigogroup.posterminal.model.Barang;
import id.amigogroup.posterminal.model.NoBarang;
@@ -14,17 +14,18 @@ import java.util.Map;
*
* @author ronal
*/
public class BarangCache {
private static BarangCache instance;
private Map<String, Barang> daftarBarang;
private Map<String, NoBarang> daftarNoBarang;
public class AmigoPosCache {
private static AmigoPosCache instance;
private final Map<String, Barang> daftarBarang;
private final Map<String, NoBarang> daftarNoBarang;
private BarangCache(){
private AmigoPosCache(){
daftarBarang = new HashMap<>();
daftarNoBarang = new HashMap<>();
}
public static BarangCache getInstance(){
if(instance == null) instance = new BarangCache();
public static AmigoPosCache getInstance(){
if(instance == null) instance = new AmigoPosCache();
return instance;
}

+ 14
- 0
src/main/java/id/amigogroup/posterminal/util/Fucout.java Wyświetl plik

@@ -159,4 +159,18 @@ public class Fucout {
.atZone(ZoneId.systemDefault())
.toLocalDate();
}
public static String getKodeBarangFromKodeFull(String kodeFull){
if(kodeFull.length() >= 9){
return kodeFull.substring(0, 9);
}
return "";
}
public static String getNomorBarangFromKodeFull(String kodeFull){
if(kodeFull.length() > 9){
return kodeFull.substring(9);
}
return "";
}
}

+ 13
- 3
src/main/resources/fxml/FormTransaksiRetur.fxml Wyświetl plik

@@ -11,6 +11,7 @@
<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>
<?import javafx.scene.layout.RowConstraints?>
<?import javafx.scene.layout.StackPane?>
<?import javafx.scene.text.Font?>

<AnchorPane id="AnchorPane" fx:id="apMain" minHeight="-Infinity" minWidth="-Infinity" prefHeight="450.0" prefWidth="750.0" stylesheets="@../styles/pos_styles.css" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="id.amigogroup.posterminal.transaksi.FormTransaksiReturController">
@@ -24,14 +25,14 @@
<items>
<AnchorPane>
<children>
<Label fx:id="lbl" layoutX="14.0" layoutY="6.0" text="Histori Penjualan" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="0.0">
<Label layoutX="14.0" layoutY="6.0" text="Histori Penjualan" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="0.0">
<font>
<Font size="14.0" />
</font>
</Label>
<Label layoutX="14.0" layoutY="20.0" text="Nomor Nota Penjualan" />
<TextField fx:id="fldNotaPenjualan" layoutX="14.0" layoutY="37.0" onKeyPressed="#fldNotaPenjualanOnKeyPressed" prefHeight="25.0" prefWidth="329.0" promptText="Nomor Nota Penjualan" AnchorPane.leftAnchor="14.0" AnchorPane.topAnchor="37.0" />
<TableView fx:id="tbvPenjualan" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="65.0">
<TableView fx:id="tbvPenjualan" onDragDetected="#tbvPenjualanOnDragDetected" onDragDone="#tbvPenjualanOnDragDone" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="65.0">
<columns>
<TableColumn fx:id="tcNo" editable="false" maxWidth="30.0" minWidth="30.0" prefWidth="30.0" resizable="false" sortable="false" text="No" />
<TableColumn fx:id="tcKode" prefWidth="75.0" text="Kode Barang" />
@@ -70,7 +71,7 @@
<HBox alignment="CENTER_LEFT" maxWidth="1.7976931348623157E308" spacing="5.0">
<children>
<Label text="Nomor Nota" />
<Label text=": -">
<Label fx:id="lblNomorNota" text=": -">
<HBox.margin>
<Insets />
</HBox.margin>
@@ -121,6 +122,15 @@
<TableView fx:constant="CONSTRAINED_RESIZE_POLICY" />
</columnResizePolicy>
</TableView>
<StackPane fx:id="stpReturDrop" layoutY="76.0" onDragDropped="#stpReturDropOnDragDropped" onDragEntered="#stpReturDropOnDragEntered" onDragExited="#stpReturDropOnDragExited" onDragOver="#stpReturDropOnDragOver" AnchorPane.bottomAnchor="0.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="75.0">
<children>
<Label fx:id="lblTambahKeTabelRetur" text="Tambahkan Barang ke Nota Retur" textFill="GREY" visible="false">
<font>
<Font name="System Bold" size="18.0" />
</font>
</Label>
</children>
</StackPane>
</children>
</AnchorPane>
</items>


+ 2
- 0
src/main/resources/fxml/FormTransaksiTunai.fxml Wyświetl plik

@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.geometry.Insets?>
<?import javafx.scene.canvas.Canvas?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.Separator?>
<?import javafx.scene.control.TableColumn?>
@@ -94,6 +95,7 @@
</children>
</GridPane>
<Separator layoutY="116.0" prefHeight="0.0" prefWidth="800.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="116.0" />
<Canvas height="200.0" layoutX="63.0" layoutY="16.0" width="200.0" AnchorPane.bottomAnchor="55.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="130.0" />
<TableView fx:id="tbvTransaksi" layoutY="150.0" prefHeight="245.0" prefWidth="800.0" AnchorPane.bottomAnchor="55.0" AnchorPane.leftAnchor="0.0" AnchorPane.rightAnchor="0.0" AnchorPane.topAnchor="130.0">
<columns>
<TableColumn fx:id="tcNo" editable="false" maxWidth="30.0" minWidth="30.0" prefWidth="30.0" resizable="false" sortable="false" text="No" />


+ 4
- 2
src/main/resources/styles/pos_styles.css Wyświetl plik

@@ -19,16 +19,18 @@ and open the template in the editor.
-fx-cursor: hand;
}
.button-navigasi-transaksi:hover{
/*-fx-background-color: #bbeeff;*/
-fx-background-color:
linear-gradient(#d5f6fd 0%, #cae0ff 49%, #cae0ff 50%, #ffffff 100%);}

.button-navigasi-transaksi-selected{
/*-fx-background-color: #33aaff;*/
-fx-background-color:
linear-gradient(#abf6fd 0%, #8aa6fd 49%, #8aa6dd 50%, #50a6dd 100%);
}

.table-drag-over{
-fx-background-color: lightgreen;
}

#header{
-fx-border-style: solid;
-fx-border-color: black;


Ładowanie…
Anuluj
Zapisz