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