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