done purchases remove, ocr scan, read image
This commit is contained in:
		@@ -1,5 +1,7 @@
 | 
			
		||||
const { query, nonQuery } = require("../db-config/postgresql-common");
 | 
			
		||||
 | 
			
		||||
const stringSimilarity = require('string-similarity');
 | 
			
		||||
 | 
			
		||||
//Create User Info
 | 
			
		||||
 | 
			
		||||
async function updateUser(uid, mid) {
 | 
			
		||||
@@ -266,6 +268,61 @@ async function deleteItem(item_id, group_id, sl_id) {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//Move to Done Purchases (delete items from shoppinglist & move into done_purchases table)
 | 
			
		||||
 | 
			
		||||
async function moveDoneItems(uid, sl_id, billcontent) {
 | 
			
		||||
    try {
 | 
			
		||||
        //Get Items From Shoppinglist
 | 
			
		||||
        let items = await query('SELECT row_to_json("Item") AS obj FROM "Item" JOIN "Group" USING (group_id) WHERE "Group".sl_id = $1;', [sl_id]);
 | 
			
		||||
        let removeableItems = compareData(items, billcontent);
 | 
			
		||||
 | 
			
		||||
        var today = new Date();
 | 
			
		||||
        var dd = today.getDate();
 | 
			
		||||
        var mm = today.getMonth()+1;
 | 
			
		||||
        var yyyy = today.getFullYear();
 | 
			
		||||
 | 
			
		||||
        if(dd<10) {
 | 
			
		||||
            dd = '0'+dd
 | 
			
		||||
        } 
 | 
			
		||||
 | 
			
		||||
        if(mm<10) {
 | 
			
		||||
            mm = '0'+mm
 | 
			
		||||
        } 
 | 
			
		||||
 | 
			
		||||
        today = mm + '/' + dd + '/' + yyyy;
 | 
			
		||||
 | 
			
		||||
        for(let item of removeableItems) {
 | 
			
		||||
            await nonQuery('INSERT INTO "Done_Purchase" (purchased_item_id, username, name, date, count) VALUES($1,$2,$3,$4,$5);',
 | 
			
		||||
             [generate_item_id(), uid, item.name, today, 1]);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        for(let item of removeableItems) {
 | 
			
		||||
            await nonQuery('DELETE FROM "Item" WHERE item_id = $1 AND group_id = $2 AND sl_id = $3;', [item.item_id, item.group_id, item.sl_id]);
 | 
			
		||||
            console.log(item);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return "done"
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    catch(error) {
 | 
			
		||||
        console.error(error);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//GET Done_Purchases
 | 
			
		||||
 | 
			
		||||
async function getDonePurchases(uid) {
 | 
			
		||||
    try {
 | 
			
		||||
        let result = await query('SELECT row_to_json("Done_Purchase") AS obj FROM "Done_Purchase" WHERE username = $1;', [uid]);
 | 
			
		||||
        return result;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    catch(error) {
 | 
			
		||||
        console.error(error);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -393,7 +450,61 @@ function users_to_array(admin, members) {
 | 
			
		||||
    return users;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//Compare Data
 | 
			
		||||
 | 
			
		||||
function compareData(listitems, doneitems) {
 | 
			
		||||
 | 
			
		||||
    let output = [];
 | 
			
		||||
 | 
			
		||||
    for(let item of listitems) {
 | 
			
		||||
        if(doneitems.includes(item.name)) {
 | 
			
		||||
            output.push(item);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        else if(doneitems.toUpperCase().includes(item.name.toUpperCase())) {
 | 
			
		||||
            output.push(item);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        else if(doneitems.toLowerCase().includes(item.name.toLowerCase())) {
 | 
			
		||||
            output.push(item);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        else if(probability(item.name, doneitems) > 0.3) {
 | 
			
		||||
            output.push(item);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        else if(probability(item.name.toUpperCase(), doneitems.toUpperCase()) > 0.3) {
 | 
			
		||||
            output.push(item);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        else if(probability(item.name.toLowerCase(), doneitems.toLowerCase()) > 0.3) {
 | 
			
		||||
            output.push(item);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return output;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
function probability(cur_item, data) {
 | 
			
		||||
 | 
			
		||||
    let best = 0;
 | 
			
		||||
 | 
			
		||||
    for(let i = 0; i < data.length; i++) {
 | 
			
		||||
 | 
			
		||||
        let prob = stringSimilarity.compareTwoStrings(cur_item, data.slice(i, i + cur_item.length));
 | 
			
		||||
 | 
			
		||||
        if(prob > best) {
 | 
			
		||||
            best = prob;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    return best;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
module.exports = {
 | 
			
		||||
    getShoppinglistsAdmin, getShoppinglistsShared, newShoppinglist, displayShoppinglist, deleteShoppinglist, addGroup,
 | 
			
		||||
    addItem, verifyInvite, createInvite, editShoppinglist, editGroup, editItem, deleteGroup, deleteItem, manInvite, updateUser
 | 
			
		||||
    addItem, verifyInvite, createInvite, editShoppinglist, editGroup, editItem, deleteGroup, deleteItem, manInvite, updateUser,
 | 
			
		||||
    moveDoneItems, getDonePurchases
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user