-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain.py
121 lines (96 loc) · 4.37 KB
/
main.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import smartsheet
import json
access_token = None
ss_client = smartsheet.Smartsheet(access_token)
column_map = {}
departments = ["CNC", "Design", "Fab", "Install", "Metal", "Paint", "Sculpt", "Shipping"]
def get_cell_by_column_name(row, column_name):
column_id = column_map[column_name]
return row.get_column(column_id)
def make_approved(source_row):
new_cell = smartsheet.models.Cell()
new_cell.column_id = column_map["Approved?"]
new_cell.formula = '=IF(OR([Supervisor Confirmed]@row = 1, [PM Override]@row = 1), 1, 0)'
new_row = smartsheet.models.Row()
new_row.id = source_row.id
new_row.cells.append(new_cell)
return new_row
#def make_pm(source_row, pm):
# new_cell = smartsheet.models.Cell()
# new_cell.column_id = column_map["PM"]
# new_cell.value = pm
# new_row = smartsheet.models.Row()
# new_row.id = source_row.id
# new_row.cells.append(new_cell)
# return new_row
def make_start(source_row, source_dept):
new_cell = smartsheet.models.Cell()
new_cell.column_id = column_map[source_dept + " Start"]
new_cell.formula = '=IF([Labor / Complete]@row = 0, IF([Dept.]@row = "' + source_dept + '", Start@row))'
new_row = smartsheet.models.Row()
new_row.id = source_row.id
new_row.cells.append(new_cell)
return new_row
def make_finish(source_row, source_dept):
new_cell = smartsheet.models.Cell()
new_cell.column_id = column_map[source_dept + " Finish"]
new_cell.formula = '=IF([Labor / Complete]@row = 0, IF([Dept.]@row = "' + source_dept + '", Finish@row))'
new_row = smartsheet.models.Row()
new_row.id = source_row.id
new_row.cells.append(new_cell)
return new_row
def smartsheet_webhook_responder(request):
"""Responds to any HTTP request.
Args:
request (flask.Request): HTTP request object.
Returns:
The response text or any set of values that can be turned into a
Response object using
`make_response <http://flask.pocoo.org/docs/1.0/api/#flask.Flask.make_response>`.
"""
request_json = request.get_json()
# if this is a challenge, return approrpiate verification
if request.args and 'challenge' in request.args:
return 'not far enough'
elif request_json and 'challenge' in request_json:
return json.dumps({
"smartsheetHookResponse": request_json['challenge']
})
# if this is a callback
elif request_json and 'scopeObjectId' in request_json:
sheetid = request_json['scopeObjectId']
sheet = ss_client.Sheets.get_sheet(sheetid)
for column in sheet.columns:
column_map[column.title] = column.id
rowsToUpdate = [row for row in sheet.rows if get_cell_by_column_name(row, "Approved?").display_value is None and get_cell_by_column_name(row, "Item or Task Description").display_value is not None]
# row_map = {}
# for row in sheet.rows:
# row_map[row.row_number] = row
# updating pm done here because it gums things up if executed below and because contact columns don't copy down like functions
# pm_cell = get_cell_by_column_name(row_map[1], 'PM')
# pm_rows = []
# for row in sheet.rows:
# if get_cell_by_column_name(row, 'PM').value is None:
# pm_rows.append(make_pm(row, pm_cell.value))
# updated_row = ss_client.Sheets.update_rows(
# sheet.id,
# pm_rows)
# keep these as loops run on rowsToUpdate, running as individual test-then-write loops uses excess memory or time
if rowsToUpdate != []:
writeRows = []
for row in rowsToUpdate:
write_row = make_approved(row)
writeRows.append(write_row)
result = ss_client.Sheets.update_rows(sheetid, writeRows)
if sheetid != 6507095957759876:
for department in departments:
writeRows = []
for row in rowsToUpdate:
write_row = make_start(row, department)
writeRows.append(write_row)
result = ss_client.Sheets.update_rows(sheetid, writeRows)
for department in departments:
writeRows = []
for row in rowsToUpdate:
write_row = make_finish(row, department)
writeRows.append(write_row)