Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -94,8 +94,8 @@ def save_dpr_to_pdf(dpr_text, filename):
|
|
94 |
except Exception as e:
|
95 |
return f"Error saving PDF: {str(e)}", None
|
96 |
|
97 |
-
# Function to upload a file to Salesforce as ContentVersion
|
98 |
-
def upload_file_to_salesforce(file_path, filename, sf_connection
|
99 |
try:
|
100 |
# Read file content and encode in base64
|
101 |
with open(file_path, 'rb') as f:
|
@@ -107,7 +107,7 @@ def upload_file_to_salesforce(file_path, filename, sf_connection, field_name):
|
|
107 |
'Title': filename,
|
108 |
'PathOnClient': filename,
|
109 |
'VersionData': file_content_b64,
|
110 |
-
'Description': f'Uploaded for
|
111 |
})
|
112 |
|
113 |
# Get ContentDocumentId
|
@@ -117,12 +117,9 @@ def upload_file_to_salesforce(file_path, filename, sf_connection, field_name):
|
|
117 |
)
|
118 |
content_document_id = content_document['records'][0]['ContentDocumentId']
|
119 |
|
120 |
-
|
121 |
-
file_url = f"/sfc/servlet.shepherd/document/download/{content_document_id}"
|
122 |
-
|
123 |
-
return content_document_id, file_url, f"File {filename} uploaded successfully for {field_name}"
|
124 |
except Exception as e:
|
125 |
-
return None,
|
126 |
|
127 |
# Function to generate the daily progress report (DPR), save as PDF, and upload to Salesforce
|
128 |
def generate_dpr(files):
|
@@ -161,40 +158,24 @@ def generate_dpr(files):
|
|
161 |
# Salesforce upload
|
162 |
salesforce_result = ""
|
163 |
pdf_content_document_id = None
|
164 |
-
pdf_url = None
|
165 |
-
image_urls = []
|
166 |
image_content_document_ids = []
|
167 |
|
168 |
if sf and pdf_filepath:
|
169 |
try:
|
170 |
-
#
|
171 |
-
pdf_content_document_id, pdf_url, pdf_upload_result = upload_file_to_salesforce(
|
172 |
-
pdf_filepath, pdf_filename, sf, 'Report_PDF__c'
|
173 |
-
)
|
174 |
-
salesforce_result += pdf_upload_result + "\n"
|
175 |
-
|
176 |
-
# Upload images to Salesforce for Site_Images__c
|
177 |
-
for file in files:
|
178 |
-
image_filename = os.path.basename(file.name)
|
179 |
-
image_content_document_id, image_url, image_upload_result = upload_file_to_salesforce(
|
180 |
-
file.name, image_filename, sf, 'Site_Images__c'
|
181 |
-
)
|
182 |
-
if image_content_document_id and image_url:
|
183 |
-
image_content_document_ids.append(image_content_document_id)
|
184 |
-
image_urls.append(image_url)
|
185 |
-
salesforce_result += image_upload_result + "\n"
|
186 |
-
|
187 |
-
# Create Daily_Progress_Reports__c record with file URLs
|
188 |
report_description = "; ".join(captions)[:255] # Concatenate captions, limit to 255 chars
|
189 |
-
images_urls_str = ";".join(image_urls) # Semicolon-separated image URLs
|
190 |
dpr_record = sf.Daily_Progress_Reports__c.create({
|
191 |
-
'Report_Description__c': report_description
|
192 |
-
'Report_PDF__c': pdf_url if pdf_url else '',
|
193 |
-
'Site_Images__c': images_urls_str if images_urls_str else ''
|
194 |
})
|
195 |
dpr_record_id = dpr_record['id']
|
196 |
salesforce_result += f"Created Daily_Progress_Reports__c record with ID: {dpr_record_id}\n"
|
197 |
|
|
|
|
|
|
|
|
|
|
|
|
|
198 |
# Link PDF to DPR record
|
199 |
if pdf_content_document_id:
|
200 |
sf.ContentDocumentLink.create({
|
@@ -203,13 +184,23 @@ def generate_dpr(files):
|
|
203 |
'ShareType': 'V'
|
204 |
})
|
205 |
|
206 |
-
#
|
207 |
-
for
|
208 |
-
|
209 |
-
|
210 |
-
|
211 |
-
|
212 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
213 |
|
214 |
except Exception as e:
|
215 |
salesforce_result += f"Error interacting with Salesforce: {str(e)}\n"
|
@@ -231,7 +222,7 @@ iface = gr.Interface(
|
|
231 |
gr.File(label="Download PDF")
|
232 |
],
|
233 |
title="Daily Progress Report Generator",
|
234 |
-
description="Upload up to 10 site photos. The AI model will generate a text-based Daily Progress Report (DPR), save it as a PDF, and upload the PDF
|
235 |
allow_flagging="never"
|
236 |
)
|
237 |
|
|
|
94 |
except Exception as e:
|
95 |
return f"Error saving PDF: {str(e)}", None
|
96 |
|
97 |
+
# Function to upload a file to Salesforce as ContentVersion
|
98 |
+
def upload_file_to_salesforce(file_path, filename, sf_connection):
|
99 |
try:
|
100 |
# Read file content and encode in base64
|
101 |
with open(file_path, 'rb') as f:
|
|
|
107 |
'Title': filename,
|
108 |
'PathOnClient': filename,
|
109 |
'VersionData': file_content_b64,
|
110 |
+
'Description': f'Uploaded for Daily Progress Report'
|
111 |
})
|
112 |
|
113 |
# Get ContentDocumentId
|
|
|
117 |
)
|
118 |
content_document_id = content_document['records'][0]['ContentDocumentId']
|
119 |
|
120 |
+
return content_document_id, f"File {filename} uploaded successfully"
|
|
|
|
|
|
|
121 |
except Exception as e:
|
122 |
+
return None, f"Error uploading {filename} to Salesforce: {str(e)}"
|
123 |
|
124 |
# Function to generate the daily progress report (DPR), save as PDF, and upload to Salesforce
|
125 |
def generate_dpr(files):
|
|
|
158 |
# Salesforce upload
|
159 |
salesforce_result = ""
|
160 |
pdf_content_document_id = None
|
|
|
|
|
161 |
image_content_document_ids = []
|
162 |
|
163 |
if sf and pdf_filepath:
|
164 |
try:
|
165 |
+
# Create Daily_Progress_Reports__c record
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
166 |
report_description = "; ".join(captions)[:255] # Concatenate captions, limit to 255 chars
|
|
|
167 |
dpr_record = sf.Daily_Progress_Reports__c.create({
|
168 |
+
'Report_Description__c': report_description
|
|
|
|
|
169 |
})
|
170 |
dpr_record_id = dpr_record['id']
|
171 |
salesforce_result += f"Created Daily_Progress_Reports__c record with ID: {dpr_record_id}\n"
|
172 |
|
173 |
+
# Upload PDF to Salesforce
|
174 |
+
pdf_content_document_id, pdf_upload_result = upload_file_to_salesforce(
|
175 |
+
pdf_filepath, pdf_filename, sf
|
176 |
+
)
|
177 |
+
salesforce_result += pdf_upload_result + "\n"
|
178 |
+
|
179 |
# Link PDF to DPR record
|
180 |
if pdf_content_document_id:
|
181 |
sf.ContentDocumentLink.create({
|
|
|
184 |
'ShareType': 'V'
|
185 |
})
|
186 |
|
187 |
+
# Upload images to Salesforce
|
188 |
+
for file in files:
|
189 |
+
image_filename = os.path.basename(file.name)
|
190 |
+
image_content_document_id, image_upload_result = upload_file_to_salesforce(
|
191 |
+
file.name, image_filename, sf
|
192 |
+
)
|
193 |
+
if image_content_document_id:
|
194 |
+
image_content_document_ids.append(image_content_document_id)
|
195 |
+
salesforce_result += image_upload_result + "\n"
|
196 |
+
|
197 |
+
# Link image to DPR record
|
198 |
+
if image_content_document_id:
|
199 |
+
sf.ContentDocumentLink.create({
|
200 |
+
'ContentDocumentId': image_content_document_id,
|
201 |
+
'LinkedEntityId': dpr_record_id,
|
202 |
+
'ShareType': 'V'
|
203 |
+
})
|
204 |
|
205 |
except Exception as e:
|
206 |
salesforce_result += f"Error interacting with Salesforce: {str(e)}\n"
|
|
|
222 |
gr.File(label="Download PDF")
|
223 |
],
|
224 |
title="Daily Progress Report Generator",
|
225 |
+
description="Upload up to 10 site photos. The AI model will generate a text-based Daily Progress Report (DPR), save it as a PDF, and upload the PDF and images to Salesforce under Daily_Progress_Reports__c in the Files related list. Download the PDF locally if needed.",
|
226 |
allow_flagging="never"
|
227 |
)
|
228 |
|