improve transaction handling
This commit is contained in:
parent
c0e6528728
commit
1423eba2a9
1 changed files with 206 additions and 0 deletions
206
src/main/java/tech/iBeans/POSware/Lite/transact.java
Normal file
206
src/main/java/tech/iBeans/POSware/Lite/transact.java
Normal file
|
@ -0,0 +1,206 @@
|
|||
/*
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
|
||||
* Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
|
||||
*/
|
||||
package tech.iBeans.POSware.Lite;
|
||||
|
||||
// Import local modules.
|
||||
import tech.iBeans.POSware.Lite.inventory.*;
|
||||
|
||||
// Import global modules.
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
*
|
||||
* @author eleven
|
||||
*/
|
||||
public class transact {
|
||||
public static Dictionary<String, Dictionary> items = new Hashtable<>();
|
||||
public static Dictionary<String, Double> price = new Hashtable<>();
|
||||
|
||||
/*
|
||||
{item: {
|
||||
qty:
|
||||
price: {
|
||||
"tax":
|
||||
"subtotal":
|
||||
"total":
|
||||
"discount":
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
|
||||
public static void init() {
|
||||
/* Initialize the variables, setting them with default values.
|
||||
*/
|
||||
|
||||
items = new Hashtable<>();
|
||||
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);
|
||||
};
|
||||
|
||||
public static Dictionary calculate() {
|
||||
/* Calculate the subtotal, total, and VAT.
|
||||
|
||||
Returns: (Dictionary) the contents of the price variable
|
||||
*/
|
||||
|
||||
// Prepare to enumerate each item.
|
||||
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);
|
||||
|
||||
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"));
|
||||
};
|
||||
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"));
|
||||
};
|
||||
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"));
|
||||
};
|
||||
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"));
|
||||
};
|
||||
};
|
||||
|
||||
if (price.get("tip") != null) {
|
||||
if (Double.parseDouble(price.get("tip").toString()) >= 0) {
|
||||
price.put("total", (double) price.get("total") + (double) price.get("tip"));
|
||||
};
|
||||
};
|
||||
|
||||
// Return the dictionary.
|
||||
return(price);
|
||||
};
|
||||
|
||||
public static Dictionary<String, Double> 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<>();
|
||||
|
||||
// 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);
|
||||
|
||||
if (item_details != null) {
|
||||
if (item_details.get("Price") != null) {
|
||||
item_pricing.put("subtotal", Double.valueOf(item_details.get("Price").toString()) * QUANTITY);
|
||||
item_pricing.put("total", Double.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()));
|
||||
};
|
||||
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))
|
||||
);
|
||||
} 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))
|
||||
);
|
||||
} else {
|
||||
item_pricing.put("discount", (double) 0);
|
||||
};
|
||||
|
||||
item_pricing.put("total", Double.valueOf(item_pricing.get("total").toString()) - Double.valueOf(item_pricing.get("discount").toString()));
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
// Return the data.
|
||||
return item_pricing;
|
||||
|
||||
};
|
||||
|
||||
public static boolean add(String SKU, int QUANTITY) {
|
||||
/* Add an item to the shopping cart.
|
||||
Parameters:
|
||||
SKU (String): the SKU of the item
|
||||
QUANTITY (int): the quantity
|
||||
Returns: (boolean) the calculation state
|
||||
*/
|
||||
|
||||
if (QUANTITY == 0) {return(false);}
|
||||
else if (QUANTITY < 0) {return(remove(SKU, QUANTITY));};
|
||||
|
||||
// containing the current data's information
|
||||
Dictionary ITEM_CURRENT_DATA = items.get(SKU);
|
||||
|
||||
// check if the item exists
|
||||
if (ITEM_CURRENT_DATA != null) {
|
||||
ITEM_CURRENT_DATA.put("qty", ((int) ITEM_CURRENT_DATA.get("qty")) + QUANTITY);
|
||||
} else {
|
||||
// Initialize the dictionary.
|
||||
ITEM_CURRENT_DATA = new Hashtable<>();
|
||||
|
||||
// Add the quantity.
|
||||
ITEM_CURRENT_DATA.put("qty", QUANTITY);
|
||||
};
|
||||
|
||||
// Calculate these items' price.
|
||||
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);
|
||||
|
||||
// Calculate all prices.
|
||||
calculate();
|
||||
|
||||
// Return the success state.
|
||||
return((items.get(SKU) != null));
|
||||
};
|
||||
|
||||
public static boolean remove(String SKU, int QUANTITY) {
|
||||
/* Remove an item to the shopping items.
|
||||
|
||||
Parameters:
|
||||
SKU (String): the SKU of the item
|
||||
QUANTITY (int): the quantity
|
||||
Returns: (boolean) the removal state
|
||||
*/
|
||||
|
||||
if (QUANTITY == 0) {return(false);}
|
||||
else if (QUANTITY < 0) {return(add(SKU, QUANTITY));};
|
||||
|
||||
// containing the current data's information
|
||||
Dictionary ITEM_CURRENT_DATA = items.get(SKU);
|
||||
|
||||
// check if the item exists. There's no need to remove an item that's already been removed.
|
||||
if (ITEM_CURRENT_DATA != null) {
|
||||
if (QUANTITY >= (int) ITEM_CURRENT_DATA.get("qty")) {
|
||||
items.remove(SKU);
|
||||
} 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);
|
||||
};
|
||||
};
|
||||
|
||||
// Calculate all prices.
|
||||
calculate();
|
||||
|
||||
// Return the state.
|
||||
return(true);
|
||||
};
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue