def add_tfl_receipt(self, transaction, list_of_fares): # Using a random receipt ID we generate as external ID receipt_id = uuid.uuid4().hex example_items = [] for fare in list_of_fares: example_items.append( receipt_types.Item(fare[0], 1, "", int(fare[1]), "GBP", 20, [])) example_payments = [] example_taxes = [] example_receipt = receipt_types.Receipt("", receipt_id, transaction["id"], abs(transaction["amount"]), "GBP", example_payments, example_taxes, example_items) example_receipt_marshaled = example_receipt.marshal() #print("Uploading receipt data to API: ", json.dumps(example_receipt_marshaled, indent=4, sort_keys=True)) #print("") success, response = self._api_client.api_put( "transaction-receipts/", example_receipt_marshaled) if not success: error("Failed to upload receipt: {}".format(response)) print("Successfully uploaded receipt date {}".format( transaction['settled'])) #print("Successfully uploaded receipt {}: {}\n".format(receipt_id, response)) return receipt_id
def example_add_receipt_data(self, data_in, transaction_id, amount, currency, payment_type, vat_amount): ''' An example in which we add receipt data to the latest transaction of the account, with fabricated information. You can set varying receipts data on the same transaction again and again to test it if you need to. ''' #transaction_id = self.transactions[-2] print("Using most recent transaction to attach receipt: {}".format(transaction_id)) # Using a random receipt ID we generate as external ID receipt_id = uuid.uuid4().hex items = [] for i in data_in: items.append(receipt_types.Item(i[0], i[1], "", i[2], currency, 0, [])) payments = [receipt_types.Payment(payment_type, "", "", "", "", "", "", "", amount, currency )] taxes = [receipt_types.Tax("VAT", vat_amount, currency, "12345678" )] receipt = receipt_types.Receipt("", receipt_id, transaction_id, amount, currency, payments, taxes, items) receipt_marshaled = receipt.marshal() print("Uploading receipt data to API: ", json.dumps(receipt_marshaled, indent=4, sort_keys=True)) print(type(receipt_marshaled)) success, response = self.api_put("transaction-receipts/", receipt_marshaled) if not success: error("Failed to upload receipt: {}".format(response)) print("Successfully uploaded receipt {}: {}".format(receipt_id, response)) return receipt_id
def example_add_receipt_data(self): ''' An example in which we add receipt data to the latest transaction of the account, with fabricated information. You can set varying receipts data on the same transaction again and again to test it if you need to. ''' if len(self.transactions) == 0: error( "No transactions found, either it was not loaded with list_transactions() or there's no transaction in the Monzo account :/" ) most_recent_transaction = self.transactions[-1] print("Using most recent transaction to attach receipt: {}".format( most_recent_transaction)) # Using a random receipt ID we generate as external ID receipt_id = uuid.uuid4().hex # Price amounts are in the number of pences. example_sub_item_1 = receipt_types.SubItem("Oranges loose", 1.5, "kg", 30, "GBP", 0) example_sub_item_2 = receipt_types.SubItem("Organic oranges", 1, "kg", 20, "GBP", 0) example_items = [ receipt_types.Item("Selected oranges", 2.5, "kg", 50, "GBP", 0, [example_sub_item_1, example_sub_item_2]) ] if abs(most_recent_transaction["amount"]) > 269: example_items.append( receipt_types.Item( "Excess fare", 1, "", abs(most_recent_transaction["amount"]) - 269, "GBP", 20, [])) example_payments = [ receipt_types.Payment("card", "123321", "1234", "A10B2C", "", "", "", "", abs(most_recent_transaction["amount"]), "GBP") ] example_taxes = [receipt_types.Tax("VAT", 0, "GBP", "12345678")] example_receipt = receipt_types.Receipt( "", receipt_id, most_recent_transaction["id"], abs(most_recent_transaction["amount"]), "GBP", example_payments, example_taxes, example_items) example_receipt_marshaled = example_receipt.marshal() print("Uploading receipt data to API: ", json.dumps(example_receipt_marshaled, indent=4, sort_keys=True)) print("") success, response = self._api_client.api_put( "transaction-receipts/", example_receipt_marshaled) if not success: error("Failed to upload receipt: {}".format(response)) print("Successfully uploaded receipt {}: {}".format( receipt_id, response)) return receipt_id
def match_and_upload_receipt(price, date, text, link, transactions, ACCESS_TOKEN): #get all transactions #http "https://api.monzo.com/transactions" \ "Authorization: Bearer $access_token" \ "account_id==$account_id" if not str(-abs(price)) in transactions: return -1 candidates = list(transactions[str(-abs(price))]) #print("candidates" + str(candidates)) #print("firstcandidates" + str(candidates[0])) if len(candidates) == 0: print("no candidates") return -1 #candidate = min(candidates, key=lambda x: (datetime.fromisoformat(x['created']) - date).total_seconds()) candidate = candidates[0] before = date + timedelta(days=7) since = date - timedelta(days=7) if not (True): #fix the time thing return #print("found candidate: " + str(candidate)) # Using a random receipt ID we generate as external ID receipt_id = uuid.uuid4().hex example_items = [ receipt_types.Item(text + " " + link, 1, "", abs(candidate["amount"]), "GBP", 0, []) ] example_receipt = receipt_types.Receipt("", receipt_id, candidate["id"], abs(candidate["amount"]), "GBP", "", "", example_items) example_receipt_marshaled = example_receipt.marshal() #print(date.isoformat() + " " + str(example_receipt_marshaled)) client = requests.put("https://api.monzo.com/transaction-receipts/", data=example_receipt_marshaled, headers={'Authorization': 'Bearer ' + ACCESS_TOKEN}) return 1 # test #match_and_upload_receipt(-1010, datetime(2019,1,2),"Testing testing 1 2 3 receipt muncher","downloadmoreram.com")
def genReceipt(transaction, taxes, items): receipt_id = genReceiptID(transaction) payments = [genPayment(transaction)] #Gen items in json format jsonitems = [] for item in items: jsonitems.append(genItem(item[0], item[1], item[2])) receipt = receipt_types.Receipt("", receipt_id, transaction["id"], abs(transaction["amount"]), "GBP", payments, taxes, jsonitems) return receipt
def example_add_receipt_data(self): ''' An example in which we add receipt data to the latest transaction of the account, with fabricated information. You can set varying receipts data on the same transaction again and again to test it if you need to. ''' if len(self.transactions) == 0: error( "No transactions found, either it was not loaded with list_transactions() or there's no transaction in the Monzo account :/" ) transactions_index = -1 most_recent_transaction = None while abs(transactions_index) <= len(self.transactions): # Some transactions are not initiated by the user, for example the monthly transaction charging overdraft fees. Because # we can only add receipts to transactions initiated by the user, we need to search from the most recent until such a # transaction is found. if self.transactions[transactions_index][ "user_id"] != self._api_client._user_id: transactions_index -= 1 continue most_recent_transaction = self.transactions[transactions_index] break if most_recent_transaction == None: error( "Could not find a transaction initiated by the user, cannot continue." ) print("Using most recent transaction to attach receipt: {}".format( most_recent_transaction)) # Using a random receipt ID we generate as external ID receipt_id = uuid.uuid4().hex # Price amounts are in the number of pences. example_sub_item_1 = receipt_types.SubItem("Bananas loose", 1.5, "kg", 119, "GBP", 0) example_sub_item_2 = receipt_types.SubItem("Organic bananas", 1, "kg", 150, "GBP", 0) example_items = [ receipt_types.Item("Selected bananas", 2.5, "kg", 269, "GBP", 0, [example_sub_item_1, example_sub_item_2]) ] if abs(most_recent_transaction["amount"]) > 269: example_items.append( receipt_types.Item( "Excess fare", 1, "", abs(most_recent_transaction["amount"]) - 269, "GBP", 20, [])) example_payments = [ receipt_types.Payment("card", "123321", "1234", "A10B2C", "", "", "", "", abs(most_recent_transaction["amount"]), "GBP") ] example_taxes = [receipt_types.Tax("VAT", 0, "GBP", "12345678")] example_receipt = receipt_types.Receipt( "", receipt_id, most_recent_transaction["id"], abs(most_recent_transaction["amount"]), "GBP", example_payments, example_taxes, example_items) example_receipt_marshaled = example_receipt.marshal() print("Uploading receipt data to API: ", json.dumps(example_receipt_marshaled, indent=4, sort_keys=True)) print("") success, response = self._api_client.api_put( "transaction-receipts/", example_receipt_marshaled) if not success: error("Failed to upload receipt: {}".format(response)) print("Successfully uploaded receipt {}: {}".format( receipt_id, response)) return receipt_id