def test_delete(self): # First create an invoice invoice = Invoice() line = SalesItemLine() line.LineNum = 1 line.Description = "description" line.Amount = 100 line.SalesItemLineDetail = SalesItemLineDetail() item = Item.all(max_results=1, qb=self.qb_client)[0] line.SalesItemLineDetail.ItemRef = item.to_ref() invoice.Line.append(line) customer = Customer.all(max_results=1, qb=self.qb_client)[0] invoice.CustomerRef = customer.to_ref() invoice.CustomerMemo = CustomerMemo() invoice.CustomerMemo.value = "Customer Memo" invoice.save(qb=self.qb_client) # Then delete invoice_id = invoice.Id invoice.delete(qb=self.qb_client) query_invoice = Invoice.filter(Id=invoice_id, qb=self.qb_client) self.assertEqual([], query_invoice)
def test_create(self): invoice = Invoice() line = SaleItemLine() line.LineNum = 1 line.Description = "description" line.Amount = 100 line.SalesItemLineDetail = SalesItemLineDetail() item = Item.all(max_results=1, qb=self.qb_client)[0] line.SalesItemLineDetail.ItemRef = item.to_ref() invoice.Line.append(line) customer = Customer.all(max_results=1, qb=self.qb_client)[0] invoice.CustomerRef = customer.to_ref() invoice.CustomerMemo = CustomerMemo() invoice.CustomerMemo.value = "Customer Memo" invoice.save(qb=self.qb_client) query_invoice = Invoice.get(invoice.Id, qb=self.qb_client) self.assertEquals(query_invoice.CustomerRef.name, customer.DisplayName) self.assertEquals(query_invoice.CustomerMemo.value, "Customer Memo") self.assertEquals(query_invoice.Line[0].Description, "description") self.assertEquals(query_invoice.Line[0].Amount, 100.0)
def test_to_LinkedTxn(self): invoice = Invoice() invoice.TotalAmt = 10 invoice.Id = 1 linked_txn = invoice.to_linked_txn() self.assertEquals(linked_txn.TxnId, invoice.Id) self.assertEquals(linked_txn.TxnType, "Invoice") self.assertEquals(linked_txn.TxnLineId, 1)
def test_to_ref(self): invoice = Invoice() invoice.DocNumber = 1 invoice.Id = 2 ref = invoice.to_ref() self.assertIsInstance(ref, Ref) self.assertEquals(ref.type, "Invoice") self.assertEquals(ref.name, 1) # should be DocNumber self.assertEquals(ref.value, 2) # should be Id
def invoice_search(invoice_number, customer, client=None): """ invoice_number if == 1 then will force create a new one 999999999 will search for any existing specific # will search for that invoice # """ if client is None: client = get_quickbooks_client() invoice = None if invoice_number == "999999999": # search for any NeedToSend invoices for chapter # however, can not filter on EmailStatus directly invoices = Invoice.query( select= f"select * from Invoice where balance > '0' AND CustomerRef = '{customer.Id}'", qb=client, ) for invoice_test in invoices: if invoice_test.EmailStatus == "NeedToSend": invoice = invoice_test break elif invoice_number != "1" and invoice_number != "": # search for specific invoice number invoices = Invoice.query( select= f"select * from Invoice where DocNumber = '{invoice_number}' AND CustomerRef = '{customer.Id}'", qb=client, ) if invoices: invoice = invoices[0] if invoice is None: invoice = Invoice() term = Term.filter(name="Two Weeks", qb=client)[0] linenumber_count = 1 invoice.CustomerRef = customer.to_ref() invoice.AllowOnlineACHPayment = True invoice.BillEmail = customer.PrimaryEmailAddr invoice.EmailStatus = "NeedToSend" invoice.SalesTermRef = term.to_ref() invoice.CustomerMemo = CustomerMemo() else: linenumber_count = len(invoice.Line) return invoice, linenumber_count
def test_unicode(self): invoice = Invoice() invoice.TotalAmt = 10 self.assertEquals(str(invoice), "10")
def test_valid_object_name(self): obj = Invoice() client = QuickBooks() result = client.isvalid_object_name(obj.qbo_object_name) self.assertTrue(result)
def test_email_sent_false(self): invoice = Invoice() invoice.EmailStatus = "NotSent" self.assertFalse(invoice.email_sent)
def test_email_sent_true(self): invoice = Invoice() invoice.EmailStatus = "EmailSent" self.assertTrue(invoice.email_sent)
def generate_sale_invoice(sales): payload = { "Line": [], "CustomerRef": { "value": "1" } } sale_invoice = Invoice() account_code_tax_code_mapping = {} overall_total_amount = 0 # iterate over the sales to aggregate the line items by account code and tax code for sale in sales: for line_item in sale["register_sale_products"]: account_code = product_to_account_code[line_item["product_id"]] tax_code = line_item["tax_id"] key = (account_code, tax_code) price = float(line_item["price"]) quantity = float(line_item["quantity"]) tax = float(line_item["tax"]) total_amount = (price + tax) * quantity if key in account_code_tax_code_mapping: account_code_tax_code_mapping[key] += total_amount else: account_code_tax_code_mapping[key] = total_amount overall_total_amount += total_amount # sale_invoice.TotalAmt = overall_total_amount payload["TotalAmt"] = overall_total_amount for key, value in account_code_tax_code_mapping.items(): account_code = key[0] tax_code = key[1] external_tax_code = "NON" if tax_code == "02dcd191-ae2b-11e6-f485-a54b9896a941" or tax_code == "00000000-0002-0002-0002-000000000003": external_tax_code = "TAX" # line_item = SalesItemLine() # line_item.Amount = value # line_item.Description = "Account code: {} and Tax code: {}".format(account_code, tax_code) line_item = { "DetailType": "SalesItemLineDetail", "Amount": value, "Description": "Account code: {} and Tax code: {}".format(account_code, external_tax_code), "SalesItemLineDetail": { "ItemRef": { }, "TaxCodeRef": { } } } line_item["SalesItemLineDetail"]["ItemRef"]["value"] = account_code line_item["SalesItemLineDetail"]["TaxCodeRef"]["value"] = external_tax_code payload["Line"].append(line_item) return payload