I'm currently developing a Python code with GUI to minimize my paperwork time. So far so good it adds student payments to Googlesheets, it creates an excel receipt then changes it to pdf and then sends it via gmail to the client....all the hard bits done right? One little area is bothering me and that's the section where you can amend the date.
Usually a client buys four sessions at a time with me so the dates would look something like this. A checkbox next to each one.
Week 1: Jan 1st 2019 [ ] - checkbox 1
Week 2: Jan 8th 2019 [ ] - checkbox 2
Week 3: Jan 15th 2019 [ ] - checkbox 3
Week 4: Jan 22nd 2019 [ ] - checkbox 4
Week to Pay: Jan 29th 2019
When a tick box is ticked I want it so that that date is skipped and replaced with the next week's date. Easy. When it is un-ticked I want it to revert ...easy.
Okay here's the challenge...what if i had different combinations of boxes ticked eg. box one and 3. or 1 and 4?
I need to work out the logic behind this problem.
Any help would be much appreciated.
Kind regards
James
Okay this works....ish!?
import datetime
from datetime import datetime
from datetime import timedelta
FIXED_WEEK_1 = "15/04/2019"
W1 = timedelta(days=7)
W2 = timedelta(days=14)
W3 = timedelta(days=21)
W4 = timedelta(days=28)
W5 = timedelta(days=35)
BOX_1 = 0
BOX_2 = 0
BOX_3 = 0
BOX_4 = 0
week_one_raw = datetime.strptime(FIXED_WEEK_1, '%d/%m/%Y')
week_one_refined = week_one_raw
week_two_refined = week_one_raw + W1
week_three_refined = week_two_refined + W1
week_four_refined = week_three_refined + W1
week_to_pay_refined = week_four_refined + W1
if BOX_1 == 1:
week_one_refined = week_one_raw + W1
week_two_refined = week_one_refined + W1
week_three_refined = week_two_refined + W1
week_four_refined = week_three_refined + W1
week_to_pay_refined = week_four_refined + W1
if BOX_1 == 0:
week_one_refined = week_one_raw
week_two_refined = week_one_raw + W1
week_three_refined = week_two_refined + W1
week_four_refined = week_three_refined + W1
week_to_pay_refined = week_four_refined + W1
if BOX_2 == 1:
week_one_refined = week_one_refined
week_two_refined = week_two_refined + W1
week_three_refined = week_two_refined + W1
week_four_refined = week_three_refined + W1
week_to_pay_refined = week_four_refined + W1
if BOX_2 == 0:
week_one_refined = week_one_refined
week_two_refined = week_two_refined
week_three_refined = week_three_refined
week_four_refined = week_four_refined
week_to_pay_refined = week_four_refined + W1
if BOX_3 == 1:
week_one_refined = week_one_refined
week_two_refined = week_two_refined
week_three_refined = week_three_refined +W1
week_four_refined = week_four_refined + W1
week_to_pay_refined = week_four_refined + W1
if BOX_3 == 0:
week_one_refined = week_one_refined
week_two_refined = week_two_refined
week_three_refined = week_three_refined
week_four_refined = week_four_refined
week_to_pay_refined = week_four_refined + W1
if BOX_4 == 1:
week_one_refined = week_one_refined
week_two_refined = week_two_refined
week_three_refined = week_three_refined
week_four_refined = week_four_refined +W1
week_to_pay_refined = week_four_refined +W1
if BOX_4 == 0:
week_one_refined = week_one_refined
week_two_refined = week_two_refined
week_three_refined = week_three_refined
week_four_refined = week_four_refined
week_to_pay_refined = week_four_refined + W1
print (week_one_refined)
print (week_two_refined)
print (week_three_refined)
print (week_four_refined)
print (week_to_pay_refined)
This code works and skips the correct weeks depending on whether the box variables are set to 0 or 1. This would work with a check box which was controlled by a submit button running the code above as a def and the checkboxes all returning 0 or 1 values.
Except if two check boxes are checked...then it doesn't skip two weeks ahead...damn it ....so close
Okay this works!
import datetime
from datetime import datetime
from datetime import timedelta
FIXED_WEEK_1 = "15/04/2019"
W1 = timedelta(days=7)
W2 = timedelta(days=14)
W3 = timedelta(days=21)
W4 = timedelta(days=28)
W5 = timedelta(days=35)
BOX_1 = 0
BOX_2 = 0
BOX_3 = 0
BOX_4 = 0
week_one_raw = datetime.strptime(FIXED_WEEK_1, '%d/%m/%Y')
week_one_refined = week_one_raw
week_two_refined = week_one_raw + W1
week_three_refined = week_two_refined + W1
week_four_refined = week_three_refined + W1
week_to_pay_refined = week_four_refined + W1
if BOX_1 == 1:
week_one_refined = week_one_raw + W1
week_two_refined = week_one_refined + W1
week_three_refined = week_two_refined + W1
week_four_refined = week_three_refined + W1
week_to_pay_refined = week_four_refined + W1
if BOX_1 == 0:
week_one_refined = week_one_raw
week_two_refined = week_one_raw + W1
week_three_refined = week_two_refined + W1
week_four_refined = week_three_refined + W1
week_to_pay_refined = week_four_refined + W1
if BOX_2 == 1:
week_one_refined = week_one_refined
week_two_refined = week_two_refined + W1
week_three_refined = week_two_refined + W1
week_four_refined = week_three_refined + W1
week_to_pay_refined = week_four_refined + W1
if BOX_2 == 0:
week_one_refined = week_one_refined
week_two_refined = week_two_refined
week_three_refined = week_three_refined
week_four_refined = week_four_refined
week_to_pay_refined = week_four_refined + W1
if BOX_3 == 1:
week_one_refined = week_one_refined
week_two_refined = week_two_refined
week_three_refined = week_three_refined +W1
week_four_refined = week_four_refined + W1
week_to_pay_refined = week_four_refined + W1
if BOX_3 == 0:
week_one_refined = week_one_refined
week_two_refined = week_two_refined
week_three_refined = week_three_refined
week_four_refined = week_four_refined
week_to_pay_refined = week_four_refined + W1
if BOX_4 == 1:
week_one_refined = week_one_refined
week_two_refined = week_two_refined
week_three_refined = week_three_refined
week_four_refined = week_four_refined +W1
week_to_pay_refined = week_four_refined +W1
if BOX_4 == 0:
week_one_refined = week_one_refined
week_two_refined = week_two_refined
week_three_refined = week_three_refined
week_four_refined = week_four_refined
week_to_pay_refined = week_four_refined + W1
print (week_one_refined)
print (week_two_refined)
print (week_three_refined)
print (week_four_refined)
print (week_to_pay_refined)
This code works and skips the correct weeks depending on whether the box variables are set to 0 or 1. This would work with a check box which was controlled by a submit button running the code above as a def and the checkboxes all returning 0 or 1 values.
Hope this helps someone.
Phew finally...
I only made a break through with this problem when I worked it out on a flow chart...the end result looking like the structure of a tournament in reverse. Using nests of for loops seemed to do the trick....apologies in advance for the duplication of values in the code...its fully functional but just needs tightening..however I hope the below code helps someone.
import datetime from datetime import datetime from datetime import timedelta FIXED_WEEK_1 = "16/04/2019" W1 = timedelta(days=7) W2 = timedelta(days=14) W3 = timedelta(days=21) W4 = timedelta(days=28) W5 = timedelta(days=35) W6 = timedelta(days=42) W7 = timedelta(days=49) W8 = timedelta(days=56) BOX_1 = 1 BOX_2 = 0 BOX_3 = 1 BOX_4 = 1 week_one_raw = datetime.strptime(FIXED_WEEK_1, '%d/%m/%Y') week_one_refined = week_one_raw week_two_refined = week_one_raw + W1 week_three_refined = week_two_refined + W1 week_four_refined = week_three_refined + W1 week_to_pay_refined = week_four_refined + W1 if BOX_1 == 0: week_one_refined = week_one_raw if BOX_2 == 0: week_two_refined = week_one_raw + W1 if BOX_3 == 0: week_three_refined = week_one_raw + W2 if BOX_4 == 0: week_four_refined = week_one_raw + W3 week_to_pay_refined = week_one_raw + W4 if BOX_4 == 1: week_four_refined = week_one_raw +W4 week_to_pay_refined = week_one_raw +W5 if BOX_3 == 1: week_three_refined = week_one_raw + W3 if BOX_4 == 0: week_three_refined = week_one_raw +W3 week_four_refined = week_one_raw +W4 week_to_pay_refined = week_one_raw +W5 if BOX_4 == 1: week_three_refined = week_one_raw +W4 week_four_refined = week_one_raw +W5 week_to_pay_refined = week_one_raw +W6 if BOX_2 == 1: week_two_refined = week_one_raw + W2 if BOX_3 == 0: week_two_refined = week_one_raw +W2 if BOX_4 == 0: week_two_refined = week_one_raw + W2 week_three_refined = week_one_raw +W3 week_four_refined = week_one_raw +W4 week_to_pay_refined = week_one_raw +W5 if BOX_4 == 1: week_two_refined = week_one_raw +W3 week_three_refined = week_one_raw +W4 week_four_refined = week_one_raw +W6 week_to_pay_refined = week_one_raw +W7 if BOX_3 == 1: week_two_refined = week_one_raw +W3 if BOX_4 == 0: week_two_refined = week_one_raw + W3 week_three_refined = week_one_raw +W4 week_four_refined = week_one_raw +W5 week_to_pay_refined = week_one_raw +W6 if BOX_4 == 1: week_two_refined = week_one_raw + W4 week_three_refined = week_one_raw +W5 week_four_refined = week_one_raw +W6 week_to_pay_refined = week_one_raw +W7 if BOX_1 == 1: week_one_refined = week_one_raw + W1 if BOX_2 == 0: week_one_refined = week_one_raw +W1 if BOX_3 == 0: week_one_refined = week_one_raw +W1 if BOX_4 ==0: week_one_refined = week_one_raw +W1 week_two_refined = week_one_raw +W2 week_three_refined = week_one_raw +W3 week_four_refined = week_one_raw +W4 week_to_pay_refined = week_one_raw +W5 if BOX_4 ==1: week_one_refined = week_one_raw +W1 week_two_refined = week_one_raw +W2 week_three_refined = week_one_raw +W3 week_four_refined = week_one_raw +W5 week_to_pay_refined = week_one_raw +W6 if BOX_3 ==1: week_one_refined = week_one_raw +W1 if BOX_4 == 0: week_one_refined = week_one_raw +W1 week_two_refined = week_one_raw +W2 week_three_refined = week_one_raw +W4 week_four_refined = week_one_raw +W5 week_to_pay_refined = week_one_raw +W6 if BOX_4 == 1: week_one_refined = week_one_raw +W1 week_two_refined = week_one_raw +W2 week_three_refined = week_one_raw +W5 week_four_refined = week_one_raw +W6 week_to_pay_refined = week_one_raw +W7 if BOX_2 == 1: week_one_refined = week_one_raw + W2 if BOX_3 == 0: if BOX_4 ==0: week_one_refined = week_one_raw +W2 week_two_refined = week_one_raw +W3 week_three_refined = week_one_raw +W4 week_four_refined = week_one_raw +W5 week_to_pay_refined = week_one_raw +W6 if BOX_4 ==1: week_one_refined = week_one_raw +W2 week_two_refined = week_one_raw +W3 week_three_refined = week_one_raw +W4 week_four_refined = week_one_raw +W6 week_to_pay_refined = week_one_raw +W7 if BOX_3 ==1: if BOX_4 ==0: week_one_refined = week_one_raw + W3 week_two_refined = week_one_raw + W4 week_three_refined = week_one_raw + W5 week_four_refined = week_one_raw + W6 week_to_pay_refined = week_one_raw + W7 if BOX_4 ==1: week_one_refined = week_one_raw + W4 week_two_refined = week_one_raw + W5 week_three_refined = week_one_raw + W6 week_four_refined = week_one_raw + W7 week_to_pay_refined = week_one_raw + W8