Rammohan0504 commited on
Commit
826aebe
·
verified ·
1 Parent(s): b5beb9f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +29 -56
app.py CHANGED
@@ -13,13 +13,6 @@ from dotenv import load_dotenv
13
  import base64
14
  import io
15
  import concurrent.futures
16
- import logging
17
-
18
-
19
-
20
- # Configure logging to show detailed messages
21
- logging.basicConfig(level=logging.DEBUG)
22
- logger = logging.getLogger(__name__)
23
 
24
  # Load environment variables from .env file
25
  load_dotenv()
@@ -118,60 +111,40 @@ def save_dpr_to_pdf(dpr_text, image_paths, captions, filename):
118
  except Exception as e:
119
  return f"Error saving PDF: {str(e)}", None
120
 
121
-
122
-
123
- import base64
124
-
125
- def upload_pdf_to_salesforce(pdf_file, project_title, record_id=None, sf_connection=None):
126
  try:
127
- if not sf_connection:
128
- logger.error("Salesforce connection failed. Cannot upload PDF.")
129
- return None, None
130
-
131
  # Read file content and encode in base64
132
- encoded_pdf_data = base64.b64encode(pdf_file.getvalue()).decode('utf-8')
133
- logger.debug(f"Uploading PDF for project: {project_title}, record ID: {record_id}")
134
-
 
135
  # Set description based on file type
136
- description = "Daily Progress Report PDF" if pdf_file.name.endswith(".pdf") else "Site Image"
137
-
138
- # Prepare ContentVersion data
139
- content_version_data = {
140
- "Title": filename,
141
- "PathOnClient": filename,
142
- "VersionData": encoded_pdf_data,
143
- "Description": description
144
- }
145
-
146
- # If a record ID is provided, associate the file with a Salesforce record
147
- if record_id:
148
- content_version_data["FirstPublishLocationId"] = record_id
149
-
150
- # Create ContentVersion in Salesforce
151
- content_version = sf_connection.ContentVersion.create(content_version_data)
152
- content_version_id = content_version["id"]
153
- logger.info(f"PDF uploaded to Salesforce with ContentVersion ID: {content_version_id}")
154
-
155
- # Query to get ContentDocumentId from the ContentVersion record
156
- result = sf_connection.query(f"SELECT Id, ContentDocumentId FROM ContentVersion WHERE Id = '{content_version_id}'")
157
- if not result['records']:
158
- logger.error("No records returned for ContentVersion query")
159
- return content_version_id, None
160
-
161
- # Retrieve ContentDocumentId
162
- content_document_id = result['records'][0]['ContentDocumentId']
163
 
164
- # Generate a valid Salesforce URL for the file (Download link)
165
- instance_url = sf_connection.base_url.split('/')[2] # Extract instance URL (e.g., 'na1', 'ap1', etc.)
166
- file_url = f"https://{instance_url}.salesforce.com/sfc/servlet.shepherd/version/download/{content_version_id}"
 
 
 
 
 
 
167
 
168
- logger.debug(f"Generated PDF URL: {file_url}")
169
- return content_version_id, file_url
170
-
171
  except Exception as e:
172
- logger.error(f"Error uploading PDF to Salesforce: {str(e)}", exc_info=True)
173
- return None, None
174
-
175
  # Function to generate the daily progress report (DPR), save as PDF, and upload to Salesforce
176
  def generate_dpr(files):
177
  dpr_text = []
@@ -225,7 +198,7 @@ def generate_dpr(files):
225
  salesforce_result += f"Created Daily_Progress_Reports__c record with ID: {dpr_record_id}\n"
226
 
227
  # Upload PDF to Salesforce
228
- pdf_content_document_id, pdf_url, pdf_upload_result = upload_pdf_to_salesforce(
229
  pdf_filepath, pdf_filename, sf, "pdf"
230
  )
231
  salesforce_result += pdf_upload_result + "\n"
 
13
  import base64
14
  import io
15
  import concurrent.futures
 
 
 
 
 
 
 
16
 
17
  # Load environment variables from .env file
18
  load_dotenv()
 
111
  except Exception as e:
112
  return f"Error saving PDF: {str(e)}", None
113
 
114
+ # Function to upload a file to Salesforce as ContentVersion
115
+ def upload_file_to_salesforce(file_path, filename, sf_connection, file_type):
 
 
 
116
  try:
 
 
 
 
117
  # Read file content and encode in base64
118
+ with open(file_path, 'rb') as f:
119
+ file_content = f.read()
120
+ file_content_b64 = base64.b64encode(file_content).decode('utf-8')
121
+
122
  # Set description based on file type
123
+ description = "Daily Progress Report PDF" if file_type == "pdf" else "Site Image"
124
+
125
+ # Create ContentVersion
126
+ content_version = sf_connection.ContentVersion.create({
127
+ 'Title': filename,
128
+ 'PathOnClient': filename,
129
+ 'VersionData': file_content_b64,
130
+ 'Description': description
131
+ })
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
132
 
133
+ # Get ContentDocumentId
134
+ content_version_id = content_version['id']
135
+ content_document = sf_connection.query(
136
+ f"SELECT ContentDocumentId FROM ContentVersion WHERE Id = '{content_version_id}'"
137
+ )
138
+ content_document_id = content_document['records'][0]['ContentDocumentId']
139
+
140
+ # Generate a valid Salesforce URL for the ContentDocument
141
+ content_document_url = f"https://{sf_connection.sf_instance}.salesforce.com/{content_document_id}"
142
 
143
+ # Ensure the link is valid
144
+ return content_document_id, content_document_url, f"File {filename} uploaded successfully"
 
145
  except Exception as e:
146
+ return None, None, f"Error uploading {filename} to Salesforce: {str(e)}"
147
+
 
148
  # Function to generate the daily progress report (DPR), save as PDF, and upload to Salesforce
149
  def generate_dpr(files):
150
  dpr_text = []
 
198
  salesforce_result += f"Created Daily_Progress_Reports__c record with ID: {dpr_record_id}\n"
199
 
200
  # Upload PDF to Salesforce
201
+ pdf_content_document_id, pdf_url, pdf_upload_result = upload_file_to_salesforce(
202
  pdf_filepath, pdf_filename, sf, "pdf"
203
  )
204
  salesforce_result += pdf_upload_result + "\n"