示例#1
0
    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)
示例#2
0
    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)
示例#3
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
示例#5
0
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
示例#6
0
    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