def new_bank_transaction(transaction): result = [] bank_account = frappe.db.get_value( "Bank Account", dict(integration_id=transaction["account_id"])) if float(transaction["amount"]) >= 0: debit = float(transaction["amount"]) credit = 0 else: debit = 0 credit = abs(float(transaction["amount"])) status = "Pending" if transaction["pending"] == "True" else "Settled" try: tags = [] tags += transaction["category"] tags += ["Plaid Cat. {}".format(transaction["category_id"])] except KeyError: pass if not frappe.db.exists( "Bank Transaction", dict(transaction_id=transaction["transaction_id"])): try: new_transaction = frappe.get_doc({ "doctype": "Bank Transaction", "date": getdate(transaction["date"]), "status": status, "bank_account": bank_account, "debit": debit, "credit": credit, "currency": transaction["iso_currency_code"], "transaction_id": transaction["transaction_id"], "reference_number": transaction["payment_meta"]["reference_number"], "description": transaction["name"] }) new_transaction.insert() new_transaction.submit() for tag in tags: add_tag(tag, "Bank Transaction", new_transaction.name) result.append(new_transaction.name) except Exception: frappe.throw(title=_('Bank transaction creation error')) return result
def test_tag_count_query(self): self.assertDictEqual(get_stats('["_user_tags"]', 'DocType'), {'_user_tags': [['No Tags', frappe.db.count('DocType')]]}) add_tag('Standard', 'DocType', 'User') add_tag('Standard', 'DocType', 'ToDo') # count with no filter self.assertDictEqual(get_stats('["_user_tags"]', 'DocType'), {'_user_tags': [['Standard', 2], ['No Tags', frappe.db.count('DocType') - 2]]}) # count with child table field filter self.assertDictEqual(get_stats('["_user_tags"]', 'DocType', filters='[["DocField", "fieldname", "like", "%last_name%"], ["DocType", "name", "like", "%use%"]]'), {'_user_tags': [['Standard', 1], ['No Tags', 0]]})