diff --git a/ft-app/app/routers/option_trades.py b/ft-app/app/routers/option_trades.py
index 7b7b96d..54cf942 100644
--- a/ft-app/app/routers/option_trades.py
+++ b/ft-app/app/routers/option_trades.py
@@ -103,6 +103,42 @@ def close_trade(
return RedirectResponse("/options/", status_code=303)
+@router.post("/{trade_id}/edit")
+def edit_trade(
+ request: Request,
+ trade_id: int,
+ contract_code: str = Form(...),
+ option_type: str = Form(...),
+ direction: str = Form(...),
+ strike_price: float = Form(...),
+ open_date: str = Form(...),
+ open_price: float = Form(...),
+ open_fee: float = Form(0.0),
+ close_date: str = Form(""),
+ close_price: float = Form(None),
+ close_fee: float = Form(None),
+ db: Session = Depends(get_db),
+):
+ t = db.query(OptionTrade).filter(OptionTrade.id == trade_id).first()
+ if t:
+ code = contract_code.upper()
+ contract = db.query(Contract).filter(Contract.code == code).first()
+ t.product_code = contract.product.code if contract else code[:2]
+ t.contract_code = code
+ t.option_type = option_type
+ t.direction = direction
+ t.strike_price = strike_price
+ t.open_date = date.fromisoformat(open_date)
+ t.open_price = open_price
+ t.open_fee = open_fee
+ if close_date and close_price is not None:
+ t.close_date = date.fromisoformat(close_date)
+ t.close_price = close_price
+ t.close_fee = close_fee or 0
+ db.commit()
+ return RedirectResponse("/options/", status_code=303)
+
+
@router.post("/{trade_id}/delete")
def delete_trade(trade_id: int, db: Session = Depends(get_db)):
t = db.query(OptionTrade).filter(OptionTrade.id == trade_id).first()
diff --git a/ft-app/app/routers/trades.py b/ft-app/app/routers/trades.py
index 862a03b..fe8990a 100644
--- a/ft-app/app/routers/trades.py
+++ b/ft-app/app/routers/trades.py
@@ -108,6 +108,38 @@ def close_trade(
return RedirectResponse("/trades/", status_code=303)
+@router.post("/{trade_id}/edit")
+def edit_trade(
+ request: Request,
+ trade_id: int,
+ contract_code: str = Form(...),
+ direction: str = Form(...),
+ open_date: str = Form(...),
+ open_price: float = Form(...),
+ open_fee: float = Form(0.0),
+ close_date: str = Form(""),
+ close_price: float = Form(None),
+ close_fee: float = Form(None),
+ db: Session = Depends(get_db),
+):
+ t = db.query(Trade).filter(Trade.id == trade_id).first()
+ if t:
+ code = contract_code.upper()
+ contract = db.query(Contract).filter(Contract.code == code).first()
+ t.product_code = contract.product.code if contract else code[:2]
+ t.contract_code = code
+ t.direction = direction
+ t.open_date = date.fromisoformat(open_date)
+ t.open_price = open_price
+ t.open_fee = open_fee
+ if close_date and close_price is not None:
+ t.close_date = date.fromisoformat(close_date)
+ t.close_price = close_price
+ t.close_fee = close_fee or 0
+ db.commit()
+ return RedirectResponse("/trades/", status_code=303)
+
+
@router.post("/{trade_id}/delete")
def delete_trade(trade_id: int, db: Session = Depends(get_db)):
t = db.query(Trade).filter(Trade.id == trade_id).first()
diff --git a/ft-app/app/templates/options.html b/ft-app/app/templates/options.html
index d3d7653..d36db8e 100644
--- a/ft-app/app/templates/options.html
+++ b/ft-app/app/templates/options.html
@@ -118,7 +118,9 @@
-
|
@@ -200,6 +202,8 @@
{% endif %}
+
@@ -258,6 +262,67 @@ function hideCloseForm() {
{% endif %}
+
+
+
@@ -285,6 +350,30 @@ function showPnlDrawer(title, direction, openPrice, closePrice, openFee, closeFe
document.getElementById('pnlOverlay').style.display = 'block';
document.getElementById('pnlBox').style.display = 'block';
}
+function showEditForm(type, id, productCode, contractCode, optionType, direction, strike, openPrice, openFee, openDate, closePrice, closeFee, closeDate, status) {
+ document.getElementById('editForm').action = '/' + type + 's/' + id + '/edit';
+ document.getElementById('editContract').value = contractCode;
+ document.getElementById('editOptionType').value = optionType;
+ document.getElementById('editDirection').value = direction;
+ document.getElementById('editStrike').value = strike;
+ document.getElementById('editOpenDate').value = openDate;
+ document.getElementById('editOpenPrice').value = openPrice;
+ document.getElementById('editOpenFee').value = openFee || 0;
+ if (status === 'closed' && closeDate) {
+ document.getElementById('editCloseFields').style.display = 'block';
+ document.getElementById('editCloseDate').value = closeDate;
+ document.getElementById('editClosePrice').value = closePrice;
+ document.getElementById('editCloseFee').value = closeFee || 0;
+ } else {
+ document.getElementById('editCloseFields').style.display = 'none';
+ }
+ document.getElementById('editFormOverlay').style.display = 'block';
+ document.getElementById('editFormBox').style.display = 'block';
+}
+function hideEditForm() {
+ document.getElementById('editFormOverlay').style.display = 'none';
+ document.getElementById('editFormBox').style.display = 'none';
+}
function hidePnlDrawer() {
document.getElementById('pnlOverlay').style.display = 'none';
document.getElementById('pnlBox').style.display = 'none';
diff --git a/ft-app/app/templates/trades.html b/ft-app/app/templates/trades.html
index c1bc0c2..bb87ac8 100644
--- a/ft-app/app/templates/trades.html
+++ b/ft-app/app/templates/trades.html
@@ -98,7 +98,9 @@
|
-
|
@@ -172,6 +174,8 @@
{% endif %}
+
@@ -230,6 +234,55 @@ function hideCloseForm() {
{% endif %}
+
+
+
@@ -261,5 +314,27 @@ function hidePnlDrawer() {
document.getElementById('pnlOverlay').style.display = 'none';
document.getElementById('pnlBox').style.display = 'none';
}
+function showEditForm(type, id, productCode, contractCode, direction, openPrice, openFee, openDate, closePrice, closeFee, closeDate, status) {
+ document.getElementById('editForm').action = '/' + type + 's/' + id + '/edit';
+ document.getElementById('editContract').value = contractCode;
+ document.getElementById('editDirection').value = direction;
+ document.getElementById('editOpenDate').value = openDate;
+ document.getElementById('editOpenPrice').value = openPrice;
+ document.getElementById('editOpenFee').value = openFee || 0;
+ if (status === 'closed' && closeDate) {
+ document.getElementById('editCloseFields').style.display = 'block';
+ document.getElementById('editCloseDate').value = closeDate;
+ document.getElementById('editClosePrice').value = closePrice;
+ document.getElementById('editCloseFee').value = closeFee || 0;
+ } else {
+ document.getElementById('editCloseFields').style.display = 'none';
+ }
+ document.getElementById('editFormOverlay').style.display = 'block';
+ document.getElementById('editFormBox').style.display = 'block';
+}
+function hideEditForm() {
+ document.getElementById('editFormOverlay').style.display = 'none';
+ document.getElementById('editFormBox').style.display = 'none';
+}
{% endblock %}
|