Amount/Unit progress
This commit is contained in:
		@@ -196,7 +196,12 @@ public class ShoppingList
 | 
			
		||||
			for(ShoppingListEntry entry : this.entries)
 | 
			
		||||
			{
 | 
			
		||||
				if(entry.getProduct().getStoreType().equals(st))
 | 
			
		||||
					shoppingListString.append(entry.getProduct().getName() + Diverse.lineSeparator);
 | 
			
		||||
				{
 | 
			
		||||
					if(entry.getUnit().isDummy)
 | 
			
		||||
						shoppingListString.append(entry.getProduct().getName() + Diverse.lineSeparator);
 | 
			
		||||
					else
 | 
			
		||||
						shoppingListString.append(String.valueOf(entry.getAmount()) + " " + entry.getUnit().getAbbreviation() + " " + entry.getProduct().getName() + Diverse.lineSeparator);
 | 
			
		||||
				}
 | 
			
		||||
			}
 | 
			
		||||
			
 | 
			
		||||
			shoppingListString.append(Diverse.lineSeparator);
 | 
			
		||||
 
 | 
			
		||||
@@ -85,71 +85,7 @@ public class ShoppingListEntry
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				String query = "SELECT * FROM listEntries WHERE listId=? AND productId=? AND unit=?";
 | 
			
		||||
				
 | 
			
		||||
				preparedStmt = conn.prepareStatement(query);
 | 
			
		||||
				preparedStmt.setLong(1, this.getParentList().getId());
 | 
			
		||||
				preparedStmt.setLong(2, this.getProduct().getId());
 | 
			
		||||
				preparedStmt.setLong(3, this.getUnit().getId());
 | 
			
		||||
				
 | 
			
		||||
				Miscellaneous.logEvent(preparedStmt.toString(), 5);
 | 
			
		||||
				
 | 
			
		||||
		        ResultSet res = preparedStmt.executeQuery();
 | 
			
		||||
		        
 | 
			
		||||
		        if(res.next())
 | 
			
		||||
		        {
 | 
			
		||||
		        	float currentAmount = res.getFloat("amount");
 | 
			
		||||
		        	if(currentAmount + this.getAmount() > 0)
 | 
			
		||||
		        	{
 | 
			
		||||
		        		// Update the amount
 | 
			
		||||
		        		String updateQuery  = "UPDATE listEntries set=? WHERE listId=? AND productId=? AND unit=?";
 | 
			
		||||
						preparedStmt = conn.prepareStatement(updateQuery);
 | 
			
		||||
						
 | 
			
		||||
						preparedStmt.setFloat(1, currentAmount + this.getAmount());
 | 
			
		||||
						preparedStmt.setLong(2, this.getProduct().getId());
 | 
			
		||||
						preparedStmt.setLong(3, this.getProduct().getId());
 | 
			
		||||
						preparedStmt.setLong(4, this.getUnit().getId());
 | 
			
		||||
			
 | 
			
		||||
						Miscellaneous.logEvent(preparedStmt.toString(), 5);
 | 
			
		||||
						
 | 
			
		||||
						long numAffectedRows = preparedStmt.executeUpdate();
 | 
			
		||||
					    Miscellaneous.logEvent("AMOUNT OF UPDATED ROWS: " + numAffectedRows, 5);
 | 
			
		||||
					    ResultSet rs = preparedStmt.getGeneratedKeys();
 | 
			
		||||
					    if (numAffectedRows > 0)
 | 
			
		||||
					    {
 | 
			
		||||
					    	Miscellaneous.logEvent("Amount added to existing entry.", 2);
 | 
			
		||||
					    	rs.close();
 | 
			
		||||
							preparedStmt.close();
 | 
			
		||||
							return true;
 | 
			
		||||
					    }					    
 | 
			
		||||
		        	}
 | 
			
		||||
		        	else
 | 
			
		||||
		        	{
 | 
			
		||||
		        		// Resulting sum is < 0 -> Remove the entry completely
 | 
			
		||||
		        		String updateQuery  = "DELETE FROM listEntries WHERE listId=? AND productId=? AND unit=?";
 | 
			
		||||
						preparedStmt = conn.prepareStatement(updateQuery);
 | 
			
		||||
						
 | 
			
		||||
						preparedStmt.setLong(1, this.getProduct().getId());
 | 
			
		||||
						preparedStmt.setLong(2, this.getProduct().getId());
 | 
			
		||||
						preparedStmt.setLong(3, this.getUnit().getId());
 | 
			
		||||
			
 | 
			
		||||
						Miscellaneous.logEvent(preparedStmt.toString(), 5);
 | 
			
		||||
						
 | 
			
		||||
						long numAffectedRows = preparedStmt.executeUpdate();
 | 
			
		||||
					    Miscellaneous.logEvent("AMOUNT OF UPDATED ROWS: " + numAffectedRows, 5);
 | 
			
		||||
					    ResultSet rs = preparedStmt.getGeneratedKeys();
 | 
			
		||||
					    if (numAffectedRows > 0)
 | 
			
		||||
					    {
 | 
			
		||||
					    	Miscellaneous.logEvent("Resulting amount < 0, entry deleted.", 2);
 | 
			
		||||
					    	rs.close();
 | 
			
		||||
							preparedStmt.close();
 | 
			
		||||
							return true;
 | 
			
		||||
					    }
 | 
			
		||||
		        	}
 | 
			
		||||
		        }
 | 
			
		||||
		        
 | 
			
		||||
		        res.close();
 | 
			
		||||
 | 
			
		||||
				updateAmount();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		catch(Exception e)
 | 
			
		||||
@@ -179,7 +115,7 @@ public class ShoppingListEntry
 | 
			
		||||
		{
 | 
			
		||||
			conn = DatabaseHandler.getInstance().getConnection();
 | 
			
		||||
			
 | 
			
		||||
			if(this.getAmount() == 0)
 | 
			
		||||
			if(this.getAmount() == 0 || this.getUnit().isDummy())
 | 
			
		||||
			{
 | 
			
		||||
				String parentQuery = "DELETE FROM listEntries WHERE listId=? AND productId=?";
 | 
			
		||||
				preparedStmt = conn.prepareStatement(parentQuery, Statement.RETURN_GENERATED_KEYS);
 | 
			
		||||
@@ -200,7 +136,8 @@ public class ShoppingListEntry
 | 
			
		||||
			}
 | 
			
		||||
			else
 | 
			
		||||
			{
 | 
			
		||||
				if(!combinationExists(this.getParentList(), this.getProduct(), this.getUnit()))
 | 
			
		||||
				if(combinationExists(this.getParentList(), this.getProduct(), this.getUnit()))
 | 
			
		||||
					return updateAmount();
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
		catch(Exception e)
 | 
			
		||||
@@ -222,6 +159,85 @@ public class ShoppingListEntry
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	protected boolean updateAmount()
 | 
			
		||||
	{
 | 
			
		||||
		String query = "SELECT * FROM listEntries WHERE listId=? AND productId=? AND unit=?";
 | 
			
		||||
		
 | 
			
		||||
		try
 | 
			
		||||
		{
 | 
			
		||||
			Connection conn = DatabaseHandler.getInstance().getConnection();
 | 
			
		||||
			
 | 
			
		||||
			PreparedStatement preparedStmt = conn.prepareStatement(query);
 | 
			
		||||
			preparedStmt.setLong(1, this.getParentList().getId());
 | 
			
		||||
			preparedStmt.setLong(2, this.getProduct().getId());
 | 
			
		||||
			preparedStmt.setLong(3, this.getUnit().getId());
 | 
			
		||||
			
 | 
			
		||||
			Miscellaneous.logEvent(preparedStmt.toString(), 5);
 | 
			
		||||
			
 | 
			
		||||
	        ResultSet res = preparedStmt.executeQuery();
 | 
			
		||||
	        
 | 
			
		||||
	        if(res.next())
 | 
			
		||||
	        {
 | 
			
		||||
	        	float currentAmount = res.getFloat("amount");
 | 
			
		||||
	        	if(currentAmount + this.getAmount() > 0)
 | 
			
		||||
	        	{
 | 
			
		||||
	        		// Update the amount
 | 
			
		||||
	        		String updateQuery  = "UPDATE listEntries set=? WHERE listId=? AND productId=? AND unit=?";
 | 
			
		||||
					preparedStmt = conn.prepareStatement(updateQuery);
 | 
			
		||||
					
 | 
			
		||||
					preparedStmt.setFloat(1, currentAmount + this.getAmount());
 | 
			
		||||
					preparedStmt.setLong(2, this.getProduct().getId());
 | 
			
		||||
					preparedStmt.setLong(3, this.getProduct().getId());
 | 
			
		||||
					preparedStmt.setLong(4, this.getUnit().getId());
 | 
			
		||||
		
 | 
			
		||||
					Miscellaneous.logEvent(preparedStmt.toString(), 5);
 | 
			
		||||
					
 | 
			
		||||
					long numAffectedRows = preparedStmt.executeUpdate();
 | 
			
		||||
				    Miscellaneous.logEvent("AMOUNT OF UPDATED ROWS: " + numAffectedRows, 5);
 | 
			
		||||
				    ResultSet rs = preparedStmt.getGeneratedKeys();
 | 
			
		||||
				    if (numAffectedRows > 0)
 | 
			
		||||
				    {
 | 
			
		||||
				    	Miscellaneous.logEvent("Amount added to existing entry.", 2);
 | 
			
		||||
				    	rs.close();
 | 
			
		||||
						preparedStmt.close();
 | 
			
		||||
						return true;
 | 
			
		||||
				    }					    
 | 
			
		||||
	        	}
 | 
			
		||||
	        	else
 | 
			
		||||
	        	{
 | 
			
		||||
	        		// Resulting sum is < 0 -> Remove the entry completely
 | 
			
		||||
	        		String updateQuery  = "DELETE FROM listEntries WHERE listId=? AND productId=? AND unit=?";
 | 
			
		||||
					preparedStmt = conn.prepareStatement(updateQuery);
 | 
			
		||||
					
 | 
			
		||||
					preparedStmt.setLong(1, this.getProduct().getId());
 | 
			
		||||
					preparedStmt.setLong(2, this.getProduct().getId());
 | 
			
		||||
					preparedStmt.setLong(3, this.getUnit().getId());
 | 
			
		||||
		
 | 
			
		||||
					Miscellaneous.logEvent(preparedStmt.toString(), 5);
 | 
			
		||||
					
 | 
			
		||||
					long numAffectedRows = preparedStmt.executeUpdate();
 | 
			
		||||
				    Miscellaneous.logEvent("AMOUNT OF UPDATED ROWS: " + numAffectedRows, 5);
 | 
			
		||||
				    ResultSet rs = preparedStmt.getGeneratedKeys();
 | 
			
		||||
				    if (numAffectedRows > 0)
 | 
			
		||||
				    {
 | 
			
		||||
				    	Miscellaneous.logEvent("Resulting amount < 0, entry deleted.", 2);
 | 
			
		||||
				    	rs.close();
 | 
			
		||||
						preparedStmt.close();
 | 
			
		||||
						return true;
 | 
			
		||||
				    }
 | 
			
		||||
	        	}
 | 
			
		||||
	        }
 | 
			
		||||
	        
 | 
			
		||||
	        res.close();
 | 
			
		||||
		}
 | 
			
		||||
		catch(Exception e)
 | 
			
		||||
		{
 | 
			
		||||
			Miscellaneous.logEvent(Diverse.getStackTraceAsString(e), 2);
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		return false;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	private boolean combinationExists(ShoppingList parentList, Product product, Unit unit)
 | 
			
		||||
	{
 | 
			
		||||
		String query = "SELECT count(listId) as combinationAmount FROM listEntries WHERE listId=? AND productId=? AND unit=?";
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,8 @@ public class Start
 | 
			
		||||
{
 | 
			
		||||
	public static void main(String[] args)
 | 
			
		||||
	{
 | 
			
		||||
		float amount = 0;
 | 
			
		||||
		String unitName = null;
 | 
			
		||||
		String productName = null;
 | 
			
		||||
		String action = null;
 | 
			
		||||
		String filePath = null;
 | 
			
		||||
@@ -29,7 +31,11 @@ public class Start
 | 
			
		||||
//		                System.out.println("Found double dash with command " + argstring.substring(2, len) );
 | 
			
		||||
		                String argName = argstring.substring(2, len);
 | 
			
		||||
		                doubleOptsList.add(argName);
 | 
			
		||||
		                if(argName.equalsIgnoreCase("shoppingProduct"))
 | 
			
		||||
		                if(argName.equalsIgnoreCase("amount"))
 | 
			
		||||
		                	amount = Float.parseFloat(args[i+1].replace("\"", ""));
 | 
			
		||||
		                else if(argName.equalsIgnoreCase("unitName"))
 | 
			
		||||
		                	unitName = args[i+1].replace("\"", "");
 | 
			
		||||
		                else if(argName.equalsIgnoreCase("shoppingProduct"))
 | 
			
		||||
			                productName = args[i+1].replace("\"", "");
 | 
			
		||||
		                else if(argName.equalsIgnoreCase("action"))
 | 
			
		||||
		                	action = args[i+1].replace("\"", "");
 | 
			
		||||
@@ -65,6 +71,8 @@ public class Start
 | 
			
		||||
				    if(!StringUtils.isEmpty(productName))
 | 
			
		||||
				    {
 | 
			
		||||
				    	ShoppingList list = ShoppingList.getMostRecentList();
 | 
			
		||||
				    	
 | 
			
		||||
				    	Unit u = Unit.getByName(unitName);
 | 
			
		||||
				    	Product p = Product.getByName(productName);
 | 
			
		||||
				    	
 | 
			
		||||
				    	if(list == null)
 | 
			
		||||
@@ -76,6 +84,8 @@ public class Start
 | 
			
		||||
			    		ShoppingListEntry entry = new ShoppingListEntry();
 | 
			
		||||
			    		entry.setParentList(list);
 | 
			
		||||
			    		entry.setProduct(p);
 | 
			
		||||
			    		entry.setAmount(amount);
 | 
			
		||||
			    		entry.setUnit(u);
 | 
			
		||||
 | 
			
		||||
			    		if(entry.create())
 | 
			
		||||
			    		{
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,8 @@ import java.sql.Statement;
 | 
			
		||||
import java.sql.Types;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
 | 
			
		||||
import org.apache.commons.lang3.StringUtils;
 | 
			
		||||
 | 
			
		||||
public class Unit
 | 
			
		||||
{
 | 
			
		||||
static ArrayList<Unit> unitCache = null;
 | 
			
		||||
@@ -16,6 +18,7 @@ static ArrayList<Unit> unitCache = null;
 | 
			
		||||
	String name;
 | 
			
		||||
	String abbreviation;
 | 
			
		||||
	boolean isDefault;
 | 
			
		||||
	boolean isDummy;
 | 
			
		||||
	
 | 
			
		||||
	public long getId()
 | 
			
		||||
	{
 | 
			
		||||
@@ -53,6 +56,15 @@ static ArrayList<Unit> unitCache = null;
 | 
			
		||||
		this.isDefault = isDefault;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	public boolean isDummy()
 | 
			
		||||
	{
 | 
			
		||||
		return isDummy;
 | 
			
		||||
	}
 | 
			
		||||
	public void setDummy(boolean isDummy)
 | 
			
		||||
	{
 | 
			
		||||
		this.isDummy = isDummy;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	public static ArrayList<Unit> readAllUnits()
 | 
			
		||||
	{
 | 
			
		||||
		if(unitCache == null)
 | 
			
		||||
@@ -84,6 +96,7 @@ static ArrayList<Unit> unitCache = null;
 | 
			
		||||
		        	u.setName(res.getString("name"));
 | 
			
		||||
		        	u.setAbbreviation(res.getString("abbreviation"));
 | 
			
		||||
		        	u.setDefault(res.getInt("isDefault") == 1);
 | 
			
		||||
		        	u.setDummy(res.getInt("isDummy") == 1);
 | 
			
		||||
		        	
 | 
			
		||||
		        	unitCache.add(u);
 | 
			
		||||
		        }
 | 
			
		||||
@@ -108,6 +121,16 @@ static ArrayList<Unit> unitCache = null;
 | 
			
		||||
	
 | 
			
		||||
	public static Unit getByName(String unitName)
 | 
			
		||||
	{
 | 
			
		||||
		if(StringUtils.isEmpty(unitName))
 | 
			
		||||
		{
 | 
			
		||||
			for(Unit u : readAllUnits())
 | 
			
		||||
			{
 | 
			
		||||
				if(u.isDummy())
 | 
			
		||||
					return u;
 | 
			
		||||
			}
 | 
			
		||||
			return null;
 | 
			
		||||
		}
 | 
			
		||||
		
 | 
			
		||||
		for(Unit u : readAllUnits())
 | 
			
		||||
		{
 | 
			
		||||
			if(u.getName().equalsIgnoreCase(unitName))
 | 
			
		||||
@@ -138,7 +161,7 @@ static ArrayList<Unit> unitCache = null;
 | 
			
		||||
	
 | 
			
		||||
	public boolean create()
 | 
			
		||||
	{
 | 
			
		||||
		String query = "INSERT INTO units (name, abbreviation, isDefault) VALUES (?, ?, ?)";
 | 
			
		||||
		String query = "INSERT INTO units (name, abbreviation, isDefault, isDummy) VALUES (?, ?, ?, ?)";
 | 
			
		||||
		Connection conn = DatabaseHandler.getInstance().getConnection();
 | 
			
		||||
		PreparedStatement preparedStmt = null;
 | 
			
		||||
		try
 | 
			
		||||
@@ -151,6 +174,11 @@ static ArrayList<Unit> unitCache = null;
 | 
			
		||||
				preparedStmt.setInt(3, 1);
 | 
			
		||||
			else
 | 
			
		||||
				preparedStmt.setInt(3, 0);
 | 
			
		||||
 | 
			
		||||
			if(this.isDummy)
 | 
			
		||||
				preparedStmt.setInt(4, 1);
 | 
			
		||||
			else
 | 
			
		||||
				preparedStmt.setInt(4, 0);
 | 
			
		||||
		    
 | 
			
		||||
		    preparedStmt.executeUpdate();
 | 
			
		||||
		    ResultSet rs = preparedStmt.getGeneratedKeys();
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user