Implement adding new inventory items
This commit is contained in:
parent
1f23ebfe2d
commit
29888851e7
@ -50,3 +50,4 @@ ssh -nNTvL 5432:fsmi-db.fsmi.org:5432 fsmi-login.fsmi.uni-karlsruhe.de
|
|||||||
- [ ] Make it possible to edit entries
|
- [ ] Make it possible to edit entries
|
||||||
- [ ] Improve project structure
|
- [ ] Improve project structure
|
||||||
- [ ] Figure out/Add documentation about building `entry.js`
|
- [ ] Figure out/Add documentation about building `entry.js`
|
||||||
|
- [ ] Use `flask.flash` for error messages
|
||||||
|
@ -339,7 +339,9 @@ viewSearchResult model =
|
|||||||
, td [] [ text model.locationName ]
|
, td [] [ text model.locationName ]
|
||||||
, td [] [ text <| showBool model.available ]
|
, td [] [ text <| showBool model.available ]
|
||||||
, td []
|
, td []
|
||||||
[ button [ onClick <| GotoItemEditor model ] [ text "Als Vorlage verwenden" ]
|
[ Html.form [ onSubmit <| GotoItemEditor model ]
|
||||||
|
[ button [] [ text "Als Vorlage verwenden" ]
|
||||||
|
]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -7,8 +7,6 @@ from psycopg2.extras import RealDictCursor
|
|||||||
|
|
||||||
def get_db():
|
def get_db():
|
||||||
if "db" not in g:
|
if "db" not in g:
|
||||||
# TODO: Make this configurable and use a default that works
|
|
||||||
# on the pool computers.
|
|
||||||
g.db = psycopg2.connect(current_app.config["DB_CONNECTION_STRING"])
|
g.db = psycopg2.connect(current_app.config["DB_CONNECTION_STRING"])
|
||||||
run_query_on(g.db, "add_views.sql", None)
|
run_query_on(g.db, "add_views.sql", None)
|
||||||
|
|
||||||
|
26
jon/db/entry/add_item_and_snack_entry.sql
Normal file
26
jon/db/entry/add_item_and_snack_entry.sql
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
DO $$
|
||||||
|
DECLARE new_item_id integer;
|
||||||
|
DECLARE new_snack_id integer;
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
-- Create a new inventory line
|
||||||
|
INSERT INTO garfield.inventory_items
|
||||||
|
(item_barcode, name, item_group, location, tax_group, sales_units, unit_price)
|
||||||
|
VALUES
|
||||||
|
(%(barcode)s, %(name)s, %(group_id)s, %(location_id)s, %(tax_group_id)s, %(sales_units)s, %(net_unit_price)s)
|
||||||
|
RETURNING item_id INTO new_item_id;
|
||||||
|
|
||||||
|
-- Delete any old snacks with the same barcode in the given location
|
||||||
|
PERFORM garfield.snack_delete(snack_id)
|
||||||
|
FROM garfield.snacks
|
||||||
|
WHERE snack_barcode = %(barcode)s
|
||||||
|
AND location_id = %(location_id)s;
|
||||||
|
|
||||||
|
-- Create a new snack entry...
|
||||||
|
SELECT garfield.snack_create(%(name)s, %(barcode)s, %(gross_unit_price)s, %(tax_group_id)s, %(location_id)s)
|
||||||
|
INTO new_snack_id;
|
||||||
|
|
||||||
|
-- ... and map it to the new inventory line
|
||||||
|
PERFORM garfield.inventory_map_snack(new_snack_id, new_item_id);
|
||||||
|
|
||||||
|
END$$
|
29
jon/entry.py
29
jon/entry.py
@ -1,4 +1,4 @@
|
|||||||
from flask import Blueprint, redirect, render_template, request, session
|
from flask import Blueprint, flash, redirect, render_template, request, session
|
||||||
|
|
||||||
|
|
||||||
from . import db
|
from . import db
|
||||||
@ -16,12 +16,37 @@ def index():
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@bp.post("/add-new-items")
|
||||||
|
def add_new_entries():
|
||||||
|
print(session)
|
||||||
|
|
||||||
|
i_know_what_im_doing = "i-know-what-im-doing" in request.form
|
||||||
|
if not i_know_what_im_doing:
|
||||||
|
return "Du weißt nicht was du tust", 400
|
||||||
|
|
||||||
|
orders = session.get("cart", default=[])
|
||||||
|
if not orders:
|
||||||
|
return "Keine Aufträge", 404
|
||||||
|
|
||||||
|
# I'm aware of execute_many and extras.execute_values but we don't need to
|
||||||
|
# optimize here (yet?). This way it's a bit easier to use anyways.
|
||||||
|
for order in orders:
|
||||||
|
with db.run_query("entry/add_item_and_snack_entry.sql", order) as cursor:
|
||||||
|
pass
|
||||||
|
db.get_db().commit()
|
||||||
|
|
||||||
|
# Reset the cart
|
||||||
|
session["cart"] = []
|
||||||
|
|
||||||
|
return redirect(request.referrer)
|
||||||
|
|
||||||
|
|
||||||
@bp.post("/delete-order")
|
@bp.post("/delete-order")
|
||||||
def delete_order():
|
def delete_order():
|
||||||
try:
|
try:
|
||||||
order_index = int(request.form["order-index"])
|
order_index = int(request.form["order-index"])
|
||||||
except:
|
except:
|
||||||
return f"Incomplete or mistyped form", 400
|
return "Incomplete or mistyped form", 400
|
||||||
|
|
||||||
cart = session.get("cart", default=[])
|
cart = session.get("cart", default=[])
|
||||||
del cart[order_index]
|
del cart[order_index]
|
||||||
|
@ -34,4 +34,9 @@
|
|||||||
</tr>
|
</tr>
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</table>
|
</table>
|
||||||
|
<form method="POST" action="/entry/add-new-items">
|
||||||
|
<input type="checkbox" name="i-know-what-im-doing" id="i-know-what-im-doing">
|
||||||
|
<label for="i-know-what-im-doing">I weiß, was ich tue</label>
|
||||||
|
<button>Neue Einträge anlegen</button>
|
||||||
|
</form>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user