updated currency and items handling

Currency is now stored as a float, but this doesn't resolve the long number issue.
This commit is contained in:
buzz-lightsnack-2007 2024-02-27 16:59:27 +08:00
parent a2d30d0586
commit b077cbf9ed

View file

@ -17,7 +17,8 @@ import java.util.*;
*/
public class transact {
public static Dictionary<String, Dictionary> items = new Hashtable<>();
public static Dictionary<String, Double> price = new Hashtable<>();
public static Dictionary<String, Float> price = new Hashtable<>();
public static Boolean state = false;
/*
{item: {
@ -41,16 +42,27 @@ public class transact {
price = new Hashtable<>();
// Set default values for prices.
price.put("total", 0.00);
price.put("tax", 0.00);
price.put("subtotal", 0.00);
price.put("discount", 0.00);
price.put("total", (float) 0.00);
price.put("tax", (float) 0.00);
price.put("subtotal", (float) 0.00);
price.put("discount", (float) 0.00);
// Initialize as well the receipt.
receipt.init();
receipt.create();
};
public static Boolean check() {
/* Check the status of the transaction.
Returns: (Boolean) the transaction state */
state = !items.isEmpty();
// Return the state.
return(state);
}
public static Dictionary calculate() {
/* Calculate the subtotal, total, and VAT.
@ -61,31 +73,31 @@ public class transact {
Enumeration<String> items_list = items.keys();
// Set default values for prices.
price.put("total", 0.00);
price.put("subtotal", 0.00);
price.put("discount", 0.00);
price.put("tax", 0.00);
price.put("total", (float) 0.00);
price.put("subtotal", (float) 0.00);
price.put("discount", (float) 0.00);
price.put("tax", (float) 0.00);
while (items_list.hasMoreElements()) {
String item = items_list.nextElement();
if (((Dictionary) items.get(item).get("price")).get("tax") != null) {
price.put("tax", (double) price.get("tax") + (double) ((Dictionary) items.get(item).get("price")).get("tax"));
price.put("tax", (float) price.get("tax") + (float) ((Dictionary) items.get(item).get("price")).get("tax"));
};
if (((Dictionary) items.get(item).get("price")).get("subtotal") != null) {
price.put("subtotal", (double) price.get("subtotal") + (double) ((Dictionary) items.get(item).get("price")).get("subtotal"));
price.put("subtotal", (float) price.get("subtotal") + (float) ((Dictionary) items.get(item).get("price")).get("subtotal"));
};
if (((Dictionary) items.get(item).get("price")).get("total") != null) {
price.put("total", (double) price.get("total") + (double) ((Dictionary) items.get(item).get("price")).get("total"));
price.put("total", (float) price.get("total") + (float) ((Dictionary) items.get(item).get("price")).get("total"));
};
if (((Dictionary) items.get(item).get("price")).get("discount") != null) {
price.put("discount", (double) price.get("discount") + (double) ((Dictionary) items.get(item).get("price")).get("discount"));
price.put("discount", (float) price.get("discount") + (float) ((Dictionary) items.get(item).get("price")).get("discount"));
};
};
if (price.get("tip") != null) {
if (Double.parseDouble(price.get("tip").toString()) >= 0) {
price.put("total", (double) price.get("total") + (double) price.get("tip"));
if (Float.parseFloat(price.get("tip").toString()) >= 0) {
price.put("total", (float) price.get("total") + (float) price.get("tip"));
};
};
@ -93,41 +105,41 @@ public class transact {
return(price);
};
public static Dictionary<String, Double> calculate(String SKU, int QUANTITY) {
public static Dictionary<String, Float> calculate(String SKU, int QUANTITY) {
inventory.refresh();
Dictionary item_details = inventory.items.get(SKU);
// Create an output dictionary.
Dictionary<String, Double> item_pricing = new Hashtable<>();
Dictionary<String, Float> item_pricing = new Hashtable<>();
// Fill in with default data, especially useful when the product is not found.
item_pricing.put("subtotal", 0.0);
item_pricing.put("total", 0.0);
item_pricing.put("subtotal", (float) 0.00);
item_pricing.put("total", (float) 0.00);
if (item_details != null) {
if (item_details.get("Price") != null) {
item_pricing.put("unit", Double.valueOf(item_details.get("Price").toString()));
item_pricing.put("subtotal", Double.valueOf(item_details.get("Price").toString()) * QUANTITY);
item_pricing.put("total", Double.valueOf( item_pricing.get("subtotal")));
item_pricing.put("unit", Float.valueOf(item_details.get("Price").toString()));
item_pricing.put("subtotal", Float.valueOf(item_details.get("Price").toString()) * QUANTITY);
item_pricing.put("total", Float.valueOf( item_pricing.get("subtotal")));
if (item_details.get("Tax") != null) {
item_pricing.put("tax", Double.valueOf(item_details.get("Tax").toString()) * QUANTITY);
item_pricing.put("total", Double.valueOf(item_pricing.get("total").toString()) + Double.valueOf(item_pricing.get("tax").toString()));
item_pricing.put("tax", Float.valueOf(item_details.get("Tax").toString()) * QUANTITY);
item_pricing.put("total", Float.valueOf(item_pricing.get("total").toString()) + Float.valueOf(item_pricing.get("tax").toString()));
};
if (item_details.get("Discount") != null) {
if (Integer.parseInt(item_details.get("Discount").toString()) > 0) {
item_pricing.put("discount",
QUANTITY * Double.parseDouble(item_details.get("Price").toString()) * (1 - (Double.parseDouble(item_details.get("Discount").toString()) / 100))
QUANTITY * Float.parseFloat(item_details.get("Price").toString()) * (1 - (Float.parseFloat(item_details.get("Discount").toString()) / 100))
);
} else if (Integer.parseInt(item_details.get("Discount").toString()) < 0) {
item_pricing.put("discount",
QUANTITY * Double.parseDouble(item_details.get("Price").toString()) * (0 - (Double.parseDouble(item_details.get("Discount").toString()) / 100))
QUANTITY * Float.parseFloat(item_details.get("Price").toString()) * (0 - (Float.parseFloat(item_details.get("Discount").toString()) / 100))
);
} else {
item_pricing.put("discount", (double) 0);
item_pricing.put("discount", (float) 0);
};
item_pricing.put("total", Double.valueOf(item_pricing.get("total").toString()) - Double.valueOf(item_pricing.get("discount").toString()));
item_pricing.put("total", Float.valueOf(item_pricing.get("total").toString()) - Float.valueOf(item_pricing.get("discount").toString()));
};
};
};
@ -211,17 +223,20 @@ public class transact {
if (ITEM_CURRENT_DATA != null) {
if (QUANTITY >= (int) ITEM_CURRENT_DATA.get("qty")) {
items.remove(SKU);
// Log the details.
log(SKU, -((int) ITEM_CURRENT_DATA.get("qty")));
} else {
ITEM_CURRENT_DATA.put("qty", ((int) ITEM_CURRENT_DATA.get("qty")) - QUANTITY);
ITEM_CURRENT_DATA.put("price", calculate(SKU, ((int) ITEM_CURRENT_DATA.get("qty"))));
// Add to the shopping cart's items.
items.put(SKU, ITEM_CURRENT_DATA);
// Log the details.
log(SKU, -QUANTITY);
};
// Log the details.
log(SKU, -QUANTITY);
// Calculate all prices.
calculate();
};