Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 906bc44

Browse files
authored
Merge pull request ej2#69 from Tesorio/delete-method
Delete individual objects
2 parents 027bd46 + ba0600a commit 906bc44

19 files changed

+83
-19
lines changed

quickbooks/client.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -349,6 +349,12 @@ def update_object(self, qbbo, request_body, _file_path=None):
349349

350350
return result
351351

352+
def delete_object(self, qbbo, request_body, _file_path=None):
353+
url = self.api_url + "/company/{0}/{1}".format(self.company_id, qbbo.lower())
354+
result = self.make_request("POST", url, request_body, params={'operation': 'delete'}, file_path=_file_path)
355+
356+
return result
357+
352358
def batch_operation(self, request_body):
353359
url = self.api_url + "/company/{0}/batch".format(self.company_id)
354360
results = self.make_request("POST", url, request_body)

quickbooks/mixins.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,23 @@ def save(self, qb=None):
8080
return obj
8181

8282

83+
class DeleteMixin(object):
84+
qbo_object_name = ""
85+
86+
def delete(self, qb=None):
87+
if not qb:
88+
qb = QuickBooks()
89+
90+
if not self.Id:
91+
raise QuickbooksException('Cannot delete unsaved object')
92+
93+
data = {
94+
'Id': self.Id,
95+
'SyncToken': self.SyncToken,
96+
}
97+
return qb.delete_object(self.qbo_object_name, json.dumps(data))
98+
99+
83100
class ListMixin(object):
84101
qbo_object_name = ""
85102

quickbooks/objects/attachable.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
from six import python_2_unicode_compatible
22
from .base import Ref, QuickbooksManagedObject, QuickbooksTransactionEntity, AttachableRef
33
from ..client import QuickBooks
4+
from ..mixins import DeleteMixin
45

56

67
@python_2_unicode_compatible
7-
class Attachable(QuickbooksManagedObject, QuickbooksTransactionEntity):
8+
class Attachable(DeleteMixin, QuickbooksManagedObject, QuickbooksTransactionEntity):
89
"""
910
QBO definition: This page covers the Attachable, Upload, and Download resources used for attachment management. Attachments are supplemental information linked to a transaction or Item object. They can be files, notes, or a combination of both.
1011
In the case of file attachments, use an upload endpoint multipart request to upload the files to the QuickBooks attachment list and, optionally, to supply metadata for each via an attachable object. If meta data is not supplied with the upload request, the system creates it.

quickbooks/objects/bill.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
from .base import Ref, LinkedTxn, QuickbooksManagedObject, QuickbooksTransactionEntity, \
55
LinkedTxnMixin
66
from .tax import TxnTaxDetail
7+
from ..mixins import DeleteMixin
78

89

910
@python_2_unicode_compatible
10-
class Bill(QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
11+
class Bill(DeleteMixin, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
1112
"""
1213
QBO definition: A Bill entity is an AP transaction representing a request-for-payment from a third party for
1314
goods/services rendered and/or received.

quickbooks/objects/billpayment.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from six import python_2_unicode_compatible
22
from .base import QuickbooksBaseObject, Ref, LinkedTxn, QuickbooksManagedObject, LinkedTxnMixin, \
33
QuickbooksTransactionEntity
4+
from ..mixins import DeleteMixin
45

56

67
@python_2_unicode_compatible
@@ -50,7 +51,7 @@ def __str__(self):
5051

5152

5253
@python_2_unicode_compatible
53-
class BillPayment(QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
54+
class BillPayment(DeleteMixin, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
5455
"""
5556
QBO definition: A BillPayment entity represents the financial transaction of payment
5657
of bills that the business owner receives from a vendor for goods or services purchased

quickbooks/objects/creditmemo.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
from .base import Address, EmailAddress, Ref, CustomField, CustomerMemo, QuickbooksManagedObject, \
55
LinkedTxnMixin, QuickbooksTransactionEntity
66
from .tax import TxnTaxDetail
7+
from ..mixins import DeleteMixin
78

89

910
@python_2_unicode_compatible
10-
class CreditMemo(QuickbooksTransactionEntity, QuickbooksManagedObject, LinkedTxnMixin):
11+
class CreditMemo(DeleteMixin, QuickbooksTransactionEntity, QuickbooksManagedObject, LinkedTxnMixin):
1112
"""
1213
QBO definition: The CreditMemo is a financial transaction representing a refund or credit of payment or part
1314
of a payment for goods or services that have been sold.

quickbooks/objects/deposit.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from six import python_2_unicode_compatible
22
from .base import QuickbooksBaseObject, Ref, LinkedTxn, QuickbooksManagedObject, LinkedTxnMixin, \
33
QuickbooksTransactionEntity, CustomField, AttachableRef
4+
from ..mixins import DeleteMixin
45

56

67
class CashBackInfo(QuickbooksBaseObject):
@@ -63,7 +64,7 @@ def __str__(self):
6364

6465

6566
@python_2_unicode_compatible
66-
class Deposit(QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
67+
class Deposit(DeleteMixin, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
6768
"""
6869
QBO definition: A deposit object is a transaction that records one or more deposits of the following types:
6970

quickbooks/objects/estimate.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
LinkedTxnMixin, QuickbooksTransactionEntity, LinkedTxn
44
from .tax import TxnTaxDetail
55
from .detailline import DetailLine, SalesItemLine, GroupLine, DescriptionLine, DiscountLine, SubtotalLine
6-
from ..mixins import QuickbooksPdfDownloadable
6+
from ..mixins import QuickbooksPdfDownloadable, DeleteMixin
77

88

99
@python_2_unicode_compatible
10-
class Estimate(QuickbooksPdfDownloadable, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
10+
class Estimate(DeleteMixin, QuickbooksPdfDownloadable, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
1111
"""
1212
QBO definition: The Estimate represents a proposal for a financial transaction from a business to a customer
1313
for goods or services proposed to be sold, including proposed pricing.

quickbooks/objects/invoice.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
QuickbooksTransactionEntity, LinkedTxn, LinkedTxnMixin
44
from .tax import TxnTaxDetail
55
from .detailline import DetailLine, SalesItemLine, SubtotalLine, DiscountLine, GroupLine, DescriptionOnlyLine
6-
from ..mixins import QuickbooksPdfDownloadable
6+
from ..mixins import QuickbooksPdfDownloadable, DeleteMixin
77

88

99
class DeliveryInfo(QuickbooksBaseObject):
@@ -14,7 +14,7 @@ def __init__(self):
1414

1515

1616
@python_2_unicode_compatible
17-
class Invoice(QuickbooksPdfDownloadable, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
17+
class Invoice(DeleteMixin, QuickbooksPdfDownloadable, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
1818
"""
1919
QBO definition: An Invoice represents a sales form where the customer pays for a product or service later.
2020

quickbooks/objects/journalentry.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
LinkedTxnMixin
44
from .tax import TxnTaxDetail
55
from .detailline import DetailLine, DescriptionOnlyLine
6+
from ..mixins import DeleteMixin
67

78

89
class Entity(QuickbooksBaseObject):
@@ -16,7 +17,7 @@ def __init__(self):
1617
self.EntityRef = None
1718

1819

19-
class JournalEntryLineDetail(QuickbooksBaseObject):
20+
class JournalEntryLineDetail(DeleteMixin, QuickbooksBaseObject):
2021
class_dict = {
2122
"Entity": Entity,
2223
"AccountRef": Ref,

quickbooks/objects/payment.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from .base import QuickbooksBaseObject, Ref, LinkedTxn, \
33
QuickbooksManagedObject, QuickbooksTransactionEntity
44
from .creditcardpayment import CreditCardPayment
5+
from ..mixins import DeleteMixin
56

67

78
@python_2_unicode_compatible
@@ -20,7 +21,7 @@ def __str__(self):
2021

2122

2223
@python_2_unicode_compatible
23-
class Payment(QuickbooksManagedObject, QuickbooksTransactionEntity):
24+
class Payment(DeleteMixin, QuickbooksManagedObject, QuickbooksTransactionEntity):
2425
"""
2526
QBO definition: A Payment entity records a payment in QuickBooks. The payment can be
2627
applied for a particular customer against multiple Invoices and Credit Memos. It can also

quickbooks/objects/purchase.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
from .base import Ref, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin, \
55
LinkedTxn, Address
66
from .tax import TxnTaxDetail
7+
from ..mixins import DeleteMixin
78

89

910
@python_2_unicode_compatible
10-
class Purchase(QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
11+
class Purchase(DeleteMixin, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
1112
"""
1213
QBO definition: This entity represents expenses, such as a purchase made from a vendor.
1314
There are three types of Purchases: Cash, Check, and Credit Card.

quickbooks/objects/purchaseorder.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@
44
from .base import Ref, Address, QuickbooksManagedObject, LinkedTxnMixin, \
55
QuickbooksTransactionEntity, CustomField, LinkedTxn
66
from .tax import TxnTaxDetail
7+
from ..mixins import DeleteMixin
78

89

910
@python_2_unicode_compatible
10-
class PurchaseOrder(QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
11+
class PurchaseOrder(DeleteMixin, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
1112
"""
1213
QBO definition: The PurchaseOrder entity is a non-posting transaction representing a request to purchase
1314
goods or services from a third party.

quickbooks/objects/refundreceipt.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
LinkedTxnMixin, QuickbooksTransactionEntity, LinkedTxn, Address, EmailAddress
44
from .tax import TxnTaxDetail
55
from .detailline import DetailLine
6+
from ..mixins import DeleteMixin
67

78

89
@python_2_unicode_compatible
9-
class RefundReceipt(QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
10+
class RefundReceipt(DeleteMixin, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
1011
"""
1112
QBO definition: RefundReceipt represents a refund to the customer for a product or service that was given.
1213
"""

quickbooks/objects/salesreceipt.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
EmailAddress, QuickbooksTransactionEntity, LinkedTxn
44
from .tax import TxnTaxDetail
55
from .detailline import DetailLine
6-
from ..mixins import QuickbooksPdfDownloadable
6+
from ..mixins import QuickbooksPdfDownloadable, DeleteMixin
77

88

99
@python_2_unicode_compatible
10-
class SalesReceipt(QuickbooksPdfDownloadable, QuickbooksManagedObject,
10+
class SalesReceipt(DeleteMixin, QuickbooksPdfDownloadable, QuickbooksManagedObject,
1111
QuickbooksTransactionEntity, LinkedTxnMixin):
1212
"""
1313
QBO definition: SalesReceipt represents the sales receipt that is given to a customer.

quickbooks/objects/timeactivity.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
from six import python_2_unicode_compatible
22
from .base import Ref, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin, AttachableRef
3+
from ..mixins import DeleteMixin
34

45

56
@python_2_unicode_compatible
6-
class TimeActivity(QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
7+
class TimeActivity(DeleteMixin, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
78
"""
89
QBO definition: The TimeActivity entity represents a record of time worked by a vendor or employee.
910
"""

quickbooks/objects/transfer.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
from six import python_2_unicode_compatible
22
from .base import Ref, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin
3+
from ..mixins import DeleteMixin
34

45

56
@python_2_unicode_compatible
6-
class Transfer(QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
7+
class Transfer(DeleteMixin, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
78
"""
89
QBO definition: A Transfer represents a transaction where funds are moved between two accounts from the
910
company's QuickBooks chart of accounts.

quickbooks/objects/vendorcredit.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,11 @@
33
from .base import Ref, QuickbooksManagedObject, QuickbooksTransactionEntity, \
44
LinkedTxnMixin
55
from .detailline import DetailLine, AccountBasedExpenseLine, ItemBasedExpenseLine
6+
from ..mixins import DeleteMixin
67

78

89
@python_2_unicode_compatible
9-
class VendorCredit(QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
10+
class VendorCredit(DeleteMixin, QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
1011
"""
1112
QBO definition: The Vendor Credit entity is an accounts payable transaction that represents a refund or credit
1213
of payment for goods or services. It is a credit that a vendor owes you for various reasons such as overpaid

tests/integration/test_invoice.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,31 @@ def test_create(self):
4646
self.assertEquals(query_invoice.CustomerMemo.value, "Customer Memo")
4747
self.assertEquals(query_invoice.Line[0].Description, "description")
4848
self.assertEquals(query_invoice.Line[0].Amount, 100.0)
49+
50+
def test_delete(self):
51+
# First create an invoice
52+
invoice = Invoice()
53+
54+
line = SalesItemLine()
55+
line.LineNum = 1
56+
line.Description = "description"
57+
line.Amount = 100
58+
line.SalesItemLineDetail = SalesItemLineDetail()
59+
item = Item.all(max_results=1, qb=self.qb_client)[0]
60+
61+
line.SalesItemLineDetail.ItemRef = item.to_ref()
62+
invoice.Line.append(line)
63+
64+
customer = Customer.all(max_results=1, qb=self.qb_client)[0]
65+
invoice.CustomerRef = customer.to_ref()
66+
67+
invoice.CustomerMemo = CustomerMemo()
68+
invoice.CustomerMemo.value = "Customer Memo"
69+
invoice.save(qb=self.qb_client)
70+
71+
# Then delete
72+
invoice_id = invoice.Id
73+
invoice.delete(qb=self.qb_client)
74+
75+
query_invoice = Invoice.filter(Id=invoice_id, qb=self.qb_client)
76+
self.assertEqual([], query_invoice)

0 commit comments

Comments
 (0)