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