Dineshpopuri commited on
Commit
8a52c81
·
verified ·
1 Parent(s): 6949038

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +41 -17
app.py CHANGED
@@ -65,7 +65,7 @@ else:
65
  def init_salesforce():
66
  if not SALESFORCE_AVAILABLE:
67
  logging.error("Salesforce library not available. Skipping connection.")
68
- return None, "Salesforce library not available"
69
 
70
  try:
71
  logging.info("Attempting to connect to Salesforce...")
@@ -76,23 +76,46 @@ def init_salesforce():
76
  instance_url=SF_INSTANCE_URL
77
  )
78
  logging.info("Salesforce connected successfully")
 
79
  # Test read access on Project_Closure_Handover__c
80
  test_query = sf.query("SELECT Id FROM Project_Closure_Handover__c LIMIT 1")
81
  logging.info(f"Test query result (read access): {test_query}")
82
- # Test read access on Project__c (assumed related object)
83
- project_query = sf.query("SELECT Id FROM Project__c LIMIT 1")
84
- logging.info(f"Project__c test query result (read access): {project_query}")
85
- # Test object permissions
86
  object_description = sf.Project_Closure_Handover__c.describe()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
87
  permissions = {
88
  "createable": object_description.get("createable", False),
89
  "updateable": object_description.get("updateable", False)
90
  }
91
- logging.info(f"Object permissions: {permissions}")
92
  if not permissions["createable"]:
93
  logging.error("User lacks create permission on Project_Closure_Handover__c")
94
- return None, "User lacks create permission on Project_Closure_Handover__c"
95
- return sf, "Salesforce connected successfully"
 
96
  except SalesforceError as e:
97
  logging.error(f"Salesforce authentication failed: {str(e)}")
98
  logging.error("Possible issues: Incorrect credentials, IP restrictions, or insufficient permissions.")
@@ -103,16 +126,17 @@ def init_salesforce():
103
  raise
104
 
105
  # Function to get the Salesforce record ID for a project based on its custom identifier
106
- def get_project_record_id(sf, project_code):
107
  try:
108
- # Assuming Project__c has a field 'Project_Code__c' or 'Name' that stores the identifier (e.g., PRJ-001)
109
- # Adjust the field name based on your Salesforce org's configuration
110
- query = f"SELECT Id FROM Project__c WHERE Project_Code__c = '{project_code}' LIMIT 1"
 
111
  result = sf.query(query)
112
  logging.debug(f"Project query result: {result}")
113
  if result['totalSize'] == 0:
114
- logging.error(f"No project found with Project_Code__c: {project_code}")
115
- return None, f"No project found with Project Code: {project_code}"
116
  record_id = result['records'][0]['Id']
117
  logging.info(f"Found project record ID: {record_id} for Project_Code__c: {project_code}")
118
  return record_id, "Success"
@@ -150,13 +174,13 @@ def create_salesforce_record(project_id, score, checklist_summary, missing_summa
150
  return "Salesforce library not available"
151
 
152
  try:
153
- sf, connection_message = init_salesforce()
154
- if not sf:
155
  logging.error(f"Skipping Salesforce record creation due to connection failure: {connection_message}")
156
  return connection_message
157
 
158
  # Get the Salesforce record ID for the project
159
- project_record_id, project_query_message = get_project_record_id(sf, project_id)
160
  if not project_record_id:
161
  logging.error(f"Failed to get project record ID: {project_query_message}")
162
  return f"Error: {project_query_message}"
 
65
  def init_salesforce():
66
  if not SALESFORCE_AVAILABLE:
67
  logging.error("Salesforce library not available. Skipping connection.")
68
+ return None, None, "Salesforce library not available"
69
 
70
  try:
71
  logging.info("Attempting to connect to Salesforce...")
 
76
  instance_url=SF_INSTANCE_URL
77
  )
78
  logging.info("Salesforce connected successfully")
79
+
80
  # Test read access on Project_Closure_Handover__c
81
  test_query = sf.query("SELECT Id FROM Project_Closure_Handover__c LIMIT 1")
82
  logging.info(f"Test query result (read access): {test_query}")
83
+
84
+ # Describe Project_Closure_Handover__c to find the related object for Project_ID__c
 
 
85
  object_description = sf.Project_Closure_Handover__c.describe()
86
+ project_id_field = None
87
+ for field in object_description['fields']:
88
+ if field['name'] == 'Project_ID__c':
89
+ project_id_field = field
90
+ break
91
+
92
+ if not project_id_field:
93
+ logging.error("Project_ID__c field not found on Project_Closure_Handover__c")
94
+ return None, None, "Project_ID__c field not found on Project_Closure_Handover__c"
95
+
96
+ # Check if Project_ID__c is a reference (Lookup) field
97
+ if not project_id_field['referenceTo']:
98
+ logging.error("Project_ID__c is not a reference field. It must be a Lookup or Master-Detail field.")
99
+ return None, None, "Project_ID__c is not a reference field"
100
+
101
+ related_object = project_id_field['referenceTo'][0] # e.g., 'Projects__c'
102
+ logging.info(f"Project_ID__c references object: {related_object}")
103
+
104
+ # Test read access on the related object
105
+ related_query = sf.query(f"SELECT Id FROM {related_object} LIMIT 1")
106
+ logging.info(f"{related_object} test query result (read access): {related_query}")
107
+
108
+ # Test object permissions for Project_Closure_Handover__c
109
  permissions = {
110
  "createable": object_description.get("createable", False),
111
  "updateable": object_description.get("updateable", False)
112
  }
113
+ logging.info(f"Object permissions for Project_Closure_Handover__c: {permissions}")
114
  if not permissions["createable"]:
115
  logging.error("User lacks create permission on Project_Closure_Handover__c")
116
+ return None, None, "User lacks create permission on Project_Closure_Handover__c"
117
+
118
+ return sf, related_object, "Salesforce connected successfully"
119
  except SalesforceError as e:
120
  logging.error(f"Salesforce authentication failed: {str(e)}")
121
  logging.error("Possible issues: Incorrect credentials, IP restrictions, or insufficient permissions.")
 
126
  raise
127
 
128
  # Function to get the Salesforce record ID for a project based on its custom identifier
129
+ def get_project_record_id(sf, related_object, project_code):
130
  try:
131
+ # Query the related object to find a record matching the project_code
132
+ # Assuming the related object has a field 'Project_Code__c' to match the identifier
133
+ # Adjust the field name (e.g., to 'Name' or 'ProjectNumber__c') based on your Salesforce org
134
+ query = f"SELECT Id FROM {related_object} WHERE Project_Code__c = '{project_code}' LIMIT 1"
135
  result = sf.query(query)
136
  logging.debug(f"Project query result: {result}")
137
  if result['totalSize'] == 0:
138
+ logging.error(f"No project found with Project_Code__c: {project_code} in {related_object}")
139
+ return None, f"No project found with Project Code: {project_code} in {related_object}"
140
  record_id = result['records'][0]['Id']
141
  logging.info(f"Found project record ID: {record_id} for Project_Code__c: {project_code}")
142
  return record_id, "Success"
 
174
  return "Salesforce library not available"
175
 
176
  try:
177
+ sf, related_object, connection_message = init_salesforce()
178
+ if not sf or not related_object:
179
  logging.error(f"Skipping Salesforce record creation due to connection failure: {connection_message}")
180
  return connection_message
181
 
182
  # Get the Salesforce record ID for the project
183
+ project_record_id, project_query_message = get_project_record_id(sf, related_object, project_id)
184
  if not project_record_id:
185
  logging.error(f"Failed to get project record ID: {project_query_message}")
186
  return f"Error: {project_query_message}"