Commit fcec8066 by Kunj Gupta

Added View HR Case functionality with screen design, local DB and offline syncing.

parent 4c7d9383
Showing with 1303 additions and 47 deletions
package com.vsoft.servicenow.adapters;
import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.GradientDrawable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import com.vsoft.servicenow.R;
import com.vsoft.servicenow.db.models.HRCaseRequest;
import com.vsoft.servicenow.db.models.MyRequest;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Kunj on 13/04/2018.
*/
public class MyHRCaseAdapter extends BaseAdapter {
private final List<HRCaseRequest> mReqList = new ArrayList<>(0);
private LayoutInflater mInflater;
private Context mContext;
public MyHRCaseAdapter(Context context) {
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mContext = context;
}
public void setRequestList(List<HRCaseRequest> myreqList) {
mReqList.clear();
if (myreqList != null)
mReqList.addAll(myreqList);
notifyDataSetChanged();
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return mReqList.size();
}
@Override
public HRCaseRequest getItem(int position) {
// TODO Auto-generated method stub
return mReqList.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
ViewHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.my_hr_case_list_item, parent, false);
holder = new ViewHolder();
holder.number = (TextView) convertView.findViewById(R.id.number);
// holder.shortDescription = (TextView) convertView.findViewById(R.id.shotrDescription);
holder.approval = (TextView) convertView.findViewById(R.id.approval);
holder.statusIndicator = (ImageView) convertView.findViewById(R.id.approval_image);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
HRCaseRequest req = mReqList.get(position);
holder.number.setText(req.getNumber());
if (!req.getApproval().isEmpty()) {
if (req.getApproval().equalsIgnoreCase("requested")) {
holder.approval.setText(mContext.getResources().getString(R.string.requested));
((GradientDrawable) holder.statusIndicator.getBackground()).setColor(Color.parseColor("#FFB400"));
} else if (req.getApproval().equalsIgnoreCase("not requested")) {
holder.approval.setText(mContext.getResources().getString(R.string.notrequest));
((GradientDrawable) holder.statusIndicator.getBackground()).setColor(Color.parseColor("#5CE1ED"));
} else if (req.getApproval().equalsIgnoreCase("approved")) {
holder.approval.setText(mContext.getResources().getString(R.string.approved));
((GradientDrawable) holder.statusIndicator.getBackground()).setColor(Color.parseColor("#06D323"));
} else if (req.getApproval().equalsIgnoreCase("rejected")) {
holder.approval.setText(mContext.getResources().getString(R.string.rejected));
((GradientDrawable) holder.statusIndicator.getBackground()).setColor(Color.parseColor("#FF0000"));
} else if (req.getApproval().equalsIgnoreCase("not yet requested")) {
holder.approval.setText(mContext.getResources().getString(R.string.notrequest));
((GradientDrawable) holder.statusIndicator.getBackground()).setColor(Color.parseColor("#5CE1ED"));
}
}
return convertView;
}
static class ViewHolder {
private TextView number;
// private TextView shortDescription;
private TextView approval;
private ImageView statusIndicator;
}
}
\ No newline at end of file
...@@ -20,7 +20,7 @@ import retrofit2.http.Url; ...@@ -20,7 +20,7 @@ import retrofit2.http.Url;
/** /**
* @since 1.0 * @since 1.0
* @author Kunj on 11/8/16. * @author Created by Kunj on 13/04/2018.
* *
*/ */
public interface HRCaseVariableApi { public interface HRCaseVariableApi {
......
package com.vsoft.servicenow.api.interfaces;
import com.vsoft.servicenow.utils.Constants;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.GET;
import retrofit2.http.Query;
/**
* @since 1.0
* @author Created by Kunj on 13/04/2018.
*
*/
public interface MyHRCaseApi {
// Get My HRCase API
@GET(Constants.URL_GET_MY_HR_CASE)
Call<ResponseBody> getMyHRCase(@Query(Constants.URL_PARAM_OPENED_BY) String userSysId,
@Query(Constants.URL_PARAM_SYSPRM_DISPLAY_VALUE) String sysparmDisplayValue);
}
...@@ -4,7 +4,7 @@ import com.vsoft.servicenow.db.models.HRCaseVariableResponse; ...@@ -4,7 +4,7 @@ import com.vsoft.servicenow.db.models.HRCaseVariableResponse;
/** /**
* @since 1.0 * @since 1.0
* @author Kunj on 11/8/16 * @author Created by Kunj on 13/04/2018.
* *
*/ */
public interface GetHRCaseVariableApiListener { public interface GetHRCaseVariableApiListener {
......
...@@ -7,7 +7,7 @@ import java.util.List; ...@@ -7,7 +7,7 @@ import java.util.List;
/** /**
* @since 1.0 * @since 1.0
* @author Kunj on 11/8/16 * @author Created by Kunj on 13/04/2018.
* *
*/ */
public interface GetHRCaseVariableChoiceApiListener { public interface GetHRCaseVariableChoiceApiListener {
......
package com.vsoft.servicenow.api.listeners.get;
import com.vsoft.servicenow.db.models.HRCase;
import com.vsoft.servicenow.db.models.HRCaseRequest;
import com.vsoft.servicenow.db.models.MyRequest;
import java.util.List;
/**
* @since 1.0
* @author Created by Kunj on 13/04/2018.
*
*/
public interface GetMyHRCaseApiListener {
void onDoneApiCall(List<HRCaseRequest> catalogueList);
void onFailApiCall();
}
...@@ -2,7 +2,7 @@ package com.vsoft.servicenow.api.listeners.post; ...@@ -2,7 +2,7 @@ package com.vsoft.servicenow.api.listeners.post;
/** /**
* @since 1.0 * @since 1.0
* @author Kunj on 11/8/16 * @author Created by Kunj on 13/04/2018.
* *
*/ */
public interface PostHRCaseAttachmentApiListener { public interface PostHRCaseAttachmentApiListener {
......
...@@ -2,7 +2,7 @@ package com.vsoft.servicenow.api.listeners.post; ...@@ -2,7 +2,7 @@ package com.vsoft.servicenow.api.listeners.post;
/** /**
* @since 1.0 * @since 1.0
* @author Kunj on 11/8/16 * @author Created by Kunj on 13/04/2018.
* *
*/ */
public interface PostHRCaseVariableFormApiListener { public interface PostHRCaseVariableFormApiListener {
......
...@@ -40,7 +40,7 @@ import retrofit2.Response; ...@@ -40,7 +40,7 @@ import retrofit2.Response;
import retrofit2.Retrofit; import retrofit2.Retrofit;
/** /**
* @author Kunj on 11/8/16. * @author Created by Kunj on 13/04/2018.
* *
*/ */
public class HRCaseVariableApiManager { public class HRCaseVariableApiManager {
......
...@@ -36,9 +36,8 @@ import retrofit2.Response; ...@@ -36,9 +36,8 @@ import retrofit2.Response;
import retrofit2.Retrofit; import retrofit2.Retrofit;
/** /**
* @author Kunj on 11/8/16. * @author Created by Kunj on 13/04/2018.
*bkunj@vscbkunj@vsc **/
*/
public class HRCaseVariableChoiceApiManager { public class HRCaseVariableChoiceApiManager {
public static void getHRCaseVariableChoice(Context context, String hrCaseVariableSysId, GetHRCaseVariableChoiceApiListener listener) { public static void getHRCaseVariableChoice(Context context, String hrCaseVariableSysId, GetHRCaseVariableChoiceApiListener listener) {
......
package com.vsoft.servicenow.api.managers;
import android.content.Context;
import android.util.Log;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
import com.vsoft.servicenow.api.RestClient;
import com.vsoft.servicenow.api.interfaces.MyHRCaseApi;
import com.vsoft.servicenow.api.interfaces.MyRequestApi;
import com.vsoft.servicenow.api.listeners.get.GetMyHRCaseApiListener;
import com.vsoft.servicenow.api.listeners.get.GetMyRequestApiListener;
import com.vsoft.servicenow.db.models.HRCaseRequest;
import com.vsoft.servicenow.db.models.MyRequest;
import com.vsoft.servicenow.enums.SyncStatus;
import com.vsoft.servicenow.utils.CatalogueLog;
import com.vsoft.servicenow.utils.Constants;
import com.vsoft.servicenow.utils.PrefManager;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.Response;
import retrofit2.Retrofit;
/**
* Created by Kunj on 13/04/2018.
*/
public class MyHRCaseApiManager {
public static SyncStatus getMyHRCase(Context context, GetMyHRCaseApiListener listener) {
String accessToken = PrefManager.getSharedPref(context, PrefManager.PREFERENCE_ACCESS_TOKEN);
String userSysId = PrefManager.getSharedPref(context, PrefManager.PREFERENCE_USER_SYS_ID);
if(accessToken.isEmpty()) {
listener.onFailApiCall();
return SyncStatus.FAIL;
}
final Retrofit retrofit = RestClient.getInitializedRestAdapter(accessToken);
Call<ResponseBody> call = retrofit.create(MyHRCaseApi.class).getMyHRCase(userSysId, "true");
try {
//Retrofit synchronous call
Response<ResponseBody> response = call.execute();
if (response.isSuccessful()) {
try {
JSONObject jsonObject = new JSONObject(response.body().string());
JSONObject error = jsonObject.optJSONObject(Constants.RESPONSE_ERROR_OBJECT_NAME);
if (error == null) {
JSONArray hrCaseJsonArray = jsonObject.getJSONArray(Constants.RESPONSE_RESULT_OBJECT_NAME);
if(hrCaseJsonArray.length() > 0) {
Gson gson = new GsonBuilder()
.excludeFieldsWithoutExposeAnnotation()
.registerTypeAdapter(long.class, new JsonDeserializer<Long>() {
@Override
public Long deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
long value = 0;
try {
value = json.getAsLong();
} catch (NumberFormatException e) {
CatalogueLog.d("MyHRCaseApiManager: getMyHRCase: deserialize: long.class: NumberFormatException: ");
}
return value;
}
})
.registerTypeAdapter(int.class, new JsonDeserializer<Integer>() {
@Override
public Integer deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
int value = 0;
try {
value = json.getAsInt();
} catch (NumberFormatException e) {
CatalogueLog.d("MyHRCaseApiManager: getMyHRCase: deserialize: int.class: NumberFormatException: ");
}
return value;
}
})
.registerTypeAdapter(float.class, new JsonDeserializer<Float>() {
@Override
public Float deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
float value = 0;
try {
value = json.getAsFloat();
} catch (NumberFormatException e) {
CatalogueLog.e("MyHRCaseApiManager: getMyHRCase: deserialize: float.class: NumberFormatException: ", e);
}
return value;
}
})
.create();
List<HRCaseRequest> hrCaseList = new ArrayList<>(hrCaseJsonArray.length());
for (int i = 0; i < hrCaseJsonArray.length(); i++) {
JSONObject hrCaseJsonObject = hrCaseJsonArray.getJSONObject(i);
HRCaseRequest hrCaseRequest = gson.fromJson(hrCaseJsonObject.toString(), HRCaseRequest.class);
hrCaseRequest.parseJson(hrCaseJsonObject);
hrCaseList.add(hrCaseRequest);
}
listener.onDoneApiCall(hrCaseList);
} else {
listener.onDoneApiCall(new ArrayList<HRCaseRequest>(0));
}
return SyncStatus.SUCCESS;
} else
return SyncStatus.FAIL;
} catch (JSONException e) {
CatalogueLog.e("MyHRCaseApiManager: getMyHRCase: onResponse: ", e);
return SyncStatus.FAIL;
} catch (IOException e) {
CatalogueLog.e("MyHRCaseApiManager: getMyHRCase: onResponse: ", e);
return SyncStatus.FAIL;
}
} else {
CatalogueLog.d("MyRequestApiManager: getMyRequest: response is not success");
if(response.code() == 401) {
Log.d(Constants.TAG, "-- is 401, try refresh token...");
SyncStatus status = LoginApiManager.refreshLogin(context, PrefManager.getSharedPref(context, PrefManager.PREFERENCE_REFRESH_TOKEN));
if(status == SyncStatus.SUCCESS) {
CatalogueLog.d("refresh token success, retry same...");
return getMyHRCase(context, listener);
} else {
CatalogueLog.d("refresh token failed, return FAIL");
listener.onFailApiCall();
return SyncStatus.FAIL;
}
} else {
listener.onFailApiCall();
return SyncStatus.FAIL;
}
}
} catch (IOException e) {
CatalogueLog.e("MyHRCaseApiManager: getMyHRCase: IOException: ", e);
return SyncStatus.FAIL;
} catch (NullPointerException e) {
CatalogueLog.e("MyHRCaseApiManager: getMyHRCase: NullPointerException: ", e);
return SyncStatus.FAIL;
}
}
}
...@@ -27,6 +27,8 @@ public interface DBConstants { ...@@ -27,6 +27,8 @@ public interface DBConstants {
String TABLE_HR_CASE_UI_POLICY_ACTION = "hr_case_ui_policy_action"; String TABLE_HR_CASE_UI_POLICY_ACTION = "hr_case_ui_policy_action";
String TABLE_HR_CASE_UI_POLICY_ITEM = "hr_case_ui_policy_item"; String TABLE_HR_CASE_UI_POLICY_ITEM = "hr_case_ui_policy_item";
String TABLE_HR_CASE_VARIABLE_CHOICES = "hr_case_variable_choices"; String TABLE_HR_CASE_VARIABLE_CHOICES = "hr_case_variable_choices";
String TABLE_MY_HR_CASE_REQUEST = "hr_case_requests";
String TABLE_MY_HR_CASE_REQUEST_OPENED_BY = "hr_case_request_opened_by";
String ID = "_id"; String ID = "_id";
String SYS_ID = "sys_id"; String SYS_ID = "sys_id";
...@@ -608,4 +610,44 @@ public interface DBConstants { ...@@ -608,4 +610,44 @@ public interface DBConstants {
int INDEX_HR_CASE_VARIABLE_CHOICE_MISC = 5; int INDEX_HR_CASE_VARIABLE_CHOICE_MISC = 5;
int HR_CASE_VARIABLE_CHOICE_COLUMN_COUNT = 6; int HR_CASE_VARIABLE_CHOICE_COLUMN_COUNT = 6;
/**
* HRCaseRequest table
*/
String HR_CASE_REQUEST_ID = ID;
String HR_CASE_REQUEST_NUMBER = "number";
String HR_CASE_REQUEST_SYS_UPDATED_ON = "sys_updated_on";
String HR_CASE_REQUEST_APPROVAL = "approval";
String HR_CASE_REQUEST_OPENED_BY_VALUE = "opened_by_value";
String HR_CASE_REQUEST_SYNC_DIRTY = SYNC_DIRTY;
/**
* Request for HRCaseRequest table. *Use these only if you fetch all columns*
*/
int INDEX_HR_CASE_REQUEST_ID = 0;
int INDEX_HR_CASE_REQUEST_NUMBER = 1;
int INDEX_HR_CASE_REQUEST_SYS_UPDATED_ON = 2;
int INDEX_HR_CASE_REQUEST_APPROVAL = 3;
int INDEX_HR_CASE_REQUEST_OPENED_BY_VALUE = 4;
int INDEX_HR_CASE_REQUEST_SYNC_DIRTY = 5;
int HR_CASE_REQUEST_COLUMN_COUNT = 6;
/**
* TABLE_MY_HR_CASE_REQUEST_OPENED_BY table
*/
String MY_HR_CASE_REQUEST_OPENED_BY_ID = ID;
String MY_HR_CASE_REQUEST_OPENED_BY_DISPLAY_VALUE = "display_value";
String MY_HR_CASE_REQUEST_OPENED_BY_LINK = "link";
String MY_HR_CASE_REQUEST_OPENED_BY_SYNC_DIRTY = SYNC_DIRTY;
/**
* TABLE_MY_HR_CASE_REQUEST_OPENED_BY table. *Use these only if you fetch all columns*
*/
int INDEX_MY_HR_CASE_REQUEST_OPENED_BY_ID = 0;
int INDEX_MY_HR_CASE_REQUEST_OPENED_BY_DISPLAY_VALUE = 1;
int INDEX_MY_HR_CASE_REQUEST_OPENED_BY_LINK = 2;
int INDEX_MY_HR_CASE_REQUEST_OPENED_BY_SYNC_DIRTY = 3;
int MY_HR_CASE_REQUEST_OPENED_BY_COLUMN_COUNT = 4;
} }
\ No newline at end of file
...@@ -59,6 +59,8 @@ public class DBManager extends SQLiteOpenHelper implements DBConstants { ...@@ -59,6 +59,8 @@ public class DBManager extends SQLiteOpenHelper implements DBConstants {
createHRCaseUiPolicyActionTable(db); createHRCaseUiPolicyActionTable(db);
createHRCaseUiPolicyItemTable(db); createHRCaseUiPolicyItemTable(db);
createHRCaseVariableChoiceTable(db); createHRCaseVariableChoiceTable(db);
createMyHRCaseRequestTable(db);
createMyHRCaseRequestOpenedByTable(db);
} }
} }
...@@ -339,4 +341,22 @@ public class DBManager extends SQLiteOpenHelper implements DBConstants { ...@@ -339,4 +341,22 @@ public class DBManager extends SQLiteOpenHelper implements DBConstants {
+ HR_CASE_VARIABLE_CHOICE_MISC + " real);"); + HR_CASE_VARIABLE_CHOICE_MISC + " real);");
} }
private void createMyHRCaseRequestTable(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_MY_HR_CASE_REQUEST + "("
+ HR_CASE_REQUEST_ID + " integer primary key autoincrement, "
+ HR_CASE_REQUEST_NUMBER + " text, "
+ HR_CASE_REQUEST_SYS_UPDATED_ON + " real, "
+ HR_CASE_REQUEST_APPROVAL + " text, "
+ HR_CASE_REQUEST_OPENED_BY_VALUE + " real, "
+ HR_CASE_REQUEST_SYNC_DIRTY + " integer default " + SYNC_FLAG_NONE + ");");
}
private void createMyHRCaseRequestOpenedByTable(SQLiteDatabase db) {
db.execSQL("create table " + TABLE_MY_HR_CASE_REQUEST_OPENED_BY + "("
+ MY_HR_CASE_REQUEST_OPENED_BY_ID + " integer primary key autoincrement, "
+ MY_HR_CASE_REQUEST_OPENED_BY_DISPLAY_VALUE + " text, "
+ MY_HR_CASE_REQUEST_OPENED_BY_LINK + " real, "
+ MY_HR_CASE_REQUEST_OPENED_BY_SYNC_DIRTY + " integer default " + SYNC_FLAG_NONE + ");");
}
} }
...@@ -14,7 +14,7 @@ import java.util.List; ...@@ -14,7 +14,7 @@ import java.util.List;
/** /**
* *
* @author Kunj on 11-08-2016. * @author Created by Kunj on 13/04/2018.
*/ */
public class HRCaseAttachmentManager implements DBConstants { public class HRCaseAttachmentManager implements DBConstants {
......
...@@ -14,7 +14,7 @@ import java.util.List; ...@@ -14,7 +14,7 @@ import java.util.List;
/** /**
* *
* @author Kunj on 11-08-2016. * @author Created by Kunj on 13/04/2018.
*/ */
public class HRCaseItemInputManager implements DBConstants { public class HRCaseItemInputManager implements DBConstants {
......
...@@ -14,7 +14,7 @@ import java.util.List; ...@@ -14,7 +14,7 @@ import java.util.List;
/** /**
* *
* @author Kunj on 18-11-2016. * @author Created by Kunj on 13/04/2018.
*/ */
public class HRCaseUiPolicyActionManager implements DBConstants { public class HRCaseUiPolicyActionManager implements DBConstants {
......
...@@ -15,7 +15,7 @@ import java.util.List; ...@@ -15,7 +15,7 @@ import java.util.List;
/** /**
* *
* @author Kunj on 18-11-2016. * @author Created by Kunj on 13/04/2018.
*/ */
public class HRCaseUiPolicyItemManager implements DBConstants { public class HRCaseUiPolicyItemManager implements DBConstants {
......
...@@ -13,8 +13,8 @@ import java.util.ArrayList; ...@@ -13,8 +13,8 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
/** /**
* Created by kunj on 21/02/17. * Created by Kunj on 13/04/2018.
*/ **/
public class HRCaseVariableChoiceManager implements DBConstants { public class HRCaseVariableChoiceManager implements DBConstants {
......
...@@ -15,7 +15,7 @@ import java.util.List; ...@@ -15,7 +15,7 @@ import java.util.List;
/** /**
* *
* @author Kunj on 11-08-2016. * @author Created by Kunj on 13/04/2018.
*/ */
public class HRCaseVariableManager implements DBConstants { public class HRCaseVariableManager implements DBConstants {
......
package com.vsoft.servicenow.db.managers;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.vsoft.servicenow.CatalogueApplication;
import com.vsoft.servicenow.db.DBConstants;
import com.vsoft.servicenow.db.models.HRCaseRequest;
import com.vsoft.servicenow.db.models.HRCaseRequestDisplayValue;
import com.vsoft.servicenow.db.models.MyRequest;
import com.vsoft.servicenow.db.models.MyRequestDisplayValue;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
/**
*
* @author Created by Kunj on 13/04/2018.
*/
public class MyHRCaseManager implements DBConstants {
public static long save(HRCaseRequest hrCaseRequest, int syncDirty) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
if (db != null) {
hrCaseRequest.setSyncDirty(syncDirty);
long id = db.insert(TABLE_MY_HR_CASE_REQUEST, null, getContentValues(hrCaseRequest));
hrCaseRequest.setId(id);
return id;
} else {
return -1;
}
}
public static int delete(HRCaseRequest hrCaseRequest) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
if (db != null) {
if (hrCaseRequest.getNumber() == null || hrCaseRequest.getNumber().isEmpty()) {
return db.delete(TABLE_MY_HR_CASE_REQUEST, HR_CASE_REQUEST_ID + "=" + hrCaseRequest.getId(), null);
} else {
return update(hrCaseRequest, SYNC_FLAG_DELETE);
}
}
return -1;
}
public static int update(HRCaseRequest hrCaseRequest, int syncDirty) {
return update(hrCaseRequest, null, syncDirty);
}
public static int update(HRCaseRequest hrCaseRequest, List<String> column, int syncDirty) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
if (db != null) {
hrCaseRequest.setSyncDirty(syncDirty);
if (column == null || column.size() == 0) {
return db.update(TABLE_MY_HR_CASE_REQUEST, getContentValues(hrCaseRequest), HR_CASE_REQUEST_ID + "=" + hrCaseRequest.getId(), null);
} else {
ContentValues contentValues = new ContentValues(column.size());
contentValues.put(HR_CASE_REQUEST_SYNC_DIRTY, hrCaseRequest.getSyncDirty());
for (int i = 0; i < column.size(); i++) {
String columnName = column.get(i);
if (HR_CASE_REQUEST_NUMBER.equals(columnName)) {
contentValues.put(HR_CASE_REQUEST_NUMBER, hrCaseRequest.getNumber());
} else if (HR_CASE_REQUEST_SYS_UPDATED_ON.equals(columnName)) {
contentValues.put(HR_CASE_REQUEST_SYS_UPDATED_ON, hrCaseRequest.getUpdateOn());
} else if (HR_CASE_REQUEST_APPROVAL.equals(columnName)) {
contentValues.put(HR_CASE_REQUEST_APPROVAL, hrCaseRequest.getApproval());
} else if (HR_CASE_REQUEST_OPENED_BY_VALUE.equals(columnName)) {
contentValues.put(HR_CASE_REQUEST_OPENED_BY_VALUE, hrCaseRequest.getOpenedBy().getDisplayValue());
}
}
return db.update(TABLE_MY_HR_CASE_REQUEST, contentValues, HR_CASE_REQUEST_ID + "=" + hrCaseRequest.getId(), null);
}
} else {
return -1;
}
}
public static void handleGetRequest(List<HRCaseRequest> serverHrCaseRequestList) {
if(serverHrCaseRequestList != null && !serverHrCaseRequestList.isEmpty()) {
/*requestSysIdMap contain all server response request Sys Id*/
HashMap<String, Integer> requestSysIdMap = new HashMap<>(0);
Integer intObj = Integer.valueOf(1);
for (int i = 0; i < serverHrCaseRequestList.size(); i++) {
String sysId = serverHrCaseRequestList.get(i).getNumber();
requestSysIdMap.put(sysId, intObj);
}
/*localHrCaseRequestList is contain all local Incidents */
List<HRCaseRequest> localHrCaseRequestList = getAllRequests();
if (localHrCaseRequestList != null && !localHrCaseRequestList.isEmpty()) {
for (int i = 0; i < localHrCaseRequestList.size(); i++) {
HRCaseRequest localHrCaseRequest = localHrCaseRequestList.get(i);
String localRequestNumber = localHrCaseRequest.getNumber();
if (localRequestNumber != null
&& !localRequestNumber.isEmpty()
&& !requestSysIdMap.containsKey(localRequestNumber)) {
//Update sys_id with empty string because required to delete locally
localHrCaseRequest.setNumber("");
MyHRCaseRequestOpenedByDisplayValueManager.delete(localHrCaseRequest.getOpenedBy());
delete(localHrCaseRequest);
}
}
}
/*Check this HRCaseRequest is exist in local DB or not
* If doesn't exist in local, save it
* If exist in local, update the local item with data from server item.
* */
for (int i = 0; i < serverHrCaseRequestList.size(); i++) {
HRCaseRequest hrCaseRequest = serverHrCaseRequestList.get(i);
HRCaseRequest localRequest = getRequestFromNumber(hrCaseRequest.getNumber());
if (localRequest == null) {
MyHRCaseRequestOpenedByDisplayValueManager
.save(hrCaseRequest.getOpenedBy(), DBConstants.SYNC_FLAG_NONE);
save(hrCaseRequest, DBConstants.SYNC_FLAG_NONE);
} else {
/*Update complete local MyRequest object with response MyRequest object*/
hrCaseRequest.setId(localRequest.getId());
hrCaseRequest.setOpenedBy(localRequest.getOpenedBy());
update(hrCaseRequest, DBConstants.SYNC_FLAG_NONE);
}
}
} else {
/*That means there is no HR_CASE_REQUEST in server response, then all local items should be deleted those are contain sys_id*/
/*localRequestList is contain all local MyRequest */
List<HRCaseRequest> localRequestList = getAllRequests();
if (localRequestList != null && !localRequestList.isEmpty()) {
for (int i = 0; i < localRequestList.size(); i++) {
HRCaseRequest localMyRequest = localRequestList.get(i);
String localIncidentNumber = localMyRequest.getNumber();
if (localIncidentNumber != null
&& !localIncidentNumber.isEmpty()) {
//Update number with empty string because required to delete locally
localMyRequest.setNumber("");
MyHRCaseRequestOpenedByDisplayValueManager.delete(localMyRequest.getOpenedBy());
delete(localMyRequest);
}
}
}
}
}
public static List<HRCaseRequest> getAllRequests() {
SQLiteDatabase db = CatalogueApplication.getDatabase();
if (db != null) {
Cursor c = db.rawQuery("select * from " + TABLE_MY_HR_CASE_REQUEST
+ " where " + INCIDENT_SYNC_DIRTY
+ "!=" + DBConstants.SYNC_FLAG_DELETE, null);
ArrayList<HRCaseRequest> requestList;
if (c.getCount() > 0) {
requestList = new ArrayList<>(c.getCount());
while (c.moveToNext()) {
HRCaseRequest.HRCaseRequestBuilder builder = HRCaseRequest.HRCaseRequestBuilder.aMyRequest();
fillAllRequestDetails(c, builder);
requestList.add(builder.build());
}
} else {
requestList = new ArrayList<>(0);
}
c.close();
return requestList;
} else {
return new ArrayList<>(0);
}
}
public static HRCaseRequest get(long requestId) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
HRCaseRequest myRequest = null;
if (db != null) {
Cursor c = db.rawQuery("select * from " + TABLE_MY_HR_CASE_REQUEST + " where " + HR_CASE_REQUEST_ID + "=" + requestId, null);
if (c.moveToFirst()) {
HRCaseRequest.HRCaseRequestBuilder builder = HRCaseRequest.HRCaseRequestBuilder.aMyRequest();
fillAllRequestDetails(c, builder);
myRequest = builder.build();
}
c.close();
}
return myRequest;
}
public static HRCaseRequest getRequestFromNumber(String number) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
HRCaseRequest myRequest = null;
if(db!=null) {
Cursor c = db.rawQuery("select * from " + TABLE_MY_HR_CASE_REQUEST + " where " + INCIDENT_NUMBER + "='" + number + "'", null);
if (c.moveToFirst()) {
HRCaseRequest.HRCaseRequestBuilder builder = HRCaseRequest.HRCaseRequestBuilder.aMyRequest();
fillAllRequestDetails(c, builder);
myRequest = builder.build();
}
c.close();
}
return myRequest;
}
private static void fillAllRequestDetails(Cursor c, HRCaseRequest.HRCaseRequestBuilder builder) {
builder.setId(c.getLong(INDEX_HR_CASE_REQUEST_ID));
builder.setNumber(c.getString(INDEX_HR_CASE_REQUEST_NUMBER));
long rowId = c.getLong(INDEX_HR_CASE_REQUEST_OPENED_BY_VALUE);
HRCaseRequestDisplayValue myRequestDisplayValue;
if(rowId == -1) {
myRequestDisplayValue = new HRCaseRequestDisplayValue();
} else {
myRequestDisplayValue =
MyHRCaseRequestOpenedByDisplayValueManager.get(rowId);
}
builder.setOpenedBy(myRequestDisplayValue);
builder.setUpdateOn(c.getLong(INDEX_HR_CASE_REQUEST_SYS_UPDATED_ON));
builder.setApproval(c.getString(INDEX_HR_CASE_REQUEST_APPROVAL));
builder.setSyncDirty(c.getInt(INDEX_HR_CASE_REQUEST_SYNC_DIRTY));
}
private static ContentValues getContentValues(HRCaseRequest hrCaseRequest) {
ContentValues cv = new ContentValues(HR_CASE_REQUEST_COLUMN_COUNT - 1);
cv.put(HR_CASE_REQUEST_NUMBER, hrCaseRequest.getNumber());
cv.put(HR_CASE_REQUEST_SYS_UPDATED_ON, hrCaseRequest.getUpdateOn());
cv.put(HR_CASE_REQUEST_APPROVAL, hrCaseRequest.getApproval());
cv.put(HR_CASE_REQUEST_OPENED_BY_VALUE, hrCaseRequest.getOpenedBy().getId());
cv.put(HR_CASE_REQUEST_SYNC_DIRTY, hrCaseRequest.getSyncDirty());
return cv;
}
}
\ No newline at end of file
package com.vsoft.servicenow.db.managers;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import com.vsoft.servicenow.CatalogueApplication;
import com.vsoft.servicenow.db.DBConstants;
import com.vsoft.servicenow.db.models.HRCaseRequestDisplayValue;
import com.vsoft.servicenow.db.models.MyRequestDisplayValue;
import java.util.List;
/**
*
* @author Created by Kunj on 13/04/2018.
*/
public class MyHRCaseRequestOpenedByDisplayValueManager implements DBConstants {
public static long save(HRCaseRequestDisplayValue hrCaseRequestDisplayValue, int syncDirty) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
if (db != null) {
hrCaseRequestDisplayValue.setSyncDirty(syncDirty);
long id = db.insert(TABLE_MY_HR_CASE_REQUEST_OPENED_BY, null, getContentValues(hrCaseRequestDisplayValue));
hrCaseRequestDisplayValue.setId(id);
return id;
} else {
return -1;
}
}
public static int delete(HRCaseRequestDisplayValue hrCaseRequestDisplayValue) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
if (db != null) {
return db.delete(TABLE_MY_HR_CASE_REQUEST_OPENED_BY, MY_HR_CASE_REQUEST_OPENED_BY_ID + "=" + hrCaseRequestDisplayValue.getId(), null);
}
return -1;
}
public static int update(HRCaseRequestDisplayValue hrCaseRequestDisplayValue, int syncDirty) {
return update(hrCaseRequestDisplayValue, null, syncDirty);
}
public static int update(HRCaseRequestDisplayValue hrCaseRequestDisplayValue, List<String> column, int syncDirty) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
if (db != null) {
hrCaseRequestDisplayValue.setSyncDirty(syncDirty);
if (column == null || column.size() == 0) {
return db.update(TABLE_MY_HR_CASE_REQUEST_OPENED_BY, getContentValues(hrCaseRequestDisplayValue), MY_HR_CASE_REQUEST_OPENED_BY_ID + "=" +
hrCaseRequestDisplayValue.getId(), null);
} else {
ContentValues contentValues = new ContentValues(column.size());
contentValues.put(MY_HR_CASE_REQUEST_OPENED_BY_SYNC_DIRTY, hrCaseRequestDisplayValue.getSyncDirty());
for (int i = 0; i < column.size(); i++) {
String columnName = column.get(i);
if (MY_HR_CASE_REQUEST_OPENED_BY_LINK.equals(columnName)) {
contentValues.put(MY_HR_CASE_REQUEST_OPENED_BY_LINK, hrCaseRequestDisplayValue.getLink());
} else if (MY_HR_CASE_REQUEST_OPENED_BY_DISPLAY_VALUE.equals(columnName)) {
contentValues.put(MY_HR_CASE_REQUEST_OPENED_BY_DISPLAY_VALUE, hrCaseRequestDisplayValue.getDisplayValue());
}
}
return db.update(TABLE_MY_HR_CASE_REQUEST_OPENED_BY, contentValues, MY_HR_CASE_REQUEST_OPENED_BY_ID + "=" + hrCaseRequestDisplayValue.getId(),
null);
}
} else {
return -1;
}
}
public static void handleGetRequestItem(HRCaseRequestDisplayValue hrCaseRequestDisplayValue, long requestId) {
HRCaseRequestDisplayValue localMyRequestDisplayValue = get(requestId);
if (localMyRequestDisplayValue != null) {
delete(localMyRequestDisplayValue);
} else {
save(hrCaseRequestDisplayValue, SYNC_FLAG_NONE);
}
}
public static HRCaseRequestDisplayValue get(long uiPolicyActionId) {
SQLiteDatabase db = CatalogueApplication.getDatabase();
HRCaseRequestDisplayValue myRequestDisplayValue = null;
if (db != null) {
Cursor c = db.rawQuery("select * from " + TABLE_MY_HR_CASE_REQUEST_OPENED_BY + " where " + MY_HR_CASE_REQUEST_OPENED_BY_ID + "=" + uiPolicyActionId, null);
if (c.moveToFirst()) {
HRCaseRequestDisplayValue.HRCaseDisplayValueBuilder builder = HRCaseRequestDisplayValue.HRCaseDisplayValueBuilder.aMyRequest();
fillAllRequestItemDetails(c, builder);
myRequestDisplayValue = builder.build();
}
c.close();
}
return myRequestDisplayValue;
}
private static void fillAllRequestItemDetails(Cursor c, HRCaseRequestDisplayValue.HRCaseDisplayValueBuilder builder) {
builder.setId(c.getLong(INDEX_MY_HR_CASE_REQUEST_OPENED_BY_ID));
builder.setDisplayValue(c.getString(INDEX_MY_HR_CASE_REQUEST_OPENED_BY_DISPLAY_VALUE));
builder.setLink(c.getString(INDEX_MY_HR_CASE_REQUEST_OPENED_BY_LINK));
builder.setSyncDirty(c.getInt(INDEX_MY_HR_CASE_REQUEST_OPENED_BY_SYNC_DIRTY));
}
private static ContentValues getContentValues(HRCaseRequestDisplayValue myRequestDisplayValue) {
ContentValues cv = new ContentValues(MY_HR_CASE_REQUEST_OPENED_BY_COLUMN_COUNT - 1);
cv.put(MY_HR_CASE_REQUEST_OPENED_BY_DISPLAY_VALUE, myRequestDisplayValue.getDisplayValue());
cv.put(MY_HR_CASE_REQUEST_OPENED_BY_LINK, myRequestDisplayValue.getLink());
cv.put(MY_HR_CASE_REQUEST_OPENED_BY_SYNC_DIRTY, myRequestDisplayValue.getSyncDirty());
return cv;
}
}
\ No newline at end of file
package com.vsoft.servicenow.db.models; package com.vsoft.servicenow.db.models;
/** /**
* Created by Kunj on 11/8/16. * Created by Kunj on 13/04/2018.
*/ **/
public class HRCaseAttachment { public class HRCaseAttachment {
private long id = -1; private long id = -1;
......
package com.vsoft.servicenow.db.models; package com.vsoft.servicenow.db.models;
/** /**
* Created by Kunj on 11/8/16. * Created by Kunj on 13/04/2018.
*/ **/
public class HRCaseItemInput { public class HRCaseItemInput {
private long id = -1; private long id = -1;
......
package com.vsoft.servicenow.db.models;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import com.vsoft.servicenow.utils.Util;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Created by Kunj on 13/04/2018.
*/
public class HRCaseRequest {
private long id = -1;
@SerializedName("number")
@Expose
private String number;
@SerializedName("sys_updated_on")
// @Expose
private long updateOn;
@SerializedName("approval")
@Expose
String approval;
@SerializedName("opened_by")
@Expose
HRCaseRequestDisplayValue openedBy;
private int syncDirty;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public long getUpdateOn() {
return updateOn;
}
public void setUpdateOn(long updateOn) {
this.updateOn = updateOn;
}
public String getApproval() {
return approval;
}
public void setApproval(String approval) {
this.approval = approval;
}
public HRCaseRequestDisplayValue getOpenedBy() {
return openedBy;
}
public void setOpenedBy(HRCaseRequestDisplayValue openedBy) {
this.openedBy = openedBy;
}
public int getSyncDirty() {
return syncDirty;
}
public void setSyncDirty(int syncDirty) {
this.syncDirty = syncDirty;
}
public void parseJson(JSONObject jsonObject) {
String dueDate = null;
try {
dueDate = jsonObject.getString(Json.DUE_DATE);
} catch (JSONException e) {
e.printStackTrace();
}
this.setUpdateOn(Util.getDateTimeForMyIncidentFromString(dueDate));
}
public static final class HRCaseRequestBuilder {
private long id = -1;
private String number;
private long updateOn;
private String approval;
private HRCaseRequestDisplayValue requestOpenedBy;
private int syncDirty;
private HRCaseRequestBuilder() {
}
public static HRCaseRequestBuilder aMyRequest() {
return new HRCaseRequestBuilder();
}
public HRCaseRequestBuilder setId(long id) {
this.id = id;
return this;
}
public HRCaseRequestBuilder setNumber(String number) {
this.number = number;
return this;
}
public HRCaseRequestBuilder setUpdateOn(long updateOn) {
this.updateOn = updateOn;
return this;
}
public HRCaseRequestBuilder setApproval(String approval) {
this.approval = approval;
return this;
}
public HRCaseRequestBuilder setOpenedBy(HRCaseRequestDisplayValue requestOpenedBy) {
this.requestOpenedBy = requestOpenedBy;
return this;
}
public HRCaseRequestBuilder setSyncDirty(int syncDirty) {
this.syncDirty = syncDirty;
return this;
}
public HRCaseRequestBuilder but() {
return aMyRequest().setId(id).setNumber(number).setUpdateOn(updateOn)
.setApproval(approval)
.setOpenedBy(requestOpenedBy).setSyncDirty(syncDirty);
}
public HRCaseRequest build() {
HRCaseRequest myRequest = new HRCaseRequest();
myRequest.setId(id);
myRequest.setNumber(number);
myRequest.setUpdateOn(updateOn);
myRequest.setApproval(approval);
myRequest.setOpenedBy(requestOpenedBy);
myRequest.setSyncDirty(syncDirty);
return myRequest;
}
}
public static class Json {
public static final String URL_PARAM_CATALOGUE_SYSPRM_QUERY_VALUE = "request.requested_for=javascript:gs.getUserID()";
public static final String DUE_DATE = "sys_updated_on";
}
}
package com.vsoft.servicenow.db.models;
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
/**
* Created by Kunj on 13/04/2018.
*/
public class HRCaseRequestDisplayValue {
private long id = -1;
@SerializedName("display_value")
@Expose
private String displayValue;
@SerializedName("link")
@Expose
private String link;
private int syncDirty;
public int getSyncDirty() {
return syncDirty;
}
public void setSyncDirty(int syncDirty) {
this.syncDirty = syncDirty;
}
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getDisplayValue() {
return displayValue;
}
public void setDisplayValue(String displayValue) {
this.displayValue = displayValue;
}
public String getLink() {
return link;
}
public void setLink(String link) {
this.link = link;
}
public static final class HRCaseDisplayValueBuilder {
private long id = -1;
private String link;
private String displayValue;
private int syncDirty;
private HRCaseDisplayValueBuilder() {
}
public static HRCaseDisplayValueBuilder aMyRequest() {
return new HRCaseDisplayValueBuilder();
}
public HRCaseDisplayValueBuilder setId(long id) {
this.id = id;
return this;
}
public HRCaseDisplayValueBuilder setDisplayValue(String displayValue) {
this.displayValue = displayValue;
return this;
}
public HRCaseDisplayValueBuilder setLink(String link) {
this.link = link;
return this;
}
public HRCaseDisplayValueBuilder setSyncDirty(int syncDirty) {
this.syncDirty = syncDirty;
return this;
}
public HRCaseDisplayValueBuilder but() {
return aMyRequest().setId(id).setDisplayValue(displayValue)
.setLink(link).setSyncDirty(syncDirty);
}
public HRCaseRequestDisplayValue build() {
HRCaseRequestDisplayValue myRequestDisplayValue = new HRCaseRequestDisplayValue();
myRequestDisplayValue.setId(id);
myRequestDisplayValue.setLink(link);
myRequestDisplayValue.setDisplayValue(displayValue);
myRequestDisplayValue.setSyncDirty(syncDirty);
return myRequestDisplayValue;
}
}
}
...@@ -4,6 +4,9 @@ package com.vsoft.servicenow.db.models; ...@@ -4,6 +4,9 @@ package com.vsoft.servicenow.db.models;
import com.google.gson.annotations.Expose; import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
/**
* Created by Kunj on 13/04/2018.
* */
public class HRCaseUiPolicyAction { public class HRCaseUiPolicyAction {
private long id = -1; private long id = -1;
......
...@@ -7,9 +7,8 @@ import com.vsoft.servicenow.utils.PartialCondition; ...@@ -7,9 +7,8 @@ import com.vsoft.servicenow.utils.PartialCondition;
import java.util.List; import java.util.List;
/** /**
* Created by chaukadev on 6/10/16. * Created by Kunj on 13/04/2018.
*/ * */
public class HRCaseUiPolicyItem { public class HRCaseUiPolicyItem {
private long id = -1; private long id = -1;
......
...@@ -14,8 +14,8 @@ import java.util.List; ...@@ -14,8 +14,8 @@ import java.util.List;
/** /**
* Created by Kunj on 12/8/16. * Created by Kunj on 13/04/2018.
*/ * */
public class HRCaseVariable { public class HRCaseVariable {
private long id = -1; private long id = -1;
......
...@@ -4,6 +4,9 @@ package com.vsoft.servicenow.db.models; ...@@ -4,6 +4,9 @@ package com.vsoft.servicenow.db.models;
import com.google.gson.annotations.Expose; import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
/**
* Created by Kunj on 13/04/2018.
* */
public class HRCaseVariableChoice { public class HRCaseVariableChoice {
private long id; private long id;
......
...@@ -6,9 +6,8 @@ import com.google.gson.annotations.SerializedName; ...@@ -6,9 +6,8 @@ import com.google.gson.annotations.SerializedName;
import java.util.List; import java.util.List;
/** /**
* Created by kunj on 16/02/17. * Created by Kunj on 13/04/2018.
*/ * */
public class HRCaseVariableResponse { public class HRCaseVariableResponse {
@SerializedName("variables") @SerializedName("variables")
@Expose @Expose
......
...@@ -8,8 +8,8 @@ import java.util.List; ...@@ -8,8 +8,8 @@ import java.util.List;
/** /**
* Created by Kunj on 12/8/16. * Created by Kunj on 13/04/2018.
*/ * */
public class HRCaseVariableSet { public class HRCaseVariableSet {
@SerializedName("order") @SerializedName("order")
......
...@@ -3,8 +3,7 @@ package com.vsoft.servicenow.menu; ...@@ -3,8 +3,7 @@ package com.vsoft.servicenow.menu;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import com.vsoft.servicenow.ui.ReportIncidentScreen; import com.vsoft.servicenow.ui.MyHRCaseActivity;
import com.vsoft.servicenow.ui.ViewHRCaseScreen;
/** /**
* Created by Kunj on 23/03/18. * Created by Kunj on 23/03/18.
...@@ -46,7 +45,7 @@ public class ViewHRCaseMenuItemData extends HomeScreenMenuItemData implements Pa ...@@ -46,7 +45,7 @@ public class ViewHRCaseMenuItemData extends HomeScreenMenuItemData implements Pa
public Builder() { public Builder() {
item = new ViewHRCaseMenuItemData(); item = new ViewHRCaseMenuItemData();
setActivity(ViewHRCaseScreen.class); setActivity(MyHRCaseActivity.class);
} }
} }
} }
...@@ -106,8 +106,8 @@ import butterknife.ButterKnife; ...@@ -106,8 +106,8 @@ import butterknife.ButterKnife;
import butterknife.OnClick; import butterknife.OnClick;
/** /**
* Created by Kunj on 11/8/16. * Created by Kunj on 13/04/2018.
*/ * */
public class HRCaseVariableScreen extends HandleNotificationActivity { public class HRCaseVariableScreen extends HandleNotificationActivity {
@BindView(R.id.tool_bar_view) Toolbar mToolbar; @BindView(R.id.tool_bar_view) Toolbar mToolbar;
......
package com.vsoft.servicenow.ui;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AlertDialog;
import android.support.v7.widget.Toolbar;
import android.text.Html;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.ProgressBar;
import com.google.android.gms.analytics.Tracker;
import com.vsoft.servicenow.CatalogueApplication;
import com.vsoft.servicenow.R;
import com.vsoft.servicenow.adapters.MyHRCaseAdapter;
import com.vsoft.servicenow.adapters.MyRequestAdapter;
import com.vsoft.servicenow.api.listeners.get.GetMyHRCaseApiListener;
import com.vsoft.servicenow.api.listeners.get.GetMyRequestApiListener;
import com.vsoft.servicenow.api.managers.MyHRCaseApiManager;
import com.vsoft.servicenow.db.managers.MyHRCaseManager;
import com.vsoft.servicenow.db.models.HRCaseRequest;
import com.vsoft.servicenow.enums.SyncStatus;
import com.vsoft.servicenow.utils.DialogUtils;
import com.vsoft.servicenow.utils.Util;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import butterknife.OnItemClick;
/**
* Created by Kunj on 13/04/2018.
* */
public class MyHRCaseActivity extends HandleNotificationActivity {
@BindView(R.id.tool_bar_view) Toolbar mToolbar;
@BindView(R.id.my_hr_case_screen_list_view) ListView mListView;
@BindView(R.id.toolbar_refresh_icon)
ImageView mRefreshIcon;
@BindView(R.id.toolbar_progress_icon)
ProgressBar mProgressBar;
private List<HRCaseRequest> mHrCaseRequestList;
private MyHRCaseAdapter mAdapter;
private boolean isProgressRequire;
private CatalogueApplication mApplication;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.my_hr_case_list_screen);
ButterKnife.bind(this);
mApplication = (CatalogueApplication) getApplication();
setSupportActionBar(mToolbar);
ActionBar actionBar = getSupportActionBar();
if(actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setElevation(0);
actionBar.setTitle(R.string.my_hr_case_text_string);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(true);
}
Tracker tracker = mApplication.getDefaultTracker();
// Send initial screen view hit.
Util.sendScreenName(tracker, actionBar.getTitle().toString());
mAdapter = new MyHRCaseAdapter(MyHRCaseActivity.this);
mListView.setAdapter(mAdapter);
mHrCaseRequestList = MyHRCaseManager.getAllRequests();
if(!mHrCaseRequestList.isEmpty()) {
setData(mHrCaseRequestList);
}
if(mApplication.isNetConnected()) {
isProgressRequire = mHrCaseRequestList.isEmpty();
new FetchMyRequestData().execute();
} else {
if(mHrCaseRequestList.isEmpty()) {
DialogUtils.showNoConnectionDialogWithCloseActivity(MyHRCaseActivity.this);
} else {
setData(mHrCaseRequestList);
}
}
}
class FetchMyRequestData extends AsyncTask<String, Void, SyncStatus> {
private ProgressDialog progressDialog;
private SyncStatus syncStatus = SyncStatus.FAIL;
@Override
protected void onPreExecute() {
super.onPreExecute();
if(isProgressRequire) {
progressDialog = new ProgressDialog(MyHRCaseActivity.this);
progressDialog.setMessage(getString(R.string.loading_string));
progressDialog.show();
progressDialog.setCancelable(false);
} else {
mRefreshIcon.setVisibility(View.GONE);
mProgressBar.setVisibility(View.VISIBLE);
}
}
@Override
protected SyncStatus doInBackground(String... params) {
MyHRCaseApiManager.getMyHRCase(MyHRCaseActivity.this, new GetMyHRCaseApiListener() {
@Override
public void onDoneApiCall(List<HRCaseRequest> requestList) {
MyHRCaseManager.handleGetRequest(requestList);
syncStatus = SyncStatus.SUCCESS;
mHrCaseRequestList = requestList;
}
@Override
public void onFailApiCall() {
syncStatus = SyncStatus.FAIL;
}
});
return syncStatus;
}
@Override
protected void onPostExecute(SyncStatus syncStatus) {
super.onPostExecute(syncStatus);
if(progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
} else {
mRefreshIcon.setVisibility(View.VISIBLE);
mProgressBar.setVisibility(View.GONE);
}
if(syncStatus == SyncStatus.SUCCESS) {
mHrCaseRequestList = MyHRCaseManager.getAllRequests();
isProgressRequire = mHrCaseRequestList.isEmpty();
setData(mHrCaseRequestList);
} else {
showErrorDialog(R.string.failed_to_fetch_my_request_string);
}
}
}
@OnItemClick(R.id.my_hr_case_screen_list_view)
void listViewOnClicked(int position) {
HRCaseRequest hrCaseRequest = mHrCaseRequestList.get(position);
String messageString = String.format(getResources().getString(R.string.my_hr_case_item_text_string),
hrCaseRequest.getNumber(),
Util.getDateTimeFromLong(hrCaseRequest.getUpdateOn()),
hrCaseRequest.getOpenedBy().getDisplayValue());
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(Html.fromHtml(messageString))
.setCancelable(false)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
@OnClick(R.id.toolbar_refresh_icon)
void onRefreshClicked() {
if(mApplication.isNetConnected()) {
new FetchMyRequestData().execute();
} else {
DialogUtils.showNoConnectionDialogWithCloseActivity(MyHRCaseActivity.this);
}
}
private void setData(final List<HRCaseRequest> reqList) {
Collections.sort(reqList, new StringDateComparator());
if(mAdapter == null) {
mAdapter = new MyHRCaseAdapter(MyHRCaseActivity.this);
mListView.setAdapter(mAdapter);
}
mAdapter.setRequestList(reqList);
}
class StringDateComparator implements Comparator<HRCaseRequest> {
public int compare(HRCaseRequest lhs, HRCaseRequest rhs) {
return lhs.getUpdateOn()>rhs.getUpdateOn() ? -1 : 1;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
if (menuItem.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(menuItem);
}
private void showErrorDialog(int message) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(message)
.setCancelable(false)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
finish();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}
package com.vsoft.servicenow.ui;
import android.support.v7.app.AppCompatActivity;
/**
* Created by chaukadev on 4/9/18.
*/
public class ViewHRCaseScreen extends AppCompatActivity {
}
...@@ -62,6 +62,7 @@ public class Constants { ...@@ -62,6 +62,7 @@ public class Constants {
public static final String URL_PARAM_TABLE_NAME = "table_name"; public static final String URL_PARAM_TABLE_NAME = "table_name";
public static final String URL_PARAM_FILE_NAME = "file_name"; public static final String URL_PARAM_FILE_NAME = "file_name";
public static final String URL_PARAM_SYS_ID = "sys_id"; public static final String URL_PARAM_SYS_ID = "sys_id";
public static final String URL_PARAM_OPENED_BY = "opened_by";
/** /**
* Request Code * Request Code
...@@ -148,6 +149,7 @@ public class Constants { ...@@ -148,6 +149,7 @@ public class Constants {
public static final String URL_POST_LOGIN_ITEM = "/oauth_token.do"; public static final String URL_POST_LOGIN_ITEM = "/oauth_token.do";
public static final String URL_REFRESH_LOGIN = URL_POST_LOGIN_ITEM; public static final String URL_REFRESH_LOGIN = URL_POST_LOGIN_ITEM;
public static final String URL_PUT_DEVICE_REGISTERATION = "api/now/table/sys_user/{user_sys_id}"; public static final String URL_PUT_DEVICE_REGISTERATION = "api/now/table/sys_user/{user_sys_id}";
public static final String URL_GET_USERDETAILS = API_PATH + "sys_user";
/*Catalogue Category API */ /*Catalogue Category API */
public static final String URL_GET_CATALOGUE = DOMAIN + AppConfig.URL_GET_CATALOGUE; public static final String URL_GET_CATALOGUE = DOMAIN + AppConfig.URL_GET_CATALOGUE;
...@@ -165,7 +167,6 @@ public class Constants { ...@@ -165,7 +167,6 @@ public class Constants {
/*Request API*/ /*Request API*/
public static final String URL_GET_MYREQUEST = API_PATH + "sc_req_item"; public static final String URL_GET_MYREQUEST = API_PATH + "sc_req_item";
public static final String URL_GET_USERDETAILS = API_PATH + "sys_user";
/*Incident API */ /*Incident API */
public static final String URL_GET_INCIDENTS = API_PATH + "incident"; public static final String URL_GET_INCIDENTS = API_PATH + "incident";
...@@ -188,6 +189,10 @@ public class Constants { ...@@ -188,6 +189,10 @@ public class Constants {
public static final String URL_GET_HR_CASE_REFERENCE = API_PATH; public static final String URL_GET_HR_CASE_REFERENCE = API_PATH;
public static final String URL_POST_HR_CASE_ATTACHMENT = DOMAIN + "api/now/v1/attachment/file"; public static final String URL_POST_HR_CASE_ATTACHMENT = DOMAIN + "api/now/v1/attachment/file";
/*Get All My HRCase*/
public static final String URL_GET_MY_HR_CASE = API_PATH + "hr_case";
// https://vsoftconsultingdev.service-now.com/api/now/table/hr_case?opened_by=debf86ee4f1852005ee63d728110c7c7
/** /**
* Chat Server URL * Chat Server URL
* */ * */
......
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#ffffff"
android:orientation="vertical"
android:padding="@dimen/normal_margin">
<TextView
android:id="@+id/number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="@dimen/my_request_left"
android:layout_marginTop="@dimen/my_request_top"
android:text="Large Text"
android:textSize="@dimen/ruquest_descps_text_size"
android:textStyle="bold" />
<ImageView
android:id="@+id/approval_image"
android:layout_width="@dimen/my_request_top"
android:layout_height="@dimen/my_request_top"
android:layout_alignLeft="@+id/number"
android:layout_alignStart="@+id/number"
android:layout_alignTop="@+id/approval"
android:layout_marginBottom="@dimen/my_request_top"
android:layout_marginTop="@dimen/my_request_text_bottom"
android:background="@drawable/circle" />
<TextView
android:id="@+id/approval"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/number"
android:layout_marginLeft="@dimen/my_request_right"
android:layout_marginTop="@dimen/my_request_new_top"
android:layout_toRightOf="@+id/approval_image"
android:text="Large Text"
android:textColor="#8e8e8e"
android:textSize="@dimen/ruquest_status_text_size" />
</RelativeLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/screen_bg_color"
android:orientation="vertical">
<include layout="@layout/toolbar_with_refresh_option" />
<ListView
android:id="@+id/my_hr_case_screen_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="@dimen/normal_margin"
android:background="@android:color/white"
android:divider="#8e8e8e"
android:dividerHeight="0.5dp"
android:padding="@dimen/normal_margin"
android:scrollbars="none" />
</LinearLayout>
\ No newline at end of file
...@@ -172,4 +172,8 @@ ...@@ -172,4 +172,8 @@
<!--HRCase Item Screen--> <!--HRCase Item Screen-->
<string name="no_hr_case_item_string">No HR Case Items&#8230;</string> <string name="no_hr_case_item_string">No HR Case Items&#8230;</string>
<!--MY All HRCase Screen-->
<string name="my_hr_case_text_string">View HR Case</string>
<string name="my_hr_case_item_text_string"><![CDATA[<b>Number: </b>%1$s<br><br><b>Updated: </b>%2$s<br><br><b>Opened by: </b>%3$s]]></string>
</resources> </resources>
...@@ -30,6 +30,11 @@ ...@@ -30,6 +30,11 @@
<activity <activity
android:name="com.vsoft.servicenow.ui.HRCaseVariableScreen" android:name="com.vsoft.servicenow.ui.HRCaseVariableScreen"
android:screenOrientation="portrait"
android:windowSoftInputMode="stateHidden|adjustResize" />
<activity
android:name="com.vsoft.servicenow.ui.MyHRCaseActivity"
android:screenOrientation="portrait"/> android:screenOrientation="portrait"/>
<service android:name=".service.NotificationInstanceIdService" <service android:name=".service.NotificationInstanceIdService"
......
...@@ -50,7 +50,7 @@ public class AppConfig { ...@@ -50,7 +50,7 @@ public class AppConfig {
public static final String URL_GET_HR_CASE_VARIABLE = "api/vsng2/uofl_mobile/catalogue_variable_screen"; public static final String URL_GET_HR_CASE_VARIABLE = "api/vsng2/uofl_mobile/catalogue_variable_screen";
public static final String URL_GET_HR_CASE_UI_POLICY = "/api/vsng2/uofl_mobile/uipolicy"; public static final String URL_GET_HR_CASE_UI_POLICY = "/api/vsng2/uofl_mobile/uipolicy";
public static final String URL_GET_HR_CASE_VARIABLE_CHOICE = "/api/vsng2/uofl_mobile/question_choice"; public static final String URL_GET_HR_CASE_VARIABLE_CHOICE = "/api/vsng2/uofl_mobile/question_choice";
public static final String URL_POST_HR_CASE_CATALOGUE_ITEM = "api/vsng2/uofl_mobile"; public static final String URL_POST_HR_CASE_CATALOGUE_ITEM = "api/vsng2/uofl_mobile/createCase";
/** /**
* Socket Chat server URLs - Urls given by Ravi * Socket Chat server URLs - Urls given by Ravi
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment