Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -113,54 +113,58 @@ def save_dpr_to_pdf(dpr_text, image_paths, captions, filename):
|
|
113 |
|
114 |
|
115 |
|
116 |
-
|
|
|
|
|
117 |
try:
|
118 |
-
|
119 |
-
if not sf:
|
120 |
logger.error("Salesforce connection failed. Cannot upload PDF.")
|
121 |
return None, None
|
122 |
|
123 |
-
#
|
124 |
encoded_pdf_data = base64.b64encode(pdf_file.getvalue()).decode('utf-8')
|
125 |
logger.debug(f"Uploading PDF for project: {project_title}, record ID: {record_id}")
|
126 |
-
|
127 |
-
# Create ContentVersion
|
128 |
-
content_version = sf_connection.ContentVersion.create({
|
129 |
-
'Title': filename,
|
130 |
-
'PathOnClient': filename,
|
131 |
-
'VersionData': file_content_b64,
|
132 |
-
'Description': description
|
133 |
-
})
|
134 |
-
|
135 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
136 |
if record_id:
|
137 |
content_version_data["FirstPublishLocationId"] = record_id
|
138 |
|
139 |
-
#
|
140 |
-
content_version =
|
141 |
content_version_id = content_version["id"]
|
142 |
logger.info(f"PDF uploaded to Salesforce with ContentVersion ID: {content_version_id}")
|
143 |
|
144 |
-
# Query to get the
|
145 |
-
result =
|
146 |
if not result['records']:
|
147 |
logger.error("No records returned for ContentVersion query")
|
148 |
return content_version_id, None
|
149 |
|
|
|
150 |
content_document_id = result['records'][0]['ContentDocumentId']
|
151 |
|
152 |
-
#
|
153 |
-
|
|
|
|
|
154 |
logger.debug(f"Generated PDF URL: {file_url}")
|
155 |
-
|
156 |
return content_version_id, file_url
|
157 |
-
|
158 |
except Exception as e:
|
159 |
logger.error(f"Error uploading PDF to Salesforce: {str(e)}", exc_info=True)
|
160 |
return None, None
|
161 |
-
|
162 |
-
|
163 |
-
|
164 |
# Function to generate the daily progress report (DPR), save as PDF, and upload to Salesforce
|
165 |
def generate_dpr(files):
|
166 |
dpr_text = []
|
|
|
113 |
|
114 |
|
115 |
|
116 |
+
import base64
|
117 |
+
|
118 |
+
def upload_pdf_to_salesforce(pdf_file, project_title, record_id=None, sf_connection=None):
|
119 |
try:
|
120 |
+
if not sf_connection:
|
|
|
121 |
logger.error("Salesforce connection failed. Cannot upload PDF.")
|
122 |
return None, None
|
123 |
|
124 |
+
# Read file content and encode in base64
|
125 |
encoded_pdf_data = base64.b64encode(pdf_file.getvalue()).decode('utf-8')
|
126 |
logger.debug(f"Uploading PDF for project: {project_title}, record ID: {record_id}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
127 |
|
128 |
+
# Set description based on file type
|
129 |
+
description = "Daily Progress Report PDF" if pdf_file.name.endswith(".pdf") else "Site Image"
|
130 |
+
|
131 |
+
# Prepare ContentVersion data
|
132 |
+
content_version_data = {
|
133 |
+
"Title": filename,
|
134 |
+
"PathOnClient": filename,
|
135 |
+
"VersionData": encoded_pdf_data,
|
136 |
+
"Description": description
|
137 |
+
}
|
138 |
+
|
139 |
+
# If a record ID is provided, associate the file with a Salesforce record
|
140 |
if record_id:
|
141 |
content_version_data["FirstPublishLocationId"] = record_id
|
142 |
|
143 |
+
# Create ContentVersion in Salesforce
|
144 |
+
content_version = sf_connection.ContentVersion.create(content_version_data)
|
145 |
content_version_id = content_version["id"]
|
146 |
logger.info(f"PDF uploaded to Salesforce with ContentVersion ID: {content_version_id}")
|
147 |
|
148 |
+
# Query to get ContentDocumentId from the ContentVersion record
|
149 |
+
result = sf_connection.query(f"SELECT Id, ContentDocumentId FROM ContentVersion WHERE Id = '{content_version_id}'")
|
150 |
if not result['records']:
|
151 |
logger.error("No records returned for ContentVersion query")
|
152 |
return content_version_id, None
|
153 |
|
154 |
+
# Retrieve ContentDocumentId
|
155 |
content_document_id = result['records'][0]['ContentDocumentId']
|
156 |
|
157 |
+
# Generate a valid Salesforce URL for the file (Download link)
|
158 |
+
instance_url = sf_connection.base_url.split('/')[2] # Extract instance URL (e.g., 'na1', 'ap1', etc.)
|
159 |
+
file_url = f"https://{instance_url}.salesforce.com/sfc/servlet.shepherd/version/download/{content_version_id}"
|
160 |
+
|
161 |
logger.debug(f"Generated PDF URL: {file_url}")
|
|
|
162 |
return content_version_id, file_url
|
163 |
+
|
164 |
except Exception as e:
|
165 |
logger.error(f"Error uploading PDF to Salesforce: {str(e)}", exc_info=True)
|
166 |
return None, None
|
167 |
+
|
|
|
|
|
168 |
# Function to generate the daily progress report (DPR), save as PDF, and upload to Salesforce
|
169 |
def generate_dpr(files):
|
170 |
dpr_text = []
|