account.management.controller.POVoucherController.java Source code

Java tutorial

Introduction

Here is the source code for account.management.controller.POVoucherController.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package account.management.controller;

import account.management.model.MetaData;
import account.management.model.Msg;
import account.management.model.PurchaseOrderData;
import com.mashape.unirest.http.Unirest;
import com.mashape.unirest.http.exceptions.UnirestException;
import java.net.URL;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.ResourceBundle;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javafx.application.Platform;
import javafx.beans.value.ObservableValue;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.DatePicker;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.input.KeyEvent;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javax.swing.event.ChangeListener;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
import org.json.JSONArray;
import org.json.JSONObject;
import report.Report;

/**
 * FXML Controller class
 *
 * @author mohar
 */
public class POVoucherController implements Initializable {
    @FXML
    private DatePicker date;
    @FXML
    private TextField name;
    @FXML
    private TextArea address;
    @FXML
    private VBox container;
    @FXML
    private HBox row;
    @FXML
    private TextField sl;
    @FXML
    private TextField desc;
    @FXML
    private TextField qty;
    @FXML
    private TextField rate;
    @FXML
    private TextField total;
    @FXML
    private TextField commision;
    @FXML
    private TextField total_commision;
    @FXML
    private TextField neat_total;
    @FXML
    private TextField total_price;
    @FXML
    private TextField opening;
    @FXML
    private TextField grand_total;
    @FXML
    private TextField cash;
    @FXML
    private TextField balance;
    @FXML
    private Button delete;

    /**
     * Initializes the controller class.
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
        balance.focusedProperty().addListener(
                (ObservableValue<? extends Boolean> observable, Boolean oldValue, Boolean newValue) -> {
                    if (newValue) {
                        Platform.runLater(new Runnable() {

                            @Override
                            public void run() {
                                balance.requestFocus();
                                balance.selectAll();
                            }
                        });

                    }
                });
        this.container.getChildren().remove(0);
        new Thread(() -> {
            try {
                Thread.sleep(5000);
                this.total_price.getScene().setOnKeyPressed(new EventHandler<KeyEvent>() {
                    public void handle(final KeyEvent keyEvent) {
                        if (keyEvent.getCode() == KeyCode.ENTER) {
                            System.out.println("attempting to submit deposit voucher");
                            //Stop letting it do anything else
                            keyEvent.consume();
                            try {
                                onSubmitButtonClick(null);
                            } catch (ParseException ex) {
                                Logger.getLogger(SalaryVoucherController.class.getName()).log(Level.SEVERE, null,
                                        ex);
                            }
                        }
                    }
                });
            } catch (InterruptedException ex) {
                Logger.getLogger(NewVoucherController.class.getName()).log(Level.SEVERE, null, ex);
            }

        }).start();
    }

    @FXML
    private void onSubmitButtonClick(ActionEvent event) throws ParseException {
        try {

            JSONArray array = new JSONArray();
            int len = this.container.getChildren().size();
            for (int i = 0; i < len; i++) {
                HBox row = (HBox) this.container.getChildren().get(i);
                TextField sl_t = (TextField) row.getChildren().get(0);
                TextField desc_t = (TextField) row.getChildren().get(1);
                TextField qty_t = (TextField) row.getChildren().get(2);
                TextField rate_t = (TextField) row.getChildren().get(3);
                TextField total_t = (TextField) row.getChildren().get(4);
                TextField commision_t = (TextField) row.getChildren().get(5);
                TextField total_commision_t = (TextField) row.getChildren().get(6);
                TextField neat_amount_t = (TextField) row.getChildren().get(7);
                JSONObject obj = new JSONObject();
                obj.put("sl", sl_t.getText());
                obj.put("desc", desc_t.getText());
                obj.put("qty", qty_t.getText());
                obj.put("rate", rate_t.getText());
                obj.put("total", total_t.getText());
                obj.put("commision", commision_t.getText());
                obj.put("total_commision", total_commision_t.getText());
                obj.put("neat_amount", neat_amount_t.getText());
                array.put(obj);
            }

            JSONArray res = Unirest.get(MetaData.baseUrl + "add/purchase/order")
                    .queryString("name", this.name.getText()).queryString("address", this.address.getText())
                    .queryString("date", this.date.getValue().toString())
                    .queryString("total_price", this.total_price.getText())
                    .queryString("shabek", this.opening.getText())
                    .queryString("grand_total", this.grand_total.getText())
                    .queryString("tt_dd_cash", this.cash.getText()).queryString("jer", this.balance.getText())
                    .queryString("content", array).asJson().getBody().getArray();
            JSONObject obj = res.getJSONObject(0);
            if (obj.getString("Status").equals("Success")) {
                String voucher_no = Unirest.get(MetaData.baseUrl + "purchase/order/lastId").asString().getBody();
                Msg.showInformation("Success");
                showReport(voucher_no, this.name.getText(), this.address.getText(), this.date.getValue().toString(),
                        array.toString(), this.total_price.getText(), this.opening.getText(),
                        this.grand_total.getText(), this.cash.getText(), this.balance.getText());
            } else {
                Msg.showError(obj.getString("Message"));
            }
        } catch (UnirestException ex) {
            Logger.getLogger(POVoucherController.class.getName()).log(Level.SEVERE, null, ex);
            Msg.showError("");
        }
    }

    @FXML
    private void onAddRowButtonClick(ActionEvent event) {
        addNewRow();
    }

    public void addNewRow() {
        TextField sl = new TextField();
        sl.setPromptText("SL");
        sl.setPrefWidth(54);
        sl.setEditable(false);

        TextField desc = new TextField();
        desc.setPromptText("Description");
        desc.setPrefWidth(216);

        TextField qty = new TextField();
        qty.setPromptText("Quantity");
        qty.setPrefWidth(62);
        qty.setOnKeyReleased((e) -> {
            calculate();
        });

        TextField rate = new TextField();
        rate.setPromptText("Rate");
        rate.setPrefWidth(72);
        rate.setOnKeyReleased((e) -> {
            calculate();
        });

        TextField total = new TextField();
        total.setPromptText("Total");
        total.setPrefWidth(80);
        total.setEditable(false);

        TextField commision = new TextField();
        commision.setPromptText("Commision %");
        commision.setPrefWidth(90);
        commision.setOnKeyReleased((e) -> {
            calculate();
        });

        TextField total_commision = new TextField();
        total_commision.setPromptText("Total Commision");
        total_commision.setPrefWidth(132);
        total_commision.setEditable(false);

        TextField neat_total = new TextField();
        neat_total.setPromptText("Neat Amount");
        neat_total.setPrefWidth(115);
        neat_total.setEditable(false);

        Button delete = new Button("Delete");

        HBox row = new HBox();
        row.setSpacing(10);
        row.getChildren().addAll(sl, desc, qty, rate, total, commision, total_commision, neat_total, delete);

        delete.setOnAction((e) -> {
            this.container.getChildren().remove(row);
            calculate();
        });

        this.container.getChildren().add(row);
        calculate();

    }

    public void calculate() {
        int len = this.container.getChildren().size();
        double total_amount = 0;
        for (int i = 0; i < len; i++) {
            HBox row = (HBox) this.container.getChildren().get(i);
            TextField sl_t = (TextField) row.getChildren().get(0);
            TextField qty_t = (TextField) row.getChildren().get(2);
            TextField rate_t = (TextField) row.getChildren().get(3);
            TextField total_t = (TextField) row.getChildren().get(4);
            TextField commision_t = (TextField) row.getChildren().get(5);
            TextField total_commision_t = (TextField) row.getChildren().get(6);
            TextField neat_amount_t = (TextField) row.getChildren().get(7);

            sl_t.setText(String.valueOf(i + 1));

            double qty = qty_t.getText().isEmpty() ? 0 : Double.parseDouble(qty_t.getText());
            double rate = rate_t.getText().isEmpty() ? 0 : Double.parseDouble(rate_t.getText());
            double total = total_t.getText().isEmpty() ? 0 : Double.parseDouble(total_t.getText());
            double commision = commision_t.getText().isEmpty() ? 0 : Double.parseDouble(commision_t.getText());
            double total_commision = total_commision_t.getText().isEmpty() ? 0
                    : Double.parseDouble(total_commision_t.getText());
            double neat_amount = neat_amount_t.getText().isEmpty() ? 0
                    : Double.parseDouble(neat_amount_t.getText());

            total = qty * rate;
            total_commision = total * commision / 100;
            neat_amount = total - total_commision;

            total_t.setText(String.valueOf(total));
            total_commision_t.setText(String.valueOf(total_commision));
            neat_amount_t.setText(String.valueOf(neat_amount));
            total_amount += neat_amount;
        }

        this.total_price.setText(String.valueOf(total_amount));
    }

    public void showReport(String sl, String name, String address, String date, String content, String total_amount,
            String opening, String total, String cash, String balance) throws ParseException {
        Report report = new Report();
        Vector v = new Vector();
        HashMap params = new HashMap();

        JSONArray array = new JSONArray(content);
        int len = array.length();
        for (int i = 0; i < len; i++) {
            JSONObject obj = array.getJSONObject(i);
            String sl_l = obj.getString("sl");
            String desc_l = obj.getString("desc");
            String qty_l = obj.getString("qty");
            String rate_l = obj.getString("rate");
            String total_l = obj.getString("total");
            String commision_l = obj.getString("commision");
            String total_commision_l = obj.getString("total_commision");
            String neat_amount_l = obj.getString("neat_amount");
            v.add(new PurchaseOrderData(sl_l, desc_l, qty_l, rate_l, total_l, commision_l + "%", total_commision_l,
                    neat_amount_l));
        }

        params.put("voucher_no", sl);
        params.put("name", name);
        params.put("address", address);
        params.put("date",
                new SimpleDateFormat("dd-MM-yyyy").format(new SimpleDateFormat("yyyy-MM-dd").parse(date)));
        params.put("total_amount", total_amount);
        params.put("opening", opening);
        params.put("total", total);
        params.put("cash", cash);
        params.put("balance", balance);

        report.getReport("src\\report\\PurchaseOrder.jrxml", new JRBeanCollectionDataSource(v), params,
                "Purchase Order");
    }

}