Skip to content

Commit 575f08a

Browse files
committed
Updated Estimate.
1 parent a2dd74a commit 575f08a

File tree

2 files changed

+200
-13
lines changed

2 files changed

+200
-13
lines changed

quickbooks/objects/estimate.py

Lines changed: 139 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,143 @@
11
from base import QuickbooksBaseObject, CustomField, Ref, CustomerMemo, Address, EmailAddress, QuickbooksManagedObject, \
2-
LinkedTxnMixin, QuickbooksTransactionEntity
2+
LinkedTxnMixin, QuickbooksTransactionEntity, LinkedTxn
33
from tax import TxnTaxDetail
44

5+
6+
class EstimateLine(QuickbooksBaseObject):
7+
list_dict = {
8+
"LinkedTxn": LinkedTxn,
9+
"CustomField": CustomField,
10+
}
11+
12+
def __init__(self):
13+
super(EstimateLine, self).__init__()
14+
self.Id = 0
15+
self.LineNum = 0
16+
self.Description = ""
17+
self.Amount = 0
18+
self.DetailType = ""
19+
self.LinkedTxn = []
20+
self.CustomField = []
21+
22+
def __unicode__(self):
23+
return str(self.Amount)
24+
25+
26+
class DiscountOverride(QuickbooksBaseObject):
27+
class_dict = {
28+
"DiscountRef": Ref,
29+
"DiscountAccountRef": Ref,
30+
}
31+
32+
qbo_object_name = "DiscountOverride"
33+
34+
def __init__(self):
35+
super(DiscountOverride, self).__init__()
36+
self.PercentBased = False
37+
self.DiscountPercent = 0
38+
self.DiscountRef = None
39+
self.DiscountAccountRef = None
40+
41+
42+
class DiscountLineDetail(QuickbooksBaseObject):
43+
class_dict = {
44+
"Discount": DiscountOverride,
45+
"ClassRef": Ref,
46+
"TaxCodeRef": Ref,
47+
}
48+
49+
def __init__(self):
50+
super(DiscountLineDetail, self).__init__()
51+
52+
self.Discount = None
53+
self.ClassRef = None
54+
self.TaxCodeRef = None
55+
56+
57+
class DiscountLine(EstimateLine):
58+
class_dict = {
59+
"DiscountLineDetail": DiscountLineDetail
60+
}
61+
62+
def __init__(self):
63+
super(DiscountLine, self).__init__()
64+
self.DetailType = "DiscountLineDetail"
65+
self.DiscountLineDetail = None
66+
67+
68+
class SubtotalLineDetail(QuickbooksBaseObject):
69+
class_dict = {
70+
"ItemRef": Ref
71+
}
72+
73+
def __init__(self):
74+
super(SubtotalLineDetail, self).__init__()
75+
self.ItemRef = None
76+
77+
78+
class SubtotalLine(EstimateLine):
79+
class_dict = {
80+
"SubtotalLineDetail": SubtotalLineDetail
81+
}
82+
83+
def __init__(self):
84+
super(SubtotalLine, self).__init__()
85+
self.DetailType = "SubtotalLineDetail"
86+
self.SubtotalLineDetail = None
87+
88+
89+
class DescriptionLineDetail(QuickbooksBaseObject):
90+
class_dict = {
91+
"TaxCodeRef": Ref
92+
}
93+
94+
def __init__(self):
95+
super(DescriptionLineDetail, self).__init__()
96+
self.ServiceDate = ""
97+
self.TaxCodeRef = None
98+
99+
100+
class DescriptionLine(EstimateLine):
101+
class_dict = {
102+
"DescriptionLineDetail": DescriptionLineDetail
103+
}
104+
105+
def __init__(self):
106+
super(DescriptionLine, self).__init__()
107+
self.DetailType = "DescriptionOnly"
108+
self.DescriptionLineDetail = None
109+
110+
5111
class SalesItemLineDetail(QuickbooksBaseObject):
6112
class_dict = {
7113
"ItemRef": Ref,
8-
"TaxCodeRef": Ref
114+
"ClassRef": Ref,
115+
"TaxCodeRef": Ref,
116+
"PriceLevelRef": Ref,
9117
}
10118

11119
def __init__(self):
12120
super(SalesItemLineDetail, self).__init__()
13121
self.UnitPrice = 0
14122
self.Qty = 0
123+
self.MarkupInfo = ""
124+
self.ServiceDate = ""
125+
self.TaxInclusiveAmt = 0
15126

16127
def __unicode__(self):
17128
return str(self.UnitPrice)
18129

19130

20-
class EstimateLine(QuickbooksBaseObject):
131+
class SaleItemLine(EstimateLine):
21132
class_dict = {
22133
"SalesItemLineDetail": SalesItemLineDetail
23134
}
24135

25136
def __init__(self):
26-
super(EstimateLine, self).__init__()
27-
self.LineNum = 0
28-
self.Amount = 0
29-
self.Description = ""
30-
self.DetailType = ""
137+
super(SaleItemLine, self).__init__()
138+
self.DetailType = "SalesItemLineDetail"
31139
self.SalesItemLineDetail = None
32140

33-
def __unicode__(self):
34-
return str(self.Amount)
35-
36141

37142
class Estimate(QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMixin):
38143
"""
@@ -47,10 +152,17 @@ class Estimate(QuickbooksManagedObject, QuickbooksTransactionEntity, LinkedTxnMi
47152
"TxnTaxDetail": TxnTaxDetail,
48153
"CustomerMemo": CustomerMemo,
49154
"BillEmail": EmailAddress,
155+
"DepartmentRef": Ref,
156+
"CurrencyRef": Ref,
157+
"ClassRef": Ref,
158+
"SalesTermRef": Ref,
159+
"ShipMethodRef": Ref,
50160
}
51161

52162
list_dict = {
53163
"CustomField": CustomField,
164+
"LinkedTxn": LinkedTxn,
165+
"Line": EstimateLine,
54166
}
55167

56168
qbo_object_name = "Estimate"
@@ -60,16 +172,31 @@ def __init__(self):
60172
self.DocNumber = ""
61173
self.TxnDate = ""
62174
self.TxnStatus = ""
175+
self.PrivateNote = ""
63176
self.TotalAmt = 0
64-
self.ApplyTaxAfterDiscount = 0
177+
self.ExchangeRate = 1
178+
self.ApplyTaxAfterDiscount = False
65179
self.PrintStatus = "NotSet"
66180
self.EmailStatus = "NotSet"
181+
self.DueDate = ""
182+
self.ShipDate = ""
183+
self.ExpirationDate = ""
184+
self.AcceptedBy = ""
185+
self.AcceptedDate = ""
186+
self.GlobalTaxCalculation = "TaxExcluded"
67187
self.BillAddr = None
68188
self.ShipAddr = None
189+
self.BillEmail = None
69190
self.CustomerRef = None
70191
self.TxnTaxDetail = None
71192
self.CustomerMemo = None
193+
self.ClassRef = None
194+
self.SalesTermRef = None
195+
self.ShipMethodRef = None
196+
72197
self.CustomField = []
198+
self.LinkedTxn = []
199+
self.Line = []
73200

74201
def __unicode__(self):
75202
return str(self.TotalAmt)

tests/unit/objects/test_estimate.py

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import unittest
22

3-
from quickbooks.objects.estimate import Estimate, EstimateLine, SalesItemLineDetail
3+
from quickbooks.objects.estimate import Estimate, EstimateLine, SalesItemLineDetail, DiscountOverride, \
4+
DiscountLineDetail, SubtotalLine, DescriptionLineDetail, DescriptionLine, SaleItemLine, DiscountLine
45

56

67
class EstimateTests(unittest.TestCase):
@@ -25,3 +26,62 @@ def test_unicode(self):
2526
sales_detail.UnitPrice = 10
2627

2728
self.assertEquals(unicode(sales_detail), "10")
29+
30+
31+
class DiscountOverrideTests(unittest.TestCase):
32+
def test_init(self):
33+
discount_override = DiscountOverride()
34+
35+
self.assertEquals(discount_override.DiscountPercent, 0)
36+
self.assertEquals(discount_override.DiscountRef, None)
37+
self.assertEquals(discount_override.DiscountAccountRef, None)
38+
self.assertFalse(discount_override.PercentBased)
39+
40+
41+
class DiscountLineDetailTesets(unittest.TestCase):
42+
def test_init(self):
43+
discount_detail = DiscountLineDetail()
44+
45+
self.assertEquals(discount_detail.Discount, None)
46+
self.assertEquals(discount_detail.ClassRef, None)
47+
self.assertEquals(discount_detail.TaxCodeRef, None)
48+
49+
50+
class SubtotalLineTest(unittest.TestCase):
51+
def test_init(self):
52+
subtotal_line = SubtotalLine()
53+
54+
self.assertEquals(subtotal_line.DetailType, "SubtotalLineDetail")
55+
self.assertEquals(subtotal_line.SubtotalLineDetail, None)
56+
57+
58+
class DescriptionLineDetailTest(unittest.TestCase):
59+
def test_init(self):
60+
description_detail = DescriptionLineDetail()
61+
62+
self.assertEquals(description_detail.ServiceDate, "")
63+
self.assertEquals(description_detail.TaxCodeRef, None)
64+
65+
66+
class DescriptionLineTest(unittest.TestCase):
67+
def test_init(self):
68+
line = DescriptionLine()
69+
70+
self.assertEquals(line.DetailType, "DescriptionOnly")
71+
self.assertEquals(line.DescriptionLineDetail, None)
72+
73+
74+
class SaleItemLineTest(unittest.TestCase):
75+
def test_init(self):
76+
line = SaleItemLine()
77+
78+
self.assertEquals(line.DetailType, "SalesItemLineDetail")
79+
self.assertEquals(line.SalesItemLineDetail, None)
80+
81+
82+
class DiscountLineTest(unittest.TestCase):
83+
def test_init(self):
84+
line = DiscountLine()
85+
86+
self.assertEquals(line.DetailType, "DiscountLineDetail")
87+
self.assertEquals(line.DiscountLineDetail, None)

0 commit comments

Comments
 (0)