Implement API ke Form Bantuan

This commit is contained in:
riz081 2025-07-01 17:06:02 +07:00
parent 2803182a02
commit 22d0409c0a

View File

@ -21,6 +21,7 @@ import androidx.activity.result.contract.ActivityResultContracts;
import com.example.bdkipoc.R;
import com.example.bdkipoc.LoginActivity;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.BufferedReader;
@ -29,7 +30,9 @@ import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.Locale;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@ -48,6 +51,27 @@ public class BantuanFormActivity extends AppCompatActivity {
private ExecutorService executor = Executors.newSingleThreadExecutor();
private Handler mainHandler = new Handler(Looper.getMainLooper());
// Dynamic data lists
private List<ParameterDetail> sourceList = new ArrayList<>();
private List<ParameterDetail> issueList = new ArrayList<>();
private List<ParameterDetail> assignList = new ArrayList<>();
// Inner class for parameter details
public static class ParameterDetail {
public int id;
public String name;
public ParameterDetail(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return name;
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@ -61,7 +85,11 @@ public class BantuanFormActivity extends AppCompatActivity {
setContentView(R.layout.activity_bantuan_form);
initViews();
setupSpinners();
// Load dynamic data first, then setup spinners
loadHeaderParams();
loadUsers();
setupListeners();
// Initialize button state
@ -87,31 +115,220 @@ public class BantuanFormActivity extends AppCompatActivity {
backNavigation = findViewById(R.id.back_navigation);
}
private void loadHeaderParams() {
String authToken = LoginActivity.getToken(this);
if (authToken == null || authToken.isEmpty()) {
LoginActivity.logout(this);
return;
}
executor.execute(() -> {
HttpURLConnection connection = null;
try {
URL url = new URL("https://be-edc.msvc.app/header-params/list");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Bearer " + authToken);
connection.setConnectTimeout(15000);
connection.setReadTimeout(15000);
int responseCode = connection.getResponseCode();
if (responseCode == 200) {
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
// Parse response
JSONObject jsonResponse = new JSONObject(response.toString());
JSONArray dataArray = jsonResponse.getJSONArray("data");
// Clear existing lists
sourceList.clear();
issueList.clear();
// Process each header parameter
for (int i = 0; i < dataArray.length(); i++) {
JSONObject headerParam = dataArray.getJSONObject(i);
String code = headerParam.getString("code");
String name = headerParam.getString("name");
// Check if this is ticket_sources (code "01")
if ("01".equals(code) && "ticket_sources".equals(name)) {
JSONArray details = headerParam.getJSONArray("details");
for (int j = 0; j < details.length(); j++) {
JSONObject detail = details.getJSONObject(j);
int id = detail.getInt("id");
String detailName = detail.getString("name");
String status = detail.getString("status");
// Only add active items
if ("1".equals(status)) {
sourceList.add(new ParameterDetail(id, detailName));
}
}
}
// Check if this is issue_categories (code "02")
else if ("02".equals(code) && "issue_categories".equals(name)) {
JSONArray details = headerParam.getJSONArray("details");
for (int j = 0; j < details.length(); j++) {
JSONObject detail = details.getJSONObject(j);
int id = detail.getInt("id");
String detailName = detail.getString("name");
String status = detail.getString("status");
// Only add active items
if ("1".equals(status)) {
issueList.add(new ParameterDetail(id, detailName));
}
}
}
}
// Update UI on main thread
mainHandler.post(() -> {
setupSpinners();
updateButtonState();
});
} else if (responseCode == 401) {
mainHandler.post(() -> {
Toast.makeText(this, "Session expired. Please login again.", Toast.LENGTH_LONG).show();
LoginActivity.logout(this);
});
} else {
mainHandler.post(() -> {
Toast.makeText(this, "Failed to load data. Error: " + responseCode, Toast.LENGTH_LONG).show();
// Setup with empty data
setupSpinners();
});
}
} catch (Exception e) {
mainHandler.post(() -> {
Toast.makeText(this, "Network error: " + e.getMessage(), Toast.LENGTH_LONG).show();
// Setup with empty data
setupSpinners();
});
} finally {
if (connection != null) {
connection.disconnect();
}
}
});
}
private void loadUsers() {
String authToken = LoginActivity.getToken(this);
if (authToken == null || authToken.isEmpty()) {
LoginActivity.logout(this);
return;
}
executor.execute(() -> {
HttpURLConnection connection = null;
try {
URL url = new URL("https://be-edc.msvc.app/users");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Authorization", "Bearer " + authToken);
connection.setConnectTimeout(15000);
connection.setReadTimeout(15000);
int responseCode = connection.getResponseCode();
if (responseCode == 200) {
BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));
StringBuilder response = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
response.append(line);
}
reader.close();
// Parse response
JSONArray usersArray = new JSONArray(response.toString());
// Clear existing list
assignList.clear();
// Process each user
for (int i = 0; i < usersArray.length(); i++) {
JSONObject user = usersArray.getJSONObject(i);
String role = user.getString("role");
boolean isActive = user.getBoolean("is_active");
// Only add superadmin users who are active
if ("superadmin".equals(role) && isActive) {
int id = user.getInt("id");
String name = user.getString("name");
assignList.add(new ParameterDetail(id, name));
}
}
// Update UI on main thread
mainHandler.post(() -> {
setupSpinners();
updateButtonState();
});
} else if (responseCode == 401) {
mainHandler.post(() -> {
Toast.makeText(this, "Session expired. Please login again.", Toast.LENGTH_LONG).show();
LoginActivity.logout(this);
});
} else {
mainHandler.post(() -> {
Toast.makeText(this, "Failed to load users. Error: " + responseCode, Toast.LENGTH_LONG).show();
// Setup with empty data
setupSpinners();
});
}
} catch (Exception e) {
mainHandler.post(() -> {
Toast.makeText(this, "Network error loading users: " + e.getMessage(), Toast.LENGTH_LONG).show();
// Setup with empty data
setupSpinners();
});
} finally {
if (connection != null) {
connection.disconnect();
}
}
});
}
private void setupSpinners() {
// Setup Source Spinner
String[] sourceOptions = {
"Pilih Source",
"WhatsApp",
"Website Hubungi Kami"
};
// Setup Source Spinner (Dynamic)
List<String> sourceOptions = new ArrayList<>();
sourceOptions.add("Pilih Source");
for (ParameterDetail source : sourceList) {
sourceOptions.add(source.name);
}
ArrayAdapter<String> sourceAdapter = new ArrayAdapter<>(this,
android.R.layout.simple_spinner_item, sourceOptions);
sourceAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerSource.setAdapter(sourceAdapter);
// Setup Issue Spinner
String[] issueOptions = {
"Pilih Issue",
"Koneksi EDC Bermasalah",
"Permintaan Tambahan EDC",
"Pergantian EDC"
};
// Setup Issue Spinner (Dynamic)
List<String> issueOptions = new ArrayList<>();
issueOptions.add("Pilih Issue");
for (ParameterDetail issue : issueList) {
issueOptions.add(issue.name);
}
ArrayAdapter<String> issueAdapter = new ArrayAdapter<>(this,
android.R.layout.simple_spinner_item, issueOptions);
issueAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerIssue.setAdapter(issueAdapter);
// Setup Merchant Spinner
// Setup Merchant Spinner (Static - unchanged)
String[] merchantOptions = {
"Pilih Merchant",
"Surabaya",
@ -133,16 +350,12 @@ public class BantuanFormActivity extends AppCompatActivity {
merchantAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinnerMerchant.setAdapter(merchantAdapter);
// Setup Assign Spinner
String[] assignOptions = {
"Pilih Assign",
"welno hedi prabowo putro jenaka prima",
"rizqika",
"budi",
"binomo",
"budi",
"Irfan Muslim Saputra"
};
// Setup Assign Spinner (Dynamic)
List<String> assignOptions = new ArrayList<>();
assignOptions.add("Pilih Assign");
for (ParameterDetail assign : assignList) {
assignOptions.add(assign.name);
}
ArrayAdapter<String> assignAdapter = new ArrayAdapter<>(this,
android.R.layout.simple_spinner_item, assignOptions);
assignAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
@ -325,20 +538,17 @@ public class BantuanFormActivity extends AppCompatActivity {
}
private int getSourceId(int position) {
switch (position) {
case 1: return 1; // WhatsApp
case 2: return 2; // Website Hubungi Kami
default: return 0;
if (position > 0 && position <= sourceList.size()) {
return sourceList.get(position - 1).id;
}
return 0;
}
private int getIssueId(int position) {
switch (position) {
case 1: return 4; // Koneksi EDC Bermasalah
case 2: return 5; // Permintaan Tambahan EDC
case 3: return 6; // Pergantian EDC
default: return 0;
if (position > 0 && position <= issueList.size()) {
return issueList.get(position - 1).id;
}
return 0;
}
private int getMerchantId(int position) {
@ -361,15 +571,10 @@ public class BantuanFormActivity extends AppCompatActivity {
}
private int getAssignId(int position) {
switch (position) {
case 1: return 1; // welno hedi prabowo putro jenaka prima
case 2: return 2; // rizqika
case 3: return 3; // budi
case 4: return 4; // binomo
case 5: return 5; // budi
case 6: return 6; // Irfan Muslim Saputra
default: return 0;
if (position > 0 && position <= assignList.size()) {
return assignList.get(position - 1).id;
}
return 0;
}
private void submitForm() {