From 5f53eb8e4e77bdb146c82698d60207b853d75f95 Mon Sep 17 00:00:00 2001 From: ben Date: Tue, 13 Dec 2022 23:41:40 +0000 Subject: [PATCH] tagged working --- lnbits/extensions/splitpayments/models.py | 2 +- .../splitpayments/static/js/index.js | 31 +++++++--- lnbits/extensions/splitpayments/tasks.py | 62 ++++++++++++------- .../templates/splitpayments/index.html | 3 +- 4 files changed, 67 insertions(+), 31 deletions(-) diff --git a/lnbits/extensions/splitpayments/models.py b/lnbits/extensions/splitpayments/models.py index 88f98888b..fc3db2c6d 100644 --- a/lnbits/extensions/splitpayments/models.py +++ b/lnbits/extensions/splitpayments/models.py @@ -16,7 +16,7 @@ class TargetPutList(BaseModel): wallet: str = Query(...) alias: str = Query("") percent: float = Query(..., ge=0, lt=100) - tag: str = Query("") + tag: str class TargetPut(BaseModel): diff --git a/lnbits/extensions/splitpayments/static/js/index.js b/lnbits/extensions/splitpayments/static/js/index.js index 9426b41a0..9d7eb4091 100644 --- a/lnbits/extensions/splitpayments/static/js/index.js +++ b/lnbits/extensions/splitpayments/static/js/index.js @@ -39,6 +39,15 @@ new Vue({ timeout: 500 }) }, + clearTarget(index) { + this.targets.splice(index, 1) + console.log(this.targets) + this.$q.notify({ + message: + 'Removed item. You must click to save manually.', + timeout: 500 + }) + }, getTargets() { LNbits.api .request( @@ -52,8 +61,17 @@ new Vue({ .then(response => { this.currentHash = hashTargets(response.data) this.targets = response.data.concat({}) - for (let i = 0; i < this.targets.length; i++) { - if(this.targets[i].tag != + for (let i = 0; i < this.targets.length; i++) { + if(this.targets[i].tag.length > 0){ + this.targets[i].method = "tag" + } + else if (this.targets[i].percent.length > 0){ + this.targets[i].method = "split" + } + else{ + this.targets[i].method = "" + } + } }) }, @@ -64,17 +82,19 @@ new Vue({ clearChanged(index) { if(this.targets[index].method == 'split'){ this.targets[index].tag = null + this.targets[index].method = 'split' } else{ this.targets[index].percent = null + this.targets[index].method = 'tag' } }, targetChanged(index) { // fix percent min and max range - console.log(this.targets) if (this.targets[index].percent) { if (this.targets[index].percent > 100) this.targets[index].percent = 100 if (this.targets[index].percent < 0) this.targets[index].percent = 0 + this.targets[index].tag = "" } // not percentage @@ -128,15 +148,12 @@ new Vue({ if (t !== index) target.percent -= +(diff * target.percent).toFixed(2) }) } - // overwrite so changes appear this.targets = this.targets - console.log(this.targets) }, saveTargets() { - console.log(this.targets) for (let i = 0; i < this.targets.length; i++) { - if (this.targets[i].tag){ + if (this.targets[i].tag != ''){ this.targets[i].percent = 0 } else{ diff --git a/lnbits/extensions/splitpayments/tasks.py b/lnbits/extensions/splitpayments/tasks.py index c5cac4a6e..2bbefd1d5 100644 --- a/lnbits/extensions/splitpayments/tasks.py +++ b/lnbits/extensions/splitpayments/tasks.py @@ -25,7 +25,7 @@ async def on_invoice_paid(payment: Payment) -> None: return targets = await get_targets(payment.wallet_id) - + logger.debug(targets) if not targets: return @@ -35,28 +35,46 @@ async def on_invoice_paid(payment: Payment) -> None: logger.error("splitpayment failure: total percent adds up to more than 100%") return - logger.debug(f"performing split payments to {len(targets)} targets") + logger.debug(f"checking if tagged for {len(targets)} targets") + tagged = False for target in targets: - - if target.tag and payment.extra.get("tag") == target.tag: - amount = int(payment.amount) - elif target.percent: + if payment.extra.get("tag") == target.tag: + tagged = True + payment_hash, payment_request = await create_invoice( + wallet_id=target.wallet, + amount=int(payment.amount / 1000), # sats + internal=True, + memo=f"Pushed tagged payment to {target.alias}", + extra={"tag": "splitpayments"}, + ) + logger.debug(f"created split invoice: {payment_hash}") + + checking_id = await pay_invoice( + payment_request=payment_request, + wallet_id=payment.wallet_id, + extra={"tag": "splitpayments"}, + ) + logger.debug(f"paid split invoice: {checking_id}") + + logger.debug(f"performing split to {len(targets)} targets") + logger.debug("pitbull") + if tagged == False: + for target in targets: amount = int(payment.amount * target.percent / 100) # msats - else: - return + payment_hash, payment_request = await create_invoice( + wallet_id=target.wallet, + amount=int(amount / 1000), # sats + internal=True, + memo=f"split payment: {target.percent}% for {target.alias or target.wallet}", + extra={"tag": "splitpayments"}, + ) + logger.debug(f"created split invoice: {payment_hash}") + + checking_id = await pay_invoice( + payment_request=payment_request, + wallet_id=payment.wallet_id, + extra={"tag": "splitpayments"}, + ) + logger.debug(f"paid split invoice: {checking_id}") - payment_hash, payment_request = await create_invoice( - wallet_id=target.wallet, - amount=int(amount / 1000), # sats - internal=True, - memo=f"split payment: {target.percent}% for {target.alias or target.wallet}", - extra={"tag": "splitpayments"}, - ) - logger.debug(f"created split invoice: {payment_hash}") - checking_id = await pay_invoice( - payment_request=payment_request, - wallet_id=payment.wallet_id, - extra={"tag": "splitpayments"}, - ) - logger.debug(f"paid split invoice: {checking_id}") diff --git a/lnbits/extensions/splitpayments/templates/splitpayments/index.html b/lnbits/extensions/splitpayments/templates/splitpayments/index.html index 86a711f03..8154f4c77 100644 --- a/lnbits/extensions/splitpayments/templates/splitpayments/index.html +++ b/lnbits/extensions/splitpayments/templates/splitpayments/index.html @@ -67,7 +67,7 @@ > Add more +