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
Example #2
0
	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]]})