25
25
BankAccount ,
26
26
Invoice ,
27
27
InvoiceItem ,
28
+ Timesheet ,
29
+ TimeTrackingItem ,
28
30
)
29
31
from tuttle import rendering
30
32
@@ -129,6 +131,46 @@ def invoice_number_counting():
129
131
invoice_number_counter = invoice_number_counting ()
130
132
131
133
134
+ def create_fake_timesheet (
135
+ project : Project ,
136
+ fake : faker .Faker ,
137
+ ) -> Timesheet :
138
+ """
139
+ Create a fake timesheet object with random values.
140
+
141
+ Args:
142
+ project (Project): The project associated with the timesheet.
143
+ fake (faker.Faker): An instance of the Faker class to generate random values.
144
+
145
+ Returns:
146
+ Timesheet: A fake timesheet object.
147
+ """
148
+ timesheet = Timesheet (
149
+ title = fake .bs (),
150
+ comment = fake .paragraph (nb_sentences = 2 ),
151
+ date = datetime .date .today (),
152
+ project = project ,
153
+ )
154
+ number_of_items = fake .random_int (min = 1 , max = 5 )
155
+ for _ in range (number_of_items ):
156
+ unit = fake .random_element (elements = ("hours" , "days" ))
157
+ if unit == "hours" :
158
+ unit_price = abs (round (numpy .random .normal (50 , 20 ), 2 ))
159
+ elif unit == "days" :
160
+ unit_price = abs (round (numpy .random .normal (400 , 200 ), 2 ))
161
+ time_tracking_item = TimeTrackingItem (
162
+ timesheet = timesheet ,
163
+ begin = fake .date_time_this_year (before_now = True , after_now = False ),
164
+ end = fake .date_time_this_year (before_now = True , after_now = False ),
165
+ duration = datetime .timedelta (hours = fake .random_int (min = 1 , max = 8 )),
166
+ title = f"{ fake .bs ()} for #{ project .tag } " ,
167
+ tag = project .tag ,
168
+ description = fake .paragraph (nb_sentences = 2 ),
169
+ )
170
+ timesheet .items .append (time_tracking_item )
171
+ return timesheet
172
+
173
+
132
174
def create_fake_invoice (
133
175
project : Project ,
134
176
user : User ,
@@ -146,7 +188,7 @@ def create_fake_invoice(
146
188
"""
147
189
invoice_number = next (invoice_number_counter )
148
190
invoice = Invoice (
149
- number = invoice_number ,
191
+ number = str ( invoice_number ), # TODO: replace with generated number
150
192
date = datetime .date .today (),
151
193
sent = fake .pybool (),
152
194
paid = fake .pybool (),
0 commit comments