Compare commits

...

17 Commits

Author SHA1 Message Date
0971e3cfaf Errors fixed when creating/managing products 2021-05-08 15:07:52 +02:00
84e73a9ec5 Added rhasspyMasterUrl to php config. 2021-05-04 11:46:05 +02:00
89f51dab28 Updates 2021-05-02 21:45:32 +02:00
39db9470cc - 2021-05-02 21:24:30 +02:00
3c752a9ef1 Merge branch 'development' of
https://git.server47.de/jens/ShoppingList.git into development

Conflicts:
	phpInterface/shoppingList.php
2021-05-02 21:22:36 +02:00
07dd5f9c7e Heavily improved PHP interface. 2021-05-02 21:22:07 +02:00
9b9c1c2323 small fix. 2021-04-29 16:08:16 +02:00
4ddd2563b4 Amount/unit complete. 2021-04-29 16:05:50 +02:00
7bd9c4d16f Unit/amount complete. 2021-04-29 16:04:54 +02:00
db41fb525f Merge branch 'development' of
https://git.server47.de/jens/ShoppingList.git into development

Conflicts:
	ShoppingList/src/com/jens/rhasspy/shoppinglist/ShoppingListEntry.java
	ShoppingList/src/com/jens/rhasspy/shoppinglist/Start.java
2021-04-29 15:51:45 +02:00
34eb2ba9bf Unit/amount complete. 2021-04-29 15:47:47 +02:00
5b81de7484 Units/amount complete. 2021-04-29 15:42:59 +02:00
d75cb0a32f Amount/Unit progress 2021-04-28 23:19:51 +02:00
26f6e4b7c7 Unit/Amount 2021-04-27 23:28:08 +02:00
6ce0f76483 Amount/Unit progress 2021-04-27 19:59:01 +02:00
1950db40e0 Amount/Unit progress 2021-04-27 16:29:38 +02:00
3d79c8447c Started amount and unit work. 2021-04-26 02:35:11 +02:00
14 changed files with 2448 additions and 243 deletions

View File

@ -0,0 +1,196 @@
-- phpMyAdmin SQL Dump
-- version 5.0.4
-- https://www.phpmyadmin.net/
--
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
START TRANSACTION;
SET time_zone = "+00:00";
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;
--
-- Database: `shoppingList`
--
-- --------------------------------------------------------
--
-- Table structure for table `listEntries`
--
CREATE TABLE `listEntries` (
`listId` int(11) NOT NULL,
`productId` int(11) NOT NULL,
`amount` float NOT NULL DEFAULT 1,
`unit` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- --------------------------------------------------------
--
-- Table structure for table `lists`
--
CREATE TABLE `lists` (
`id` int(11) NOT NULL,
`creationTime` bigint(20) NOT NULL,
`comment` varchar(200) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- --------------------------------------------------------
--
-- Table structure for table `products`
--
CREATE TABLE `products` (
`id` int(11) NOT NULL,
`name` varchar(100) NOT NULL,
`synonyms` varchar(500) DEFAULT NULL COMMENT 'Separate entries with semicolons.',
`storeTypeId` int(11) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- --------------------------------------------------------
--
-- Table structure for table `settings`
--
CREATE TABLE `settings` (
`settingName` varchar(100) NOT NULL,
`settingValue` varchar(100) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Dumping data for table `settings`
--
INSERT INTO `settings` (`settingName`, `settingValue`) VALUES
('databaseVersion', '3');
-- --------------------------------------------------------
--
-- Table structure for table `storeTypes`
--
CREATE TABLE `storeTypes` (
`id` int(11) NOT NULL,
`name` varchar(200) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- --------------------------------------------------------
--
-- Table structure for table `units`
--
CREATE TABLE `units` (
`id` int(11) NOT NULL,
`name` varchar(100) NOT NULL,
`abbreviation` varchar(10) NOT NULL,
`isDefault` tinyint(2) NOT NULL DEFAULT 0,
`isDummy` tinyint(2) NOT NULL DEFAULT 0 COMMENT 'This unit will not actually be displayed. Instead an item will just be shown without amount or unit.',
`isPiece` tinyint(2) NOT NULL DEFAULT 0
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
--
-- Indexes for dumped tables
--
--
-- Indexes for table `listEntries`
--
ALTER TABLE `listEntries`
ADD PRIMARY KEY (`listId`,`productId`,`unit`),
ADD KEY `listEntries_ibfk_3` (`unit`),
ADD KEY `listEntries_ibfk_2` (`productId`);
--
-- Indexes for table `lists`
--
ALTER TABLE `lists`
ADD PRIMARY KEY (`id`);
--
-- Indexes for table `products`
--
ALTER TABLE `products`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `name` (`name`),
ADD KEY `storeTypeId` (`storeTypeId`);
--
-- Indexes for table `settings`
--
ALTER TABLE `settings`
ADD PRIMARY KEY (`settingName`);
--
-- Indexes for table `storeTypes`
--
ALTER TABLE `storeTypes`
ADD PRIMARY KEY (`id`),
ADD UNIQUE KEY `name` (`name`);
--
-- Indexes for table `units`
--
ALTER TABLE `units`
ADD PRIMARY KEY (`id`);
--
-- AUTO_INCREMENT for dumped tables
--
--
-- AUTO_INCREMENT for table `lists`
--
ALTER TABLE `lists`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT for table `products`
--
ALTER TABLE `products`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT for table `storeTypes`
--
ALTER TABLE `storeTypes`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- AUTO_INCREMENT for table `units`
--
ALTER TABLE `units`
MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;
--
-- Constraints for dumped tables
--
--
-- Constraints for table `listEntries`
--
ALTER TABLE `listEntries`
ADD CONSTRAINT `listEntries_ibfk_1` FOREIGN KEY (`listId`) REFERENCES `lists` (`id`),
ADD CONSTRAINT `listEntries_ibfk_2` FOREIGN KEY (`productId`) REFERENCES `products` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
ADD CONSTRAINT `listEntries_ibfk_3` FOREIGN KEY (`unit`) REFERENCES `units` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
--
-- Constraints for table `products`
--
ALTER TABLE `products`
ADD CONSTRAINT `products_ibfk_1` FOREIGN KEY (`storeTypeId`) REFERENCES `storeTypes` (`id`);
COMMIT;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

View File

@ -24,6 +24,7 @@ public class Product
{ {
this.id = id; this.id = id;
} }
public String getName() public String getName()
{ {
return name; return name;
@ -41,6 +42,7 @@ public class Product
{ {
this.synonyms = synonyms; this.synonyms = synonyms;
} }
public static ArrayList<Product> readAllProducts() public static ArrayList<Product> readAllProducts()
{ {
if(productCache == null) if(productCache == null)

View File

@ -143,6 +143,8 @@ public class ShoppingList
ShoppingListEntry entry = new ShoppingListEntry(); ShoppingListEntry entry = new ShoppingListEntry();
entry.setParentList(resultList); entry.setParentList(resultList);
entry.setProduct(Product.getById(res.getLong("productId"))); entry.setProduct(Product.getById(res.getLong("productId")));
entry.setAmount(res.getFloat("amount"));
entry.setUnit(Unit.getById(res.getLong("unit")));
resultList.getEntries().add(entry); resultList.getEntries().add(entry);
} }
@ -171,7 +173,7 @@ public class ShoppingList
return resultList; return resultList;
} }
public boolean send() public boolean sendViaEmail()
{ {
StringBuilder shoppingListString = new StringBuilder(); StringBuilder shoppingListString = new StringBuilder();
@ -194,7 +196,12 @@ public class ShoppingList
for(ShoppingListEntry entry : this.entries) for(ShoppingListEntry entry : this.entries)
{ {
if(entry.getProduct().getStoreType().equals(st)) if(entry.getProduct().getStoreType().equals(st))
{
if(entry.getUnit().isDummy)
shoppingListString.append(entry.getProduct().getName() + Diverse.lineSeparator); 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); shoppingListString.append(Diverse.lineSeparator);

View File

@ -10,6 +10,8 @@ public class ShoppingListEntry
{ {
ShoppingList parentList; ShoppingList parentList;
Product product; Product product;
float amount;
Unit unit;
public ShoppingList getParentList() public ShoppingList getParentList()
{ {
@ -31,30 +33,63 @@ public class ShoppingListEntry
this.product = product; this.product = product;
} }
public float getAmount()
{
return amount;
}
public void setAmount(float amount)
{
this.amount = amount;
}
public Unit getUnit()
{
return unit;
}
public void setUnit(Unit unit)
{
this.unit = unit;
}
public boolean create() public boolean create()
{ {
PreparedStatement preparedStmt = null; PreparedStatement preparedStmt = null;
Connection conn = null; Connection conn = null;
try try
{ {
if(amount <= 0 && unit != null && !unit.isDummy)
return false;
conn = DatabaseHandler.getInstance().getConnection(); conn = DatabaseHandler.getInstance().getConnection();
String parentQuery = "INSERT IGNORE INTO listEntries (listId, productId) VALUES (?, ?)"; if(!combinationExists(this.getParentList(), this.getProduct(), this.getUnit()))
{
String parentQuery = "INSERT INTO listEntries (listId, productId, amount, unit) VALUES (?, ?, ?, ?)";
preparedStmt = conn.prepareStatement(parentQuery, Statement.RETURN_GENERATED_KEYS); preparedStmt = conn.prepareStatement(parentQuery, Statement.RETURN_GENERATED_KEYS);
preparedStmt.setLong(1, this.getParentList().getId()); preparedStmt.setLong(1, this.getParentList().getId());
preparedStmt.setLong(2, this.getProduct().getId()); preparedStmt.setLong(2, this.getProduct().getId());
preparedStmt.setFloat(3, this.getAmount());
preparedStmt.setLong(4, this.getUnit().getId());
Miscellaneous.logEvent(preparedStmt.toString(), 5); Miscellaneous.logEvent(preparedStmt.toString(), 5);
long numAffectedRows = preparedStmt.executeUpdate(); long numAffectedRows = preparedStmt.executeUpdate();
Miscellaneous.logEvent("AMOUNT OF UPDATED ROWS: " + numAffectedRows, 5); Miscellaneous.logEvent("AMOUNT OF UPDATED ROWS: " + numAffectedRows, 5);
ResultSet rs = preparedStmt.getGeneratedKeys(); ResultSet rs = preparedStmt.getGeneratedKeys();
// if (numAffectedRows > 0) if (numAffectedRows > 0)
// { {
rs.close();
preparedStmt.close(); preparedStmt.close();
return true; return true;
// } }
}
else
{
return updateAmount(false);
}
} }
catch(Exception e) catch(Exception e)
{ {
@ -81,8 +116,13 @@ public class ShoppingListEntry
Connection conn = null; Connection conn = null;
try try
{ {
if(amount <= 0 && unit != null && !unit.isDummy)
return false;
conn = DatabaseHandler.getInstance().getConnection(); conn = DatabaseHandler.getInstance().getConnection();
if(this.getAmount() == 0 || this.getUnit().isDummy())
{
String parentQuery = "DELETE FROM listEntries WHERE listId=? AND productId=?"; String parentQuery = "DELETE FROM listEntries WHERE listId=? AND productId=?";
preparedStmt = conn.prepareStatement(parentQuery, Statement.RETURN_GENERATED_KEYS); preparedStmt = conn.prepareStatement(parentQuery, Statement.RETURN_GENERATED_KEYS);
@ -93,12 +133,20 @@ public class ShoppingListEntry
long numAffectedRows = preparedStmt.executeUpdate(); long numAffectedRows = preparedStmt.executeUpdate();
Miscellaneous.logEvent("AMOUNT OF UPDATED ROWS: " + numAffectedRows, 5); Miscellaneous.logEvent("AMOUNT OF UPDATED ROWS: " + numAffectedRows, 5);
ResultSet rs = preparedStmt.getGeneratedKeys(); // ResultSet rs = preparedStmt.getGeneratedKeys();
// if (numAffectedRows > 0) // if (numAffectedRows > 0)
// { // {
preparedStmt.close(); preparedStmt.close();
return true; return true;
// } // }
}
else
{
if(combinationExists(this.getParentList(), this.getProduct(), this.getUnit()))
return updateAmount(true);
else
return true; // Combination to be deleted does not exist. So what?
}
} }
catch(Exception e) catch(Exception e)
{ {
@ -118,4 +166,141 @@ public class ShoppingListEntry
return false; return false;
} }
protected boolean updateAmount(boolean delete)
{
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");
boolean condition = true;
if(delete)
condition = currentAmount - this.getAmount() > 0;
if(condition)
{
// Update the amount
String updateQuery = "UPDATE listEntries set amount=? WHERE listId=? AND productId=? AND unit=?";
preparedStmt = conn.prepareStatement(updateQuery);
if(delete)
preparedStmt.setFloat(1, currentAmount - this.getAmount());
else
preparedStmt.setFloat(1, currentAmount + this.getAmount());
preparedStmt.setLong(2, this.getParentList().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.getParentList().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;
}
else
preparedStmt.close();
}
}
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=?";
long entryAmount = 0;
try
{
PreparedStatement preparedStmt = DatabaseHandler.getInstance().getConnection().prepareStatement(query);
preparedStmt.setLong(1, parentList.getId());
preparedStmt.setLong(2, product.getId());
preparedStmt.setLong(3, unit.getId());
Miscellaneous.logEvent(preparedStmt.toString(), 5);
ResultSet res = preparedStmt.executeQuery();
if(res.next())
entryAmount = res.getLong("combinationAmount");
res.close();
preparedStmt.close();
}
catch(Exception e)
{
Miscellaneous.logEvent(Diverse.getStackTraceAsString(e), 1);
}
if(entryAmount > 0)
return true;
return false;
}
@Override
public String toString()
{
if(this.getUnit() != null)
{
if(!this.getUnit().isDummy())
return String.valueOf(getAmount()) + " " + getUnit().getMainName() + " " + getProduct().getName();
}
return getProduct().getName();
}
} }

View File

@ -9,6 +9,8 @@ public class Start
{ {
public static void main(String[] args) public static void main(String[] args)
{ {
float amount = 0;
String unitName = null;
String productName = null; String productName = null;
String action = null; String action = null;
String filePath = null; String filePath = null;
@ -29,7 +31,11 @@ public class Start
// System.out.println("Found double dash with command " + argstring.substring(2, len) ); // System.out.println("Found double dash with command " + argstring.substring(2, len) );
String argName = argstring.substring(2, len); String argName = argstring.substring(2, len);
doubleOptsList.add(argName); doubleOptsList.add(argName);
if(argName.equalsIgnoreCase("shoppingProduct")) if(argName.equalsIgnoreCase("shoppingAmount"))
amount = Float.parseFloat(args[i+1].replace("\"", ""));
else if(argName.equalsIgnoreCase("shoppingUnit"))
unitName = args[i+1].replace("\"", "");
else if(argName.equalsIgnoreCase("shoppingProduct"))
productName = args[i+1].replace("\"", ""); productName = args[i+1].replace("\"", "");
else if(argName.equalsIgnoreCase("action")) else if(argName.equalsIgnoreCase("action"))
action = args[i+1].replace("\"", ""); action = args[i+1].replace("\"", "");
@ -65,17 +71,24 @@ public class Start
if(!StringUtils.isEmpty(productName)) if(!StringUtils.isEmpty(productName))
{ {
ShoppingList list = ShoppingList.getMostRecentList(); ShoppingList list = ShoppingList.getMostRecentList();
Unit u = Unit.getByName(unitName);
Product p = Product.getByName(productName); Product p = Product.getByName(productName);
ShoppingListEntry entry = new ShoppingListEntry();
entry.setParentList(list);
entry.setProduct(p);
entry.setAmount(amount);
entry.setUnit(u);
if(amount > 0 && (u == null || u.isDummy))
entry.setUnit(Unit.getPieceUnit());
if(list == null) if(list == null)
exitWithError(Settings.languageBlock.get("couldNotCreateList")); exitWithError(Settings.languageBlock.get("couldNotCreateList"));
if(p == null) if(p == null)
exitWithError(Settings.languageBlock.get("productNotFound") + " " + productName); exitWithError(Settings.languageBlock.get("productNotFound") + " " + entry.toString());
ShoppingListEntry entry = new ShoppingListEntry();
entry.setParentList(list);
entry.setProduct(p);
if(entry.create()) if(entry.create())
{ {
@ -83,7 +96,7 @@ public class Start
System.exit(0); System.exit(0);
} }
else else
exitWithError(Settings.languageBlock.get("couldNotAddProdToList") + " " + productName); exitWithError(Settings.languageBlock.get("couldNotAddProdToList") + " " + entry.toString());
} }
else else
System.out.println(Settings.languageBlock.get("noProdSpecified")); System.out.println(Settings.languageBlock.get("noProdSpecified"));
@ -93,26 +106,31 @@ public class Start
{ {
ShoppingList list = ShoppingList.getMostRecentList(); ShoppingList list = ShoppingList.getMostRecentList();
Product p = Product.getByName(productName); Product p = Product.getByName(productName);
Unit u = Unit.getByName(unitName);
ShoppingListEntry entry = new ShoppingListEntry();
entry.setParentList(list);
entry.setProduct(p);
entry.setAmount(amount);
entry.setUnit(u);
if(amount > 0 && (u == null || u.isDummy))
entry.setUnit(Unit.getPieceUnit());
if(list == null) if(list == null)
exitWithError(Settings.languageBlock.get("couldNotCreateList")); exitWithError(Settings.languageBlock.get("couldNotCreateList"));
if(p == null) if(p == null)
exitWithError(Settings.languageBlock.get("productNotFound") + " " + productName); exitWithError(Settings.languageBlock.get("productNotFound") + " " + entry.toString());
for(ShoppingListEntry entry : list.getEntries())
{
if(entry.getProduct().equals(p))
{
if(entry.delete()) if(entry.delete())
{ {
DatabaseHandler.getInstance().disconnect(); DatabaseHandler.getInstance().disconnect();
System.exit(0); System.exit(0);
} }
else else
Miscellaneous.logEvent(Settings.languageBlock.get("couldNotRemoveProdFromList") + " " + productName, 2); exitWithError(Settings.languageBlock.get("couldNotRemoveProdFromList") + " " + entry.toString());
}
}
// If it wasn't on the list - why care? // If it wasn't on the list - why care?
DatabaseHandler.getInstance().disconnect(); DatabaseHandler.getInstance().disconnect();
System.exit(0); System.exit(0);
@ -121,7 +139,7 @@ public class Start
System.out.println(Settings.languageBlock.get("noProdSpecified")); System.out.println(Settings.languageBlock.get("noProdSpecified"));
break; break;
case "sendList": case "sendList":
if(ShoppingList.getMostRecentList().send()) if(ShoppingList.getMostRecentList().sendViaEmail())
{ {
// System.out.println("Liste wurde verschickt."); // System.out.println("Liste wurde verschickt.");
DatabaseHandler.getInstance().disconnect(); DatabaseHandler.getInstance().disconnect();

View File

@ -0,0 +1,274 @@
package com.jens.rhasspy.shoppinglist;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
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;
long id;
String name;
String abbreviation;
boolean isDefault;
boolean isDummy;
boolean isPiece;
public long getId()
{
return id;
}
public void setId(long id)
{
this.id = id;
}
public String getMainName()
{
if(name.contains(";"))
return name.split(";")[0];
else
return name;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
public String getAbbreviation()
{
return abbreviation;
}
public void setAbbreviation(String abbreviation)
{
this.abbreviation = abbreviation;
}
public boolean isDefault()
{
return isDefault;
}
public void setDefault(boolean isDefault)
{
this.isDefault = isDefault;
}
public boolean isDummy()
{
return isDummy;
}
public void setDummy(boolean isDummy)
{
this.isDummy = isDummy;
}
public boolean isPiece()
{
return isPiece;
}
public void setPiece(boolean isPiece)
{
this.isPiece = isPiece;
}
public static ArrayList<Unit> readAllUnits()
{
if(unitCache == null)
{
try
{
Connection conn = DatabaseHandler.getInstance().getConnection();
if(conn == null)
Start.exitWithError(Settings.languageBlock.get("dbCouldNotConnect"));
PreparedStatement preparedStmt = null;
String query = "SELECT * FROM units";
preparedStmt = conn.prepareStatement(query);
Miscellaneous.logEvent(preparedStmt.toString(), 5);
ResultSet res = preparedStmt.executeQuery();
unitCache = new ArrayList<Unit>();
while (res.next())
{
Unit u = new Unit();
u.setId(res.getLong("id"));
u.setName(res.getString("name"));
u.setAbbreviation(res.getString("abbreviation"));
u.setDefault(res.getInt("isDefault") == 1);
u.setDummy(res.getInt("isDummy") == 1);
u.setPiece(res.getInt("isPiece") == 1);
unitCache.add(u);
}
res.close();
preparedStmt.close();
}
catch(Exception e)
{
Start.exitWithError(Settings.languageBlock.get("dbCouldNotConnect"));
}
}
return unitCache;
}
@Override
public boolean equals(Object obj)
{
return ((Unit)obj).getName().equalsIgnoreCase(getName());
}
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())
{
for(String unitSynonym : u.getName().split(";"))
{
if(unitSynonym.equalsIgnoreCase(unitName))
return u;
else if(unitSynonym.equalsIgnoreCase(unitName.replace("-", " ")))
return u;
}
}
return null;
}
@Override
public String toString()
{
if(getName().contains(";"))
return getName().split(";")[0];
else
return getName();
}
public static Unit getById(long id)
{
for(Unit u : readAllUnits())
{
if(u.getId() == id)
return u;
}
return null;
}
public boolean create()
{
String query = "INSERT INTO units (name, abbreviation, isDefault, isDummy, isPiece) VALUES (?, ?, ?, ?, ?)";
Connection conn = DatabaseHandler.getInstance().getConnection();
PreparedStatement preparedStmt = null;
try
{
preparedStmt = conn.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
preparedStmt.setString(1, this.getName());
preparedStmt.setString(2, this.getAbbreviation());
if(this.isDefault)
preparedStmt.setInt(3, 1);
else
preparedStmt.setInt(3, 0);
if(this.isDummy)
preparedStmt.setInt(4, 1);
else
preparedStmt.setInt(4, 0);
if(this.isPiece)
preparedStmt.setInt(5, 1);
else
preparedStmt.setInt(5, 0);
preparedStmt.executeUpdate();
ResultSet rs = preparedStmt.getGeneratedKeys();
if (rs.next())
{
this.setId(rs.getInt(1));
Miscellaneous.logEvent("INSERT-ID: " + String.valueOf(this.getId()), 5);
rs.close();
preparedStmt.close();
Miscellaneous.logEvent("Unit has been successfully created.", 2);
return true;
}
else
{
rs.close();
String error = "Insert new unit failed.";
Miscellaneous.logEvent(error, 1);
}
}
catch (SQLException e)
{
Miscellaneous.logEvent(Diverse.getStackTraceAsString(e), 1);
}
finally
{
try
{
if(preparedStmt != null && !preparedStmt.isClosed())
preparedStmt.close();
}
catch (SQLException e)
{
}
}
return false;
}
public static Unit getDefaultUnit()
{
for(Unit u : readAllUnits())
{
if(u.isDefault())
return u;
}
return null;
}
public static Unit getPieceUnit()
{
for(Unit u : readAllUnits())
{
if(u.isPiece())
return u;
}
return null;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -7,5 +7,6 @@
public static $mysqlpw = 'somePassword'; //Password public static $mysqlpw = 'somePassword'; //Password
public static $mysqldb = 'shoppingList'; //Database public static $mysqldb = 'shoppingList'; //Database
public static $mysqlPort = 3306; public static $mysqlPort = 3306;
public static $rhasspyMasterUrl = "http://rhasspy-master:12101"; // URL of your Rhasspy master webpage WITHOUT ending slash. It is required if you want to trigger a retraining.
} }
?> ?>

View File

@ -1,12 +1,32 @@
#!/bin/bash #!/bin/bash
SHOPPINGITEM="" SHOPPINGITEM=""
AMOUNT=""
UNIT=""
SITEID="" SITEID=""
PARAMS="" PARAMS=""
SESSIONID="" SESSIONID=""
while (( "$#" )); do while (( "$#" )); do
case "$1" in case "$1" in
--shoppingAmount)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
AMOUNT=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
--shoppingUnit)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
UNIT=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
--shoppingProduct) --shoppingProduct)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
SHOPPINGITEM=$2 SHOPPINGITEM=$2
@ -53,7 +73,21 @@ then
echo "Was soll ich auf die Liste setzen?" echo "Was soll ich auf die Liste setzen?"
exit 1 exit 1
else else
lengthAmount=${#AMOUNT}
lengthUnit=${#UNIT}
if [ $lengthAmount -gt 0 ]
then
if [ $lengthUnit -gt 0 ]
then
java -jar /home/pi/hc_scripts/ShoppingList.jar --action addToList --shoppingAmount $AMOUNT --shoppingUnit $UNIT --shoppingProduct $SHOPPINGITEM
else
java -jar /home/pi/hc_scripts/ShoppingList.jar --action addToList --shoppingAmount $AMOUNT --shoppingProduct $SHOPPINGITEM
fi
else
java -jar /home/pi/hc_scripts/ShoppingList.jar --action addToList --shoppingProduct $SHOPPINGITEM java -jar /home/pi/hc_scripts/ShoppingList.jar --action addToList --shoppingProduct $SHOPPINGITEM
fi
if [ "$?" -eq "0" ] if [ "$?" -eq "0" ]
then then
exit 0 exit 0

View File

@ -1,12 +1,32 @@
#!/bin/bash #!/bin/bash
SHOPPINGITEM="" SHOPPINGITEM=""
AMOUNT=""
UNIT=""
SITEID="" SITEID=""
PARAMS="" PARAMS=""
SESSIONID="" SESSIONID=""
while (( "$#" )); do while (( "$#" )); do
case "$1" in case "$1" in
--shoppingAmount)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
AMOUNT=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
--shoppingUnit)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
UNIT=$2
shift 2
else
echo "Error: Argument for $1 is missing" >&2
exit 1
fi
;;
--shoppingProduct) --shoppingProduct)
if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then if [ -n "$2" ] && [ ${2:0:1} != "-" ]; then
SHOPPINGITEM=$2 SHOPPINGITEM=$2
@ -53,7 +73,21 @@ then
echo "Was soll ich von der Liste streichen?" echo "Was soll ich von der Liste streichen?"
exit 1 exit 1
else else
lengthAmount=${#AMOUNT}
lengthUnit=${#UNIT}
if [ $lengthAmount -gt 0 ]
then
if [ $lengthUnit -gt 0 ]
then
java -jar /home/pi/hc_scripts/ShoppingList.jar --action removeFromList --shoppingAmount $AMOUNT --shoppingUnit $UNIT --shoppingProduct $SHOPPINGITEM
else
java -jar /home/pi/hc_scripts/ShoppingList.jar --action removeFromList --shoppingAmount $AMOUNT --shoppingProduct $SHOPPINGITEM
fi
else
java -jar /home/pi/hc_scripts/ShoppingList.jar --action removeFromList --shoppingProduct $SHOPPINGITEM java -jar /home/pi/hc_scripts/ShoppingList.jar --action removeFromList --shoppingProduct $SHOPPINGITEM
fi
if [ "$?" -eq "0" ] if [ "$?" -eq "0" ]
then then
exit 0 exit 0

View File

@ -0,0 +1,5 @@
#!/bin/bash
# Adjust the URL to match where your php interface is.
curl http://yourWebserver/rhasspy/shoppingList.php?command=printProductList

View File

@ -0,0 +1,5 @@
#!/bin/bash
# Adjust the URL to match where your php interface is.
curl http://yourWebserver/rhasspy/shoppingList.php?command=printUnitList