package com.gochronicle.chronicle.controllers;
import java.lang.reflect.Method;
import java.lang.reflect.TypeVariable;
import java.net.URI;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Random;
import org.json.JSONObject;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Handler;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
import com.gochronicle.chronicle.DataParameterArray;
import com.gochronicle.chronicle.DataService_Proxy;
import com.gochronicle.chronicle.JournalMobileService_Proxy;
import com.gochronicle.chronicle.JournalService_Proxy;
import com.gochronicle.chronicle.LoginService_Proxy;
import com.gochronicle.chronicle.UserInfo;
import com.gochronicle.chronicle.UserTypeEnum;
import com.gochronicle.chronicle.VariantArray;
import com.gochronicle.chronicle.activities.ChronicleApplication;
import com.gochronicle.chronicle.dao.Activity;
import com.gochronicle.chronicle.dao.ActivityDao;
import com.gochronicle.chronicle.dao.Address;
import com.gochronicle.chronicle.dao.CTIJournalData;
import com.gochronicle.chronicle.dao.CTILaborEntry;
import com.gochronicle.chronicle.dao.City;
import com.gochronicle.chronicle.dao.CityDao;
import com.gochronicle.chronicle.dao.Customer;
import com.gochronicle.chronicle.dao.CustomerDao;
import com.gochronicle.chronicle.dao.CustomerJobDao;
import com.gochronicle.chronicle.dao.DaoMaster;
import com.gochronicle.chronicle.dao.DaoSession;
import com.gochronicle.chronicle.dao.Department;
import com.gochronicle.chronicle.dao.DeptJobActivity;
import com.gochronicle.chronicle.dao.Employee;
import com.gochronicle.chronicle.dao.EmployeeDao;
import com.gochronicle.chronicle.dao.Job;
import com.gochronicle.chronicle.dao.JobDao;
import com.gochronicle.chronicle.dao.JobPersonDao;
import com.gochronicle.chronicle.dao.CustomerJobDao.Properties;
import com.gochronicle.chronicle.dao.DaoMaster.DevOpenHelper;
import com.gochronicle.chronicle.dao.JobOrganizationAddress;
import com.gochronicle.chronicle.dao.JobOrganizationAddressDao;
import com.gochronicle.chronicle.dao.JobPerson;
import com.gochronicle.chronicle.dao.Jobsite;
import com.gochronicle.chronicle.dao.JobsiteDao;
import com.gochronicle.chronicle.dao.Journal;
import com.gochronicle.chronicle.dao.JournalHeader;
import com.gochronicle.chronicle.dao.LaborQue;
import com.gochronicle.chronicle.dao.LaborQueDao;
import com.gochronicle.chronicle.dao.Organization;
import com.gochronicle.chronicle.dao.OrganizationAddress;
import com.gochronicle.chronicle.dao.Person;
import com.gochronicle.chronicle.dao.PersonDao;
import com.gochronicle.chronicle.dao.Phone;
import com.gochronicle.chronicle.dao.SystemType2;
import com.gochronicle.chronicle.events.DataDownloadedEvent;
import com.gochronicle.chronicle.events.LoginEvent;
import com.gochronicle.chronicle.utils.ConstantsUtils;
import com.gochronicle.chronicle.utils.ReflectionUtils;
import com.remobjects.dataabstract.RemoteDataAdapter;
import com.remobjects.dataabstract.data.DataRow;
import com.remobjects.dataabstract.data.DataTable;
import com.remobjects.dataabstract.swing.DataTableModel;
import com.remobjects.sdk.AesEncryptionEnvelope;
import com.remobjects.sdk.BinMessage;
import com.remobjects.sdk.ReferenceType;
import com.remobjects.sdk.VariantType;
import de.greenrobot.dao.AbstractDao;
import de.greenrobot.dao.query.WhereCondition;
import de.greenrobot.event.EventBus;
public class CTIDataAccces {
private static CTIDataAccces instance;
private LoginService_Proxy loginService;
private DataService_Proxy dataService;
private JournalService_Proxy journalService;
private ReferenceType<UserInfo> userInfo;
private String mServer;
private RemoteDataAdapter fDataAdapter;
private String secondayIdName;
private String timezoneOffset;
private Integer userId;
private String securityLevel;
private String defaultJournalSecurityLevel;
private String companyName;
private CTIDataAccces() {
}
public static CTIDataAccces getInstance() {
if (null == instance) {
instance = new CTIDataAccces();
}
return instance;
}
public Integer getUserId()
{
return userId;
}
public String getSecurityLevel() {
return securityLevel;
}
public void setSecurityLevel(String securityLevel) {
this.securityLevel = securityLevel;
}
public void initService(String server)
{
try {
mServer = server;
URI aURI = new URI("http://" + mServer + ":8099/bin");
loginService = new LoginService_Proxy(aURI);
dataService = new DataService_Proxy(aURI);
journalService = new JournalService_Proxy(aURI);
fDataAdapter = RemoteDataAdapter.create( URI.create("http://" + mServer + ":8099/bin"), "DataService", "LoginService");
fDataAdapter.getMessage().getEnvelopes().put("AES", new AesEncryptionEnvelope(ConstantsUtils.AES_PASSWORD));
}
catch (URISyntaxException ex)
{
Log.e("Main Activity", "URISyntaxException: " + ex.getMessage());
}
}
public void login (String username, String password)
{
userInfo = new ReferenceType<UserInfo>();
loginService.getProxyMessage().getEnvelopes().put("AES", new AesEncryptionEnvelope(ConstantsUtils.AES_PASSWORD));
Boolean success = loginService.LoginChronicle(username, password, UserTypeEnum.UserTypeEnum_ChronicleMobileAndroid, userInfo);
LoginEvent loginEvent = new LoginEvent (success);
if (success)
{
VariantArray userDetails = userInfo.getValue().getAttributes();
ChronicleApplication.getInstance().setName(userDetails.getItemAtIndex(2).getAsString() + " " + userDetails.getItemAtIndex(3).getAsString());
this.timezoneOffset = userDetails.getItemAtIndex(16).getAsString();
this.userId = userDetails.getItemAtIndex(1).getAsInt32();
this.securityLevel= userDetails.getItemAtIndex(6).getAsString();
}
EventBus.getDefault().post(loginEvent);
}
public ReferenceType<UserInfo> getUserInfo()
{
return userInfo;
}
public DataTable processRequest(Context context, String outputTable, String query, ArrayList<String> params, int indexOfPrimaryKey, ArrayList<Integer> primaryKeyComponents)
{
DataTable dataTable = getDataTable(query, outputTable);
DevOpenHelper helper = new DaoMaster.DevOpenHelper(context, "jobs-db", null);
SQLiteDatabase db = helper.getWritableDatabase();
DaoMaster daoMaster = new DaoMaster(db);
DaoSession daoSession = daoMaster.newSession();
Object objectDao = null;
try
{
Method method = daoSession.getClass().getMethod("get" + outputTable + "Dao", null);
Log.e ("Chronicle", "Returning method for object dao " + method);
objectDao = method.invoke(daoSession, null);
Log.e ("Chronicle", "Returning object dao " + objectDao);
}
catch (Exception e)
{
Log.e ("Chronicle", "Exception avem " + e.getLocalizedMessage());
return null;
}
for (int i = 0; i < dataTable.getRows().getCount(); i++)
{
DataRow row = dataTable.getRows().getRow(i);
Object[] fieldArray = row.getFieldArray();
if (fieldArray.length + 1 != params.size() && primaryKeyComponents != null)
{
Log.e ("Chronicle", "Exception process request params is different than number of fields returned");
return null;
}
else if (fieldArray.length != params.size() && primaryKeyComponents == null)
{
Log.e ("Chronicle", "Exception process request params is different than number of fields returned");
return null;
}
try
{
Class outputClass = Class.forName("com.gochronicle.chronicle.dao." + outputTable);
Log.e ("Chronicle", "Casting our object to " + outputClass);
Object outputObject = outputClass.newInstance();
Log.e ("Chronicle", "Iterating over the fields");
String strPrimaryKeyComponents = "";
for (int k = 0; k<fieldArray.length; k++)
{
if (fieldArray[k] == null)
{
Log.e ("Chronicle", "Field from position " + k + " is null so we move on");
continue;
}
Class myClass = fieldArray[k].getClass();
Log.e ("Chronicle", "Class of type from position " + k + " is " + myClass);
Method method = null;
if (primaryKeyComponents != null)
{
method = outputObject.getClass().getMethod("set" + params.get(k + 1), fieldArray[k].getClass());
method.invoke(outputObject, fieldArray[k]);
}
else
{
if (k == indexOfPrimaryKey)
{
method = outputObject.getClass().getMethod("set" + params.get(k), Long.class);
method.invoke(outputObject, Long.valueOf(fieldArray[k].toString()));
}
else
{
method = outputObject.getClass().getMethod("set" + params.get(k), fieldArray[k].getClass());
method.invoke(outputObject, fieldArray[k]);
}
}
if (primaryKeyComponents != null)
{
if (primaryKeyComponents.contains(k))
{
strPrimaryKeyComponents = strPrimaryKeyComponents + fieldArray[k];
}
}
Log.e ("Chronicle", "Method of type from position " + k + " is " + method);
}
if (primaryKeyComponents != null)
{
Method method = outputObject.getClass().getMethod("set" + params.get(indexOfPrimaryKey), Long.class);
Long longPrimaryKey = Long.valueOf(strPrimaryKeyComponents.hashCode());
method.invoke(outputObject, longPrimaryKey);
}
Log.e ("Chronicle", "We have added all the fields now we attempt to add it to the database");
Method insertMethod = objectDao.getClass().getSuperclass().getDeclaredMethod("insertOrReplace", outputObject.getClass().getSuperclass());
if (!insertMethod.isAccessible())
insertMethod.setAccessible(true);
insertMethod.invoke(objectDao, outputObject);
Log.e ("Chronicle", "We have added it to the database");
}
catch (Exception e)
{
Log.e ("Chronicle", "Exception processRequest " + e.getLocalizedMessage());
return null;
}
}
return dataTable;
}
public DataTable getDataTable (String query, String outputTable)
{
// We can now create and run a DA query.
dataService.getProxyMessage().getEnvelopes().put("AES", new AesEncryptionEnvelope(ConstantsUtils.AES_PASSWORD));
DataTable dataTable;
DataTableModel dataTableModel;
dataTable = new DataTable(outputTable);
fDataAdapter.fillWithSql(dataTable, query, null);
return dataTable;
}
public void getJobsWithSearchTerm (Context context, String searchText)
{
try
{
JobDao jobDao = ChronicleApplication.getInstance().getDAOSession().getJobDao();
CustomerDao customerDao = ChronicleApplication.getInstance().getDAOSession().getCustomerDao();
Log.e ("Chronicle", "CTIDataAccess getJobsWithSearchTerm " + searchText);
String queryIds;
if (CTIDataAccces.isNumeric(searchText))
{
queryIds = "SELECT CJ.JOBID , J.JOBDESC, J.JOBSECONDARYID, J.SYSTEMTYPEID , C.CUSTOMERID," +
" C.CUSTOMERACCESSTYPE, C.CUSTOMERNAME, C.PERSONORORGID FROM CUSTOMER C, CUSTOMERJOB CJ, " +
"JOB J WHERE C.CUSTOMERID = CJ.CUSTOMERID AND J.JOBID = CJ.JOBID " +
"AND upper(J.JOBID) LIKE '%" + searchText + "%'";
}
else
{
queryIds = "SELECT CJ.JOBID , J.JOBDESC, J.JOBSECONDARYID, J.SYSTEMTYPEID , C.CUSTOMERID," +
" C.CUSTOMERACCESSTYPE, C.CUSTOMERNAME, C.PERSONORORGID FROM CUSTOMER C, CUSTOMERJOB CJ, " +
"JOB J WHERE C.CUSTOMERID = CJ.CUSTOMERID AND J.JOBID = CJ.JOBID " +
"AND upper(C.CUSTOMERNAME) LIKE '%" + searchText + "%'";
}
DataTable dataTable = CTIDataAccces.getInstance().getDataTable(queryIds, "Jobs");
Date timeStamp = new Date();
Log.e ("Chronicle", "CTIDataAccess getJobsWithSearchTerm adding to database");
ArrayList<Job> arrJobs = new ArrayList<Job>();
ArrayList<Customer> arrCustomers = new ArrayList<Customer>();
for (int i = 0; i < dataTable.getRows().getCount(); i++)
{
try
{
DataRow row = dataTable.getRows().getRow(i);
Object[] fieldArray = row.getFieldArray();
Job job = new Job();
job.setJobID(Long.valueOf(fieldArray[0].toString()));
job.setJobDesc((String)fieldArray[1]);
job.setJobSecondaryID ((String)fieldArray[2]);
job.setSystemTypeID ((Integer)fieldArray[3]);
Customer customer = new Customer();
customer.setCustomerID(Long.valueOf(fieldArray[4].toString()));
customer.setCustomerAccessType((String)fieldArray[5]);
customer.setCustomerName((String)fieldArray[6]);
customer.setPersonOrOrgID((Integer)fieldArray[7]);
job.setCustomer(customer);
arrJobs.add(job);
arrCustomers.add(customer);
}
catch (Exception e)
{
Log.e ("Chronicle", "Exception adding individual row " + e.getLocalizedMessage());
}
}
jobDao.insertOrReplaceInTx(arrJobs);
customerDao.insertOrReplaceInTx(arrCustomers);
Log.e ("Chronicle", "Finished adding jobs to db count is " + dataTable.getRows().getCount() + " and lasted " +
((new Date()).getTime() - timeStamp.getTime()));
}
catch (Exception e)
{
Log.e ("Chronicle", "CTIDataAccess getJobsWithSearchTerm exception " + e.getLocalizedMessage());
}
EventBus.getDefault().post(new DataDownloadedEvent("Job"));
}
public DataTable getActiveJobs (Context context)
{
try
{
Log.e ("Chronicle", "CTIDataAccess getActiveJobs ");
JobDao jobDao = ChronicleApplication.getInstance().getDAOSession().getJobDao();
String query = "select distinct CJ.JOBID, J.JOBDESC, J.JOBSECONDARYID, J.SYSTEMTYPEID, C.CUSTOMERID," +
" C.CUSTOMERACCESSTYPE, C.CUSTOMERNAME, C.PERSONORORGID FROM CUSTOMER C, CUSTOMERJOB CJ, JOB J," +
" DEPARTMENTJOB DJ WHERE C.CUSTOMERID = CJ.CUSTOMERID AND J.JOBID = CJ.JOBID " +
"AND DJ.JOBID = J.JOBID AND DJ.DEPARTMENTJOBSTATUS = 'ACTIVE' AND DJ.DEPARTMENTJOBFETCH = 'Y'";
Log.e ("Chronicle", "CTIDataAccess getActiveJobs query " + query);
DataTable dataTable = CTIDataAccces.getInstance().getDataTable(query, "Jobs");
Date timeStamp = new Date();
Log.e ("Chronicle", "CTIDataAccess getJobsWithSearchTerm adding to database");
ArrayList<Job> arrJobs = new ArrayList<Job>();
for (int i = 0; i < dataTable.getRows().getCount(); i++)
{
DataRow row = dataTable.getRows().getRow(i);
Object[] fieldArray = row.getFieldArray();
Job job = new Job();
job.setJobID(Long.valueOf(fieldArray[0].toString()));
job.setJobDesc((String)fieldArray[1]);
job.setJobSecondaryID ((String)fieldArray[2]);
job.setSystemTypeID ((Integer)fieldArray[3]);
Customer customer = new Customer();
//customer.setId(randomNum);
customer.setCustomerID(Long.valueOf(fieldArray[4].toString()));
customer.setCustomerAccessType((String)fieldArray[5]);
customer.setCustomerName((String)fieldArray[6]);
customer.setPersonOrOrgID((Integer)fieldArray[7]);
job.setCustomer(customer);
arrJobs.add(job);
}
jobDao.insertOrReplaceInTx(arrJobs);
Log.e ("Chronicle", " getActiveJobs Finished adding jobs to db count is " + dataTable.getRows().getCount() + " and lasted " +
((new Date()).getTime() - timeStamp.getTime()));
return dataTable;
}
catch (Exception e)
{
Log.e ("Chronicle", "CTIDataAccess getActiveJobs exception " + e.getLocalizedMessage());
return null;
}
}
public List<JournalHeader> getJournalHeadersWithJobId (Context context, Long jobId)
{
String query = "SELECT JH.JOURNALHEADERID, JH.JOURNALHEADERSUBJECT, JH.JOURNALHEADERCREATEUSER AS PERSONID," +
" JH.JOURNALDEPARTMENTID AS DEPARTMENTID, JH.JOURNALACTIVITYID AS ACTIVITYID, JH.JOURNALSECURITYLEVEL," +
" JH.HEADERCREATEDATE FROM JOURNALHEADER JH JOIN JOBJOURNAL JJ ON JH.JOURNALHEADERID = JJ.JOURNALHEADERID " +
"WHERE (JH.JOURNALHEADERFETCH = 'Y' OR JH.JOURNALHEADERFETCH IS NULL) AND JJ.JOBID = " + jobId.toString() +
" AND JOURNALSECURITYLEVEL < " + (Integer.valueOf(this.securityLevel) + 1);
ArrayList<String> fields = new ArrayList<String>();
fields.add("JournalHeaderID");
fields.add("JournalHeaderSubject");
fields.add("PersonID");
fields.add("DepartmentID");
fields.add("ActivityID");
fields.add("JournalSecurityLevel");
fields.add("HeaderCreateDate");
DataTable tableJournalHeaders = CTIDataAccces.getInstance().processRequest(context, "JournalHeader", query, fields, 0, null);
ArrayList<String> arrJournalHeaderIds = new ArrayList<String>();
for (int i = 0; i < tableJournalHeaders.getRows().getCount(); i++)
{
DataRow row = tableJournalHeaders.getRows().getRow(i);
arrJournalHeaderIds.add(row.getField(0).toString());
}
List<JournalHeader> arrJournalHeader = ChronicleApplication.getInstance().getDAOSession().getJournalHeaderDao().queryBuilder().where(com.gochronicle.chronicle.dao.JournalHeaderDao.Properties.JournalHeaderID.in(arrJournalHeaderIds)).list();
Collections.sort(arrJournalHeader, new Comparator<Object>() {
@Override
public int compare(Object lhs, Object rhs) {
return (((JournalHeader) rhs).getHeaderCreateDate()).compareTo(((JournalHeader) lhs).getHeaderCreateDate());
}
});
return arrJournalHeader;
}
public List<JobPerson> getJobsPerson (Context context, Long jobId, Long personId)
{
List<JobPerson> arrJobsPerson = ChronicleApplication.getInstance().getDAOSession().getJobPersonDao().queryBuilder().where(com.gochronicle.chronicle.dao.JobPersonDao.Properties.JobID.eq (jobId)).
where(com.gochronicle.chronicle.dao.JobPersonDao.Properties.PersonID.eq (personId)).list();
if (arrJobsPerson.size() > 0)
return arrJobsPerson;
ArrayList<String> fields = new ArrayList<String>();
ArrayList<Integer> primaryKeyComponents = new ArrayList<Integer>();
fields.add("JobPersonID");
fields.add("JobID");
fields.add("PersonID");
fields.add("SystemType2ID");
primaryKeyComponents.add(0);
primaryKeyComponents.add(1);
DataTable persons = processRequest(context, "JobPerson",
"SELECT JOBID, PERSONID, SYSTEMTYPE2ID FROM JOBPERSON WHERE JOBID = " + jobId.toString() + " AND PERSONID = " + personId.toString(),
fields, 0, primaryKeyComponents);
arrJobsPerson = ChronicleApplication.getInstance().getDAOSession().getJobPersonDao().queryBuilder().where(com.gochronicle.chronicle.dao.JobPersonDao.Properties.JobID.eq (jobId)).
where(com.gochronicle.chronicle.dao.JobPersonDao.Properties.PersonID.eq (personId)).list();
return arrJobsPerson;
}
public void getDepartmentsWithJobId (Context context, Long jobId)
{
String query = "SELECT DJ.DEPARTMENTID, DJ.JOBID, DJ.DEPARTMENTJOBSTATUS, DJ.DEPARTMENTJOBSTARTDATE, DJ.DEPARTMENTJOBENDDATE, " +
"DJ.REQDOCTEMPLATEID, DJ.REQDOCTEMPLATENAME FROM DEPARTMENTJOB DJ join DEPARTMENT D on D.DEPARTMENTID = DJ.DEPARTMENTID " +
"WHERE DJ.DEPARTMENTJOBFETCH = 'Y' AND DJ.JOBID = " + String.valueOf(jobId);
ArrayList<String> fields = new ArrayList<String>();
fields.add("DepartmentJobID");
fields.add("DepartmentID");
fields.add("JobID");
fields.add("DepartmentJobStatus");
fields.add("DepartmentJobStartDate");
fields.add("DepartmentJobEndDate");
fields.add("ReqDocTemplateID");
fields.add("ReqDocTemplateName");
ArrayList<Integer> arrUniqueKeyComponentsIndex = new ArrayList<Integer>();
arrUniqueKeyComponentsIndex.add(0);//the unique key is composed out of jobId, organizationId, AddressId
arrUniqueKeyComponentsIndex.add(1);
CTIDataAccces.getInstance().processRequest(context, "DepartmentJob", query, fields, 0, arrUniqueKeyComponentsIndex);
}
public List<JobOrganizationAddress> getJobOrganizationAddresses (Context context, Integer jobId)
{
JobOrganizationAddressDao jobOrgAddressDao = ChronicleApplication.getInstance().getDAOSession().getJobOrganizationAddressDao();
List<JobOrganizationAddress> arrJobOrganizationdAddress =
jobOrgAddressDao.queryBuilder().where ( com.gochronicle.chronicle.dao.JobOrganizationAddressDao.Properties.JobID.eq(jobId),
com.gochronicle.chronicle.dao.JobOrganizationAddressDao.Properties.JobOrganizationRelationship.notEq("C")).list();
if (arrJobOrganizationdAddress.size() > 0)
return arrJobOrganizationdAddress;
String query = "SELECT JOBID, ORGANIZATIONID, ADDRESSID, JOBORGANIZATIONROLEID, " +
"JOBORGANIZATIONFETCH, JOBORGANIZATIONRELATIONSHIP FROM JOBORGANIZATIONADDRESS WHERE JOBID = " + String.valueOf(jobId);
ArrayList<String> fields = new ArrayList<String>();
fields.add("JobOrganizationAddressID");
fields.add("JobID");
fields.add("OrganizationID");
fields.add("AddressID");
fields.add("JobOrganizationRoleID");
fields.add("JobOrganizationFetch");
fields.add("JobOrganizationRelationship");
ArrayList<String> arrIds = new ArrayList<String>();
ArrayList<String> arrAddressIds = new ArrayList<String>();
ArrayList<Integer> arrUniqueKeyComponentsIndex = new ArrayList<Integer>();
arrUniqueKeyComponentsIndex.add(0);//the unique key is composed out of jobId, organizationId, AddressId
arrUniqueKeyComponentsIndex.add(1);
arrUniqueKeyComponentsIndex.add(2);
DataTable tableJobOrganizationAddresses = CTIDataAccces.getInstance().processRequest(context, "JobOrganizationAddress", query, fields, 0, arrUniqueKeyComponentsIndex);
for (int i = 0; i < tableJobOrganizationAddresses.getRows().getCount(); i++)
{
DataRow row = tableJobOrganizationAddresses.getRows().getRow(i);
arrIds.add(row.getField(2).toString());
if (row.getField(3) != null)
arrAddressIds.add(row.getField(3).toString());
}
query = "SELECT ORGANIZATIONID, ADDRESSID, ORGANIZATIONADDRESSID, ORGADDRESSFETCH, ORGADDRESSDESC FROM " +
"ORGANIZATIONADDRESS WHERE ORGANIZATIONID IN (" + TextUtils.join(",", arrIds) + ")";
fields.clear();
fields.add("OrganizationAddressIdKey");
fields.add("OrganizationID");
fields.add("AddressID");
fields.add("OrganizationAddressID");
fields.add("OrgAddressFetch");
fields.add("OrgAddressDesc");
arrUniqueKeyComponentsIndex.clear();
arrUniqueKeyComponentsIndex.add(0);//the unique key is composed out of jobId, organizationId, AddressId
arrUniqueKeyComponentsIndex.add(1);
DataTable tableOrganizationAddresses;
if (arrIds.size() > 0)
tableOrganizationAddresses = CTIDataAccces.getInstance().processRequest(context, "OrganizationAddress", query, fields, 0, arrUniqueKeyComponentsIndex);
query = "SELECT ADDRESSID, ADDRESS1, ADDRESS2, STATEPROVINCE, POSTALCODE, COUNTRY, SYSTEMTYPEID, " +
"CITYID FROM ADDRESS WHERE ADDRESSID IN (" + TextUtils.join(",", arrAddressIds) + ")";
fields.clear();
fields.add("AddressID");
fields.add("Address1");
fields.add("Address2");
fields.add("StateProvince");
fields.add("PostalCode");
fields.add("Country");
fields.add("SystemTypeID");
fields.add("CityID");
DataTable tableAddresses;
if (arrAddressIds.size() > 0)
tableAddresses = CTIDataAccces.getInstance().processRequest(context, "Address", query, fields, 0, null);
arrJobOrganizationdAddress =
jobOrgAddressDao.queryBuilder().where ( com.gochronicle.chronicle.dao.JobOrganizationAddressDao.Properties.JobID.eq(jobId),
com.gochronicle.chronicle.dao.JobOrganizationAddressDao.Properties.JobOrganizationRelationship.notEq("C")).list();
return arrJobOrganizationdAddress;
}
public List<JobOrganizationAddress> getJobOrganizationAddressesWithAll (Context context, Integer jobId, Integer organizationId, Integer addressId)
{
List<JobOrganizationAddress> arrJobOrganizationdAddress =
ChronicleApplication.getInstance().getDAOSession().getJobOrganizationAddressDao().queryBuilder().where ( com.gochronicle.chronicle.dao.JobOrganizationAddressDao.Properties.JobID.eq(jobId),
com.gochronicle.chronicle.dao.JobOrganizationAddressDao.Properties.OrganizationID.eq(organizationId),
com.gochronicle.chronicle.dao.JobOrganizationAddressDao.Properties.AddressID.eq(addressId)).list();
if (arrJobOrganizationdAddress.size() > 0)
return arrJobOrganizationdAddress;
String query = "SELECT JOBID, ORGANIZATIONID, ADDRESSID, JOBORGANIZATIONROLEID, JOBORGANIZATIONFETCH, JOBORGANIZATIONRELATIONSHIP " +
"FROM JOBORGANIZATIONADDRESS WHERE JOBID = " + String.valueOf(jobId) + " AND ORGANIZATIONID = " + organizationId.toString() + " "
+ " AND ADDRESSID = " + addressId.toString();
ArrayList<String> fields = new ArrayList<String>();
fields.add("JobOrganizationAddressID");
fields.add("JobID");
fields.add("OrganizationID");
fields.add("AddressID");
fields.add("JobOrganizationRoleID");
fields.add("JobOrganizationFetch");
fields.add("JobOrganizationRelationship");
ArrayList<String> arrIds = new ArrayList<String>();
ArrayList<String> arrAddressIds = new ArrayList<String>();
ArrayList<Integer> arrUniqueKeyComponentsIndex = new ArrayList<Integer>();
arrUniqueKeyComponentsIndex.add(0);//the unique key is composed out of jobId, organizationId, AddressId
arrUniqueKeyComponentsIndex.add(1);
arrUniqueKeyComponentsIndex.add(2);
CTIDataAccces.getInstance().processRequest(context, "JobOrganizationAddress", query, fields, 0, arrUniqueKeyComponentsIndex);
arrJobOrganizationdAddress =
ChronicleApplication.getInstance().getDAOSession().getJobOrganizationAddressDao().queryBuilder().where ( com.gochronicle.chronicle.dao.JobOrganizationAddressDao.Properties.JobID.eq(jobId),
com.gochronicle.chronicle.dao.JobOrganizationAddressDao.Properties.OrganizationID.eq(organizationId),
com.gochronicle.chronicle.dao.JobOrganizationAddressDao.Properties.AddressID.eq(addressId)).list();
return arrJobOrganizationdAddress;
}
public boolean isSalaried(Context context, Integer personId) {
String query = "SELECT E.PERSONID, E.PAYRATE, E.PAYTYPE FROM EMPLOYEE E WHERE E.PERSONID = " + personId.toString();
ArrayList<String> fields = new ArrayList<String>();
fields.add("PersonID");
fields.add("PayRate");
fields.add("PayType");
CTIDataAccces.getInstance().processRequest(context, "Employee", query, fields, 0, null);
List<Employee> arrEmployee = ChronicleApplication.getInstance().getDAOSession().getEmployeeDao().queryBuilder().where (EmployeeDao.Properties.PersonID.eq(personId)).list();
if (arrEmployee.size() == 0)
return true;
else {
// if (arrEmployee.get(0).getPayRate() > 0.0)
// return true;
// if (arrEmployee.get(0).getPayType().equals(“SALARY”))
// return true;
}
return false;
}
public List<JobPerson> getJobPerson (Context context, Integer jobId)
{
//to be take out sa aduag chestia sa nu le downloadez de fiecare data + (NSArray *)getJobPeople:(Job *)job
String query = "SELECT PERSONID, JOBID, SYSTEMTYPE2ID FROM JOBPERSON WHERE JOBID = " + String.valueOf(jobId);
ArrayList<String> fields = new ArrayList<String>();
fields.add("JobPersonID");
fields.add("PersonID");
fields.add("JobID");
fields.add("SystemType2ID");
ArrayList<Integer> arrUniqueKeyComponentsIndex = new ArrayList<Integer>();
arrUniqueKeyComponentsIndex.add(0);//the unique key is composed out of jobId, organizationId, AddressId
arrUniqueKeyComponentsIndex.add(1);
ArrayList<String> arrIds = new ArrayList<String>();
DataTable tableJobPerson = CTIDataAccces.getInstance().processRequest(context, "JobPerson", query, fields, 0, arrUniqueKeyComponentsIndex);
for (int i = 0; i < tableJobPerson.getRows().getCount(); i++)
{
DataRow row = tableJobPerson.getRows().getRow(i);
arrIds.add(row.getField(0).toString());
}
query = "SELECT PERSONID, DEFAULTROLEID, PERSONFETCH, PERSONFIRSTNAME, PERSONLASTNAME," +
" PERSONTITLE, SYSTEMCATEGORYID FROM PERSON WHERE PERSONID IN (" + TextUtils.join(",", arrIds) + ")";
fields.clear();
fields.add("PersonID");
fields.add("DefaultRoleID");
fields.add("PersonFetch");
fields.add("PersonFirstName");
fields.add("PersonLastName");
fields.add("PersonTitle");
fields.add("SystemCategoryID");
//fields.add("SystemTypeID");
DataTable tableOrganizationAddresses = CTIDataAccces.getInstance().processRequest(context, "Person", query, fields, 0, null);
JobPersonDao jobPersonDao = ChronicleApplication.getInstance().getDAOSession().getJobPersonDao();
List<JobPerson> arrJobPerson =
jobPersonDao.queryBuilder().where (com.gochronicle.chronicle.dao.JobPersonDao.Properties.JobID.eq(jobId)).list();
return arrJobPerson;
}
public ArrayList<Object> getJobContacts (final Context context, Integer jobId)
{
ArrayList<Object> finalContacts = new ArrayList<Object>();
List<JobOrganizationAddress> arrJobOrganizationAddresses = getJobOrganizationAddresses(context, jobId);
for (JobOrganizationAddress jobOrganizationAddress : arrJobOrganizationAddresses) {
if (jobOrganizationAddress != null)
{
if (jobOrganizationAddress.getJobOrganizationRelationship().compareToIgnoreCase("C") != 0)
{
OrganizationAddress orgAddress = getOrganizationAddress(context, jobOrganizationAddress.getOrganizationID().toString(), jobOrganizationAddress.getAddressID().toString());
if (orgAddress != null)
{
finalContacts.add(orgAddress);
}
}
}
}
List<JobPerson> arrJobPerson = getJobPerson(context, jobId);
ArrayList<String> arrIds = new ArrayList<String>();
for (int i = 0; i < arrJobPerson.size(); i++)
{
JobPerson jobPerson = arrJobPerson.get(i);
arrIds.add(jobPerson.getPersonID().toString());
}
PersonDao personDao = ChronicleApplication.getInstance().getDAOSession().getPersonDao();
List<Person> arrPerson = personDao.queryBuilder().where(com.gochronicle.chronicle.dao.PersonDao.Properties.PersonID.in(arrIds)).list();
finalContacts.addAll(arrPerson);
Collections.sort(finalContacts, new Comparator<Object>() {
@Override
public int compare(Object obj1, Object obj2)
{
String str1 = "";
String str2 = "";
if (obj1 instanceof Person && obj2 instanceof Person) {
str1 = String.format("%s, %s", ((Person) obj1).getPersonLastName(), ((Person) obj1).getPersonFirstName());
str2 = String.format("%s, %s", ((Person) obj2).getPersonLastName(), ((Person) obj2).getPersonFirstName());
} else if (obj1 instanceof Person && obj2 instanceof OrganizationAddress) {
str1 = String.format("%s, %s", ((Person) obj1).getPersonLastName(), ((Person) obj1).getPersonFirstName());
// OrganizationAddress needs to be sorted on this format OrganizationName (OrgAddressDesc)
Organization org = getOrganization(context, ((OrganizationAddress) obj2).getOrganizationID());
if (org != null)
str2 = String.format("%s (%s)", org.getOrganizationName(), ((OrganizationAddress) obj2).getOrgAddressDesc());
else
str2 = ((OrganizationAddress) obj2).getOrgAddressDesc();
} else if (obj1 instanceof OrganizationAddress && obj2 instanceof Person) {
// OrganizationAddress needs to be sorted on this format OrganizationName (OrgAddressDesc)
Organization org = getOrganization(context, ((OrganizationAddress) obj1).getOrganizationID());
if (org != null)
str1 = String.format("%s (%s)", org.getOrganizationName(), ((OrganizationAddress) obj1).getOrgAddressDesc());
else
str1 = ((OrganizationAddress) obj1).getOrgAddressDesc();
str2 = String.format("%s, %s", ((Person) obj2).getPersonLastName(), ((Person) obj2).getPersonFirstName());
} else { // Compare two orgs
Organization org1 = getOrganization(context, ((OrganizationAddress) obj1).getOrganizationID());
if (org1 != null)
str1 = String.format("%s (%s)", org1.getOrganizationName(), ((OrganizationAddress) obj1).getOrgAddressDesc());
else
str1 = ((OrganizationAddress) obj1).getOrgAddressDesc();
Organization org2 = getOrganization(context, ((OrganizationAddress) obj2).getOrganizationID());
if (org2 != null)
str2 = String.format("%s (%s)", org2.getOrganizationName(), ((OrganizationAddress) obj2).getOrgAddressDesc());
else
str2 = ((OrganizationAddress) obj2).getOrgAddressDesc();
}
return (str1).compareTo(str2);
}
});
return finalContacts;
}
public void getCompanyInformation()
{
String companyInfoQuery = "Select S.SETTINGVALUE, O.ORGANIZATIONNAME, OAP.SECONDARYIDNAME, OAP.ORGPROFILETYPE from SERVERSETTING S, ORGANIZATIONAPPPROFILE OAP " +
"join ORGANIZATION O on OAP.ORGANIZATIONID = O.ORGANIZATIONID where S.SETTINGNAME = 'Chronicle Support ID' OR S.SETTINGNAME = 'TimeZoneOffset'";
DataTable tableCompanyInfo = getDataTable(companyInfoQuery, "ServerSettings");
for (int i = 0; i < tableCompanyInfo.getRows().getCount(); i++)
{
DataRow row = tableCompanyInfo.getRows().getRow(i);
this.secondayIdName = (String)row.getField("SECONDARYIDNAME");
this.companyName = (String)row.getField("ORGANIZATIONNAME");
if (row.getField("ORGANIZATIONNAME").equals("TimeZoneOffset"))
{
this.timezoneOffset = (String)row.getField("SETTINGVALUE");
}
}
String journalDefaultSecurity = "Select P.PREFERENCESUBTYPE, P.PREFERENCEVALUE from PREFERENCE P WHERE P.PREFERENCESUBTYPE = 'Default Journal Security Level'" +
" and P.PERSONID = " + this.userId.toString();
DataTable tableJournalSecurity = getDataTable(journalDefaultSecurity, "Preference");
for (int i = 0; i < tableJournalSecurity.getRows().getCount(); i++)
{
DataRow row = tableJournalSecurity.getRows().getRow(i);
if ((row.getField("PREFERENCEVALUE").toString() != null) && (row.getField("PREFERENCEVALUE").toString().equals("0")))
{
this.defaultJournalSecurityLevel = ((String)row.getField("PREFERENCEVALUE"));
}
}
if( this.defaultJournalSecurityLevel == null)
{
// Get the company default
journalDefaultSecurity = "select settingname, settingvalue from SERVERSETTING WHERE SETTINGNAME = 'Default Journal Security Level'";
tableJournalSecurity = getDataTable(journalDefaultSecurity, "ServerSetting");
if (tableJournalSecurity.getRows().getCount() > 0)
{
DataRow row = tableJournalSecurity.getRows().getRow(0);
this.defaultJournalSecurityLevel= (String)row.getField("SETTINGVALUE");
}
}
}
public String getSecondaryIdName()
{
return secondayIdName;
}
public Address getJobsiteAddressForJobId (Context context, Long jobId)
{
List<Jobsite> arrJobsite = ChronicleApplication.getInstance().getDAOSession().getJobsiteDao().queryBuilder().where(com.gochronicle.chronicle.dao.JobsiteDao.Properties.JobID.eq (jobId)).list();
ArrayList<String> fields = new ArrayList<String>();
fields.add("JobID");
fields.add("AddressID");
if (arrJobsite.size() == 0)
{
DataTable jobsiteAddresses = processRequest(context, "Jobsite", "SELECT JOBID, ADDRESSID FROM JOBSITE WHERE JOBID = " + jobId.toString(),
fields, -1, null);
arrJobsite = ChronicleApplication.getInstance().getDAOSession().getJobsiteDao().queryBuilder().where(com.gochronicle.chronicle.dao.JobsiteDao.Properties.JobID.eq (jobId)).list();
for (int i = 0; i < arrJobsite.size(); i++)
{
Jobsite jobSite = arrJobsite.get(i);
ArrayList<String> fieldsNew = new ArrayList<String>();
fieldsNew.add("AddressID");
fieldsNew.add("Address1");
fieldsNew.add("Address2");
fieldsNew.add("StateProvince");
fieldsNew.add("PostalCode");
fieldsNew.add("Country");
fieldsNew.add("SystemTypeID");
fieldsNew.add("CityID");
processRequest(context, "Address",
"SELECT ADDRESSID, ADDRESS1, ADDRESS2, STATEPROVINCE, POSTALCODE, COUNTRY, SYSTEMTYPEID, CITYID FROM ADDRESS WHERE ADDRESSID = " + jobSite.getAddressID(),
fieldsNew, 0, null);
List<Address> arrAddresses = ChronicleApplication.getInstance().getDAOSession().getAddressDao().queryBuilder().where(com.gochronicle.chronicle.dao.AddressDao.Properties.AddressID.eq (jobSite.getAddressID())).list();
if (arrAddresses.size() == 0)
{
Log.e ("Chronicle", "There was a problem and we found no address");
return null;
}
Address address = arrAddresses.get(0);
}
}
arrJobsite = ChronicleApplication.getInstance().getDAOSession().getJobsiteDao().queryBuilder().where(com.gochronicle.chronicle.dao.JobsiteDao.Properties.JobID.eq (jobId)).list();
if (arrJobsite.size() == 0)
{
Log.e ("Chronicle", "There was a problem and we found no jobsite");
return null;
}
List<Address> arrAddressesFinal = ChronicleApplication.getInstance().getDAOSession().getAddressDao().queryBuilder().where(com.gochronicle.chronicle.dao.AddressDao.Properties.AddressID.eq (arrJobsite.get(0).getAddressID())).list();
if (arrAddressesFinal.size() == 0)
{
Log.e ("Chronicle", "There was a problem and we found no address");
return null;
}
return arrAddressesFinal.get(0);
}
public Person getPerson (Context context, Integer personId)
{
List<Person> arrPersons = ChronicleApplication.getInstance().getDAOSession().getPersonDao().queryBuilder().where(com.gochronicle.chronicle.dao.PersonDao.Properties.PersonID.eq (personId)).list();
if (arrPersons.size() > 0)
return arrPersons.get(0);
ArrayList<String> fields = new ArrayList<String>();
fields.add("PersonID");
fields.add("DefaultRoleID");
fields.add("PersonFetch");
fields.add("PersonFirstName");
fields.add("PersonLastName");
fields.add("PersonTitle");
fields.add("SystemCategoryID");
//fields.add("SystemTypeID");
DataTable persons = processRequest(context, "Person",
"SELECT PERSONID, DEFAULTROLEID, PERSONFETCH, PERSONFIRSTNAME, PERSONLASTNAME, PERSONTITLE, SYSTEMCATEGORYID FROM PERSON WHERE PERSONID = " + personId.toString(),
fields, 0, null);
arrPersons = ChronicleApplication.getInstance().getDAOSession().getPersonDao().queryBuilder().where(com.gochronicle.chronicle.dao.PersonDao.Properties.PersonID.eq (personId)).list();
if (arrPersons.size() > 0)
return arrPersons.get(0);
return null;
}
public City getCity(Context context, Short cityId) {
List<City> arrCities = ChronicleApplication.getInstance().getDAOSession().getCityDao().queryBuilder().where(CityDao.Properties.CityID.eq (cityId)).list();
if (arrCities.size() > 0)
return arrCities.get(0);
ArrayList<String> fields = new ArrayList<String>();
fields.add("CityID");
fields.add("CityName");
DataTable cities = processRequest(context, "City",
"SELECT CITYID, CITYNAME FROM CITY WHERE CITYID = " + cityId.toString(),
fields, 0, null);
arrCities = ChronicleApplication.getInstance().getDAOSession().getCityDao().queryBuilder().where(CityDao.Properties.CityID.eq (cityId)).list();
if (arrCities.size() > 0)
return arrCities.get(0);
return null;
}
public Department getDepartment (Context context, Integer departmentId)
{
List<Department> arrDepartments = ChronicleApplication.getInstance().getDAOSession().getDepartmentDao().queryBuilder().where(com.gochronicle.chronicle.dao.DepartmentDao.Properties.DepartmentID.eq (departmentId)).list();
if (arrDepartments.size() > 0)
return arrDepartments.get(0);
ArrayList<String> fields = new ArrayList<String>();
fields.add("DepartmentID");
fields.add("DepartmentColor");
fields.add("DepartmentDesc");
fields.add("SmSurveyTrigger");
fields.add("DaysToComplete");
fields.add("SystemFeatureSet");
DataTable persons = processRequest(context, "Department",
"SELECT DEPARTMENTID, DEPARTMENTCOLOR, DEPARTMENTDESC, SMSURVEYTRIGGER, DAYSTOCOMPLETE, SYSTEMFEATURESET FROM DEPARTMENT WHERE DEPARTMENTID = " + departmentId.toString(),
fields, 0, null);
arrDepartments = ChronicleApplication.getInstance().getDAOSession().getDepartmentDao().queryBuilder().where(com.gochronicle.chronicle.dao.DepartmentDao.Properties.DepartmentID.eq (departmentId)).list();
if (arrDepartments.size() > 0)
return arrDepartments.get(0);
return null;
}
public Organization getOrganization (Context context, Integer organizationId)
{
List<Organization> arrOrganizations = ChronicleApplication.getInstance().getDAOSession().getOrganizationDao().queryBuilder().where(com.gochronicle.chronicle.dao.OrganizationDao.Properties.OrganizationID.eq (organizationId)).list();
if (arrOrganizations.size() > 0)
return arrOrganizations.get(0);
ArrayList<String> fields = new ArrayList<String>();
fields.add("OrganizationID");
fields.add("OrganizationFetch");
fields.add("OrganizationName");
fields.add("SystemCategoryID");
fields.add("SystemTypeID");
processRequest(context, "Organization",
"SELECT ORGANIZATIONID, ORGANIZATIONFETCH, ORGANIZATIONNAME, SYSTEMCATEGORYID, SYSTEMTYPEID FROM ORGANIZATION WHERE ORGANIZATIONID = " + organizationId.toString(),
fields, 0, null);
arrOrganizations = ChronicleApplication.getInstance().getDAOSession().getOrganizationDao().queryBuilder().where(com.gochronicle.chronicle.dao.OrganizationDao.Properties.OrganizationID.eq (organizationId)).list();
if (arrOrganizations.size() > 0)
return arrOrganizations.get(0);
return null;
}
public SystemType2 getSystemType2 (Context context, Integer systemType2Id)
{
List<SystemType2> arrSystemTypes = ChronicleApplication.getInstance().getDAOSession().getSystemType2Dao().queryBuilder().where(com.gochronicle.chronicle.dao.SystemType2Dao.Properties.SystemType2ID.eq (systemType2Id)).list();
if (arrSystemTypes.size() > 0)
return arrSystemTypes.get(0);
ArrayList<String> fields = new ArrayList<String>();
fields.add("SystemType2ID");
fields.add("SystemType2Desc");
processRequest(context, "SystemType2",
"SELECT S.SYSTEMTYPE2ID, S.SYSTEMTYPE2DESC FROM SYSTEMTYPE2 S WHERE SYSTEMTYPE2ID = " + systemType2Id.toString(),
fields, 0, null);
arrSystemTypes = ChronicleApplication.getInstance().getDAOSession().getSystemType2Dao().queryBuilder().where(com.gochronicle.chronicle.dao.SystemType2Dao.Properties.SystemType2ID.eq (systemType2Id)).list();
if (arrSystemTypes.size() > 0)
return arrSystemTypes.get(0);
return null;
}
public Job getJob (Context context, Long jobId)
{
List<Job> arrJobs = ChronicleApplication.getInstance().getDAOSession().getJobDao().queryBuilder().where(com.gochronicle.chronicle.dao.JobDao.Properties.JobID.eq (jobId)).list();
if (arrJobs.size() > 0)
return arrJobs.get(0);
ArrayList<String> fields = new ArrayList<String>();
fields.add("JobID");
fields.add("JobDesc");
fields.add("JobSecondaryID");
fields.add("SystemTypeID");
processRequest(context, "Job",
"SELECT JOBID, JOBDESC, JOBSECONDARYID, SYSTEMTYPEID FROM JOB WHERE JOBID = " + jobId.toString(),
fields, 0, null);
arrJobs = ChronicleApplication.getInstance().getDAOSession().getJobDao().queryBuilder().where(com.gochronicle.chronicle.dao.JobDao.Properties.JobID.eq (jobId)).list();
if (arrJobs.size() > 0)
return arrJobs.get(0);
return null;
}
public Activity getActivity (Context context, Integer journalHeaderId)
{
List<Activity> arrActivities = ChronicleApplication.getInstance().getDAOSession().getActivityDao().queryBuilder().where(ActivityDao.Properties.ActivityID.eq (journalHeaderId)).list();
if (arrActivities.size() > 0)
return arrActivities.get(0);
ArrayList<String> fields = new ArrayList<String>();
fields.add("ActivityID");
fields.add("ActivityCode");
fields.add("ActivityDesc");
fields.add("SystemTypeID");
fields.add("DepartmentID");
fields.add("ActivityIsProduction");
DataTable persons = processRequest(context, "Activity",
"SELECT A.ACTIVITYID, A.ACTIVITYCODE, A.ACTIVITYDESC, A.SYSTEMTYPEID, A.DEPARTMENTID, A.ACTIVITYISPRODUCTION FROM ACTIVITY A WHERE A.ACTIVITYID = " + journalHeaderId.toString(),
fields, 0, null);
arrActivities = ChronicleApplication.getInstance().getDAOSession().getActivityDao().queryBuilder().where(ActivityDao.Properties.ActivityID.eq (journalHeaderId)).list();
if (arrActivities.size() > 0)
return arrActivities.get(0);
return null;
}
public List<Activity> getActivitiesForDepartment (Context context, Integer departmentID) {
List<Activity> arrActivities = ChronicleApplication.getInstance().getDAOSession().getActivityDao().queryBuilder().where(com.gochronicle.chronicle.dao.ActivityDao.Properties.DepartmentID.eq (departmentID)).list();
if (arrActivities.size() > 0)
return arrActivities;
ArrayList<String> fields = new ArrayList<String>();
fields.add("ActivityID");
fields.add("ActivityCode");
fields.add("ActivityDesc");
fields.add("SystemTypeID");
fields.add("DepartmentID");
fields.add("ActivityIsProduction");
DataTable persons = processRequest(context, "Activity",
"SELECT A.ACTIVITYID, A.ACTIVITYCODE, A.ACTIVITYDESC, A.SYSTEMTYPEID, A.DEPARTMENTID, A.ACTIVITYISPRODUCTION FROM ACTIVITY A WHERE A.DEPARTMENTID = " + departmentID.toString(),
fields, 0, null);
arrActivities = ChronicleApplication.getInstance().getDAOSession().getActivityDao().queryBuilder().where(ActivityDao.Properties.DepartmentID.eq (departmentID)).list();
return arrActivities;
}
public List<DeptJobActivity> getActivities (Context context, Long jobId)
{
List<DeptJobActivity> arrActivities = ChronicleApplication.getInstance().getDAOSession().getDeptJobActivityDao().queryBuilder().where(com.gochronicle.chronicle.dao.DeptJobActivityDao.Properties.JobID.eq (jobId)).list();
if (arrActivities.size() > 0)
return arrActivities;
ArrayList<String> fields = new ArrayList<String>();
fields.add("DeptJobActivityID");
fields.add("EstimatedDays");
fields.add("ActivityID");
fields.add("DepartmentID");
fields.add("JobID");
fields.add("ActivityLastModifiedBy");
fields.add("DeptJobActivityName");
fields.add("DeptJobActivityStatus");
fields.add("DeptJobActivityStartDate");
fields.add("DeptJobActivityEndDate");
fields.add("FinancialCloseDate");
DataTable persons = processRequest(context, "DeptJobActivity",
"SELECT DJA.DEPTJOBACTIVITYID, T.ESTIMATEDDAYS, DJA.ACTIVITYID, DJA.DEPARTMENTID, DJA.JOBID, DJA.ACTIVITYLASTMODIFIEDBY, " +
"DJA.DEPTJOBACTIVITYNAME, DJA.DEPTJOBACTIVITYSTATUS, DJA.DEPTJOBACTIVITYSTARTDATE, DJA.DEPTJOBACTIVITYENDDATE, " +
"DJA.FINANCIALCLOSEDATE FROM DEPTJOBACTIVITY2 DJA JOIN ACTIVITYTEMPLATE T on DJA.ACTIVITYTEMPLATEID = T.ACTIVITYTEMPLATEID " +
"WHERE DJA.DEPTJOBACTIVITYFETCH = 'Y' AND DJA.JOBID = " + jobId.toString(),
fields, 0, null);
arrActivities = ChronicleApplication.getInstance().getDAOSession().getDeptJobActivityDao().queryBuilder().where(com.gochronicle.chronicle.dao.DeptJobActivityDao.Properties.JobID.eq (jobId)).list();
return arrActivities;
}
public List<DeptJobActivity> getActiveActivities (Context context, Long jobId)
{
List<DeptJobActivity> arrActivities = ChronicleApplication.getInstance().getDAOSession().getDeptJobActivityDao().queryBuilder().where(com.gochronicle.chronicle.dao.DeptJobActivityDao.Properties.JobID.eq (jobId)).list();
if (arrActivities.size() > 0)
{
List<DeptJobActivity> arrActiveActivities = new ArrayList<DeptJobActivity>();
for (DeptJobActivity deptJobActivity : arrActivities)
{
if (deptJobActivity.getDeptJobActivityStatus().compareToIgnoreCase("ACTIVE") == 0)
{
arrActiveActivities.add(deptJobActivity);
}
}
return arrActiveActivities;
}
ArrayList<String> fields = new ArrayList<String>();
fields.add("DeptJobActivityID");
fields.add("EstimatedDays");
fields.add("ActivityID");
fields.add("DepartmentID");
fields.add("JobID");
fields.add("ActivityLastModifiedBy");
fields.add("DeptJobActivityName");
fields.add("DeptJobActivityStatus");
fields.add("DeptJobActivityStartDate");
fields.add("DeptJobActivityEndDate");
fields.add("FinancialCloseDate");
DataTable persons = processRequest(context, "DeptJobActivity",
"SELECT DJA.DEPTJOBACTIVITYID, T.ESTIMATEDDAYS, DJA.ACTIVITYID, DJA.DEPARTMENTID, DJA.JOBID, DJA.ACTIVITYLASTMODIFIEDBY, " +
"DJA.DEPTJOBACTIVITYNAME, DJA.DEPTJOBACTIVITYSTATUS, DJA.DEPTJOBACTIVITYSTARTDATE, DJA.DEPTJOBACTIVITYENDDATE, " +
"DJA.FINANCIALCLOSEDATE FROM DEPTJOBACTIVITY2 DJA JOIN ACTIVITYTEMPLATE T on DJA.ACTIVITYTEMPLATEID = T.ACTIVITYTEMPLATEID " +
"WHERE DJA.DEPTJOBACTIVITYFETCH = 'Y' AND DJA.JOBID = " + jobId.toString(),
fields, 0, null);
arrActivities = ChronicleApplication.getInstance().getDAOSession().getDeptJobActivityDao().queryBuilder().where(com.gochronicle.chronicle.dao.DeptJobActivityDao.Properties.JobID.eq (jobId)).list();
List<DeptJobActivity> arrActiveActivities = new ArrayList<DeptJobActivity>();
for (DeptJobActivity deptJobActivity : arrActivities)
{
if (deptJobActivity.getDeptJobActivityStatus().compareToIgnoreCase("ACTIVE") == 0)
{
arrActiveActivities.add(deptJobActivity);
}
}
return arrActiveActivities;
}
public OrganizationAddress getOrganizationAddress(Context context, String organizationID, String addressID)
{
List<OrganizationAddress> arrOrganizations = ChronicleApplication.getInstance().getDAOSession().getOrganizationAddressDao().queryBuilder().where(com.gochronicle.chronicle.dao.OrganizationAddressDao.Properties.OrganizationID.eq (organizationID),
com.gochronicle.chronicle.dao.OrganizationAddressDao.Properties.AddressID.eq (addressID)).list();
if (arrOrganizations.size() > 0)
return arrOrganizations.get(0);
ArrayList<String> fields = new ArrayList<String>();
ArrayList<Integer> arrUniqueKeyComponentsIndex = new ArrayList<Integer>();
fields.add("OrganizationAddressIdKey");
fields.add("OrganizationID");
fields.add("AddressID");
fields.add("OrganizationAddressID");
fields.add("OrgAddressFetch");
fields.add("OrgAddressDesc");
arrUniqueKeyComponentsIndex.clear();
arrUniqueKeyComponentsIndex.add(0);//the unique key is composed out of jobId, organizationId, AddressId
arrUniqueKeyComponentsIndex.add(1);
DataTable organizationAddress = processRequest(context, "OrganizationAddress",
"SELECT ORGANIZATIONID, ADDRESSID, ORGANIZATIONADDRESSID, ORGADDRESSFETCH, ORGADDRESSDESC FROM ORGANIZATIONADDRESS WHERE ORGANIZATIONID = " + organizationID +
" AND ADDRESSID = " + addressID,
fields, 0, arrUniqueKeyComponentsIndex);
arrOrganizations = ChronicleApplication.getInstance().getDAOSession().getOrganizationAddressDao().queryBuilder().where(com.gochronicle.chronicle.dao.OrganizationAddressDao.Properties.OrganizationID.eq (organizationID),
com.gochronicle.chronicle.dao.OrganizationAddressDao.Properties.AddressID.eq (addressID)).list();
if (arrOrganizations.size() > 0)
return arrOrganizations.get(0);
return null;
}
public List<Journal> getJournals (Context context, Long journalHeaderId)
{
ArrayList<String> fields = new ArrayList<String>();
fields.add("JournalID");
fields.add("JournalHeaderID");
fields.add("JournalEntryDate");
fields.add("SystemTypeID");
fields.add("PersonID");
fields.add("JournalMemo");
DataTable persons = processRequest(context, "Journal",
"SELECT JOURNALID, JOURNALHEADERID, JOURNALENTRYDATE, SYSTEMTYPEID, JOURNALCREATEUSER AS PERSONID, " +
"JOURNALMEMO FROM JOURNAL WHERE JOURNALHEADERID = " + journalHeaderId.toString(),
fields, 0, null);
List<Journal> arrJournals = ChronicleApplication.getInstance().getDAOSession().getJournalDao().queryBuilder().where(com.gochronicle.chronicle.dao.JournalDao.Properties.JournalHeaderID.eq (journalHeaderId)).list();
return arrJournals;
}
public String getCompanyName()
{
return companyName;
}
public static boolean isNumeric(String str)
{
return str.matches("-?\\d+(\\.\\d+)?"); //match a number with optional '-' and decimal.
}
public String getJobRole(Context context, Long jobID, Object entity)
{
Job job = getJob(context, jobID);
ArrayList<SystemType2> roles = new ArrayList <SystemType2>();
if (entity.getClass() == Person.class)
{
Person person = (Person) entity;
List<JobPerson> jobPersons = getJobsPerson(context, job.getJobID(), person.getPersonID());
for (JobPerson jobPerson : jobPersons) {
SystemType2 sytemtype = getSystemType2(context, jobPerson.getSystemType2ID());
if (sytemtype != null)
{
roles.add(sytemtype);
}
}
}
if (entity.getClass() == OrganizationAddress.class)
{
OrganizationAddress oa = (OrganizationAddress) entity;
List<JobOrganizationAddress> listJobOrganizationAddress = getJobOrganizationAddressesWithAll(context, Integer.valueOf(ChronicleApplication.getInstance().getSelectedJob().getJobID().toString()),
oa.getOrganizationID(), oa.getAddressID());
for (JobOrganizationAddress jobOrganizationAddress : listJobOrganizationAddress) {
SystemType2 sytemtype = getSystemType2(context, jobOrganizationAddress.getJobOrganizationRoleID());
if (sytemtype != null)
{
roles.add(sytemtype);
}
}
}
String roleText = "";
for (SystemType2 systemType : roles) {
if (roleText.length() > 0)
roleText = roleText + ", ";
roleText = roleText + systemType.getSystemType2Desc();
}
return roleText;
}
public List<Phone> getPhoneNumbers(Context context, Object entity)
{
ArrayList<Phone> phoneNumbers = new ArrayList<Phone>();
if (entity.getClass() == Person.class)
{
Person person = (Person) entity;
List<Phone> arrPhones = ChronicleApplication.getInstance().getDAOSession().getPhoneDao().queryBuilder().where(com.gochronicle.chronicle.dao.PhoneDao.Properties.PersonID.eq (person.getPersonID())).list();
if (arrPhones.size() > 0)
return arrPhones;
ArrayList<String> fields = new ArrayList<String>();
fields.add("CommunicationID");
fields.add("PersonID");
fields.add("PhoneDesc");
fields.add("PhoneNumber");
fields.add("PhoneTimeToCall");
fields.add("SystemTypeDesc");
processRequest(context, "Phone",
"select P.COMMUNICATIONID,PC.PERSONID, P.PHONEDESC, P.PHONENUMBER, P.PHONETIMETOCALL, S.SYSTEMTYPEDESC from PHONE P JOIN COMMUNICATIONS C on C.COMMUNICATIONID = P.COMMUNICATIONID " +
"JOIN SYSTEMTYPE S on C.SYSTEMTYPEID = S.SYSTEMTYPEID AND C.SYSTEMCATEGORYID = 75 JOIN PERSONCOMM PC ON P.COMMUNICATIONID = PC.COMMUNICATIONID WHERE PC.PERSONID = " + person.getPersonID() + " AND P.PHONENUMBER <> '( ) - '",
fields, 0, null);
arrPhones = ChronicleApplication.getInstance().getDAOSession().getPhoneDao().queryBuilder().where(com.gochronicle.chronicle.dao.PhoneDao.Properties.PersonID.eq (person.getPersonID())).list();
return arrPhones;
}
else if (entity.getClass() == OrganizationAddress.class)
{
OrganizationAddress oa = (OrganizationAddress) entity;
List<Phone> arrPhones = ChronicleApplication.getInstance().getDAOSession().getPhoneDao().queryBuilder().where(com.gochronicle.chronicle.dao.PhoneDao.Properties.OrganizationID.eq (oa.getOrganizationID()),
com.gochronicle.chronicle.dao.PhoneDao.Properties.AddressID.eq (oa.getAddressID())).list();
if (arrPhones.size() > 0)
return arrPhones;
ArrayList<String> fields = new ArrayList<String>();
fields.add("CommunicationID");
fields.add("PhoneDesc");
fields.add("PhoneNumber");
fields.add("PhoneTimeToCall");
fields.add("SystemTypeDesc");
fields.add("OrganizationID");
fields.add("AddressID");
processRequest(context, "Phone",
"select P.COMMUNICATIONID, P.PHONEDESC, P.PHONENUMBER, P.PHONETIMETOCALL, S.SYSTEMTYPEDESC, " +
"O.ORGANIZATIONID, O.ADDRESSID from PHONE P JOIN ORGANIZATIONADDRESSCOMM O ON P.COMMUNICATIONID = O.COMMUNICATIONID " +
"join COMMUNICATIONS C on C.COMMUNICATIONID = O.COMMUNICATIONID AND C.SYSTEMCATEGORYID = 75 join SYSTEMTYPE S on " +
"S.SYSTEMTYPEID = C.SYSTEMTYPEID WHERE O.ORGANIZATIONID = " + oa.getOrganizationID() + " AND O.ADDRESSID = " +
oa.getAddressID() + " AND P.PHONENUMBER <> '( ) - '",
fields, 0, null);
arrPhones = ChronicleApplication.getInstance().getDAOSession().getPhoneDao().queryBuilder().where(com.gochronicle.chronicle.dao.PhoneDao.Properties.OrganizationID.eq (oa.getOrganizationID()),
com.gochronicle.chronicle.dao.PhoneDao.Properties.AddressID.eq (oa.getAddressID())).list();
return arrPhones;
}
return phoneNumbers;
}
public boolean insertLaborRecord(final Context context, final CTILaborEntry laborEntry) {
//to be taken out new
LaborQueDao laborDao = ChronicleApplication.getInstance().getDAOSession().getLaborQueDao();
List<LaborQue> arrLaborQues = laborDao.queryBuilder().list();
final Handler handler = new Handler();
new Thread( new Runnable() {
@Override
public void run() {
try
{
String query = "select LABORQUEID, LABORQUESTARTTIME, LABORQUEENDTIME, LABORQUEHOURS, LABORQUEMINUTES, LABORQUECONTEXT, " +
"LABORQUECONTEXTID, LABORQUECONTEXTID2, LABORQUECONTEXTNAME, LABORFORID, LABORFORNAME, LABORBREAKTIME, " +
"LABORQUEBONUS, LABORQUECOMMENT, LABORQUECREATEDATE, LABORQUECREATEUSER, QUESTATUS, LABORQUEFETCH, " +
"DEPARTMENTID, ACTIVITYID FROM LABORQUE WHERE LABORQUECONTEXT = 'SOMEWILDCRAZYCONTEXT'";
DataTable dataTable = CTIDataAccces.getInstance().getDataTable(query, "LaborQue");
//DataRow row = ;
DataRow row = dataTable.addNewRow();
row.setField("LABORQUESTARTTIME", laborEntry.getLaborQueStartTime());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborQueStartTime());
row.setField("LABORQUEENDTIME", laborEntry.getLaborQueEndTime());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborQueEndTime());
row.setField("LABORQUEHOURS", laborEntry.getLaborQueHours());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborQueHours());
row.setField("LABORQUEMINUTES", laborEntry.getLaborQueMinutes());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborQueHours());
row.setField("LABORQUECONTEXT", laborEntry.getLaborQueContext());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborQueContext());
row.setField("LABORQUECONTEXTID", laborEntry.getLaborQueContextID());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborQueContextID());
row.setField("LABORQUECONTEXTID2", laborEntry.getLaborQueContextID2());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborQueContextID());
row.setField("LABORQUECONTEXTNAME", laborEntry.getLaborQueContextName());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborQueContextID());
row.setField("LABORFORID", laborEntry.getLaborForID());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborForID());
row.setField("LABORFORNAME", laborEntry.getLaborForName());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborForName());
row.setField("LABORBREAKTIME", laborEntry.getLaborBreakTime());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborBreakTime());
row.setField("LABORQUEBONUS", laborEntry.getLaborQueBonus());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborQueBonus());
row.setField("LABORQUECOMMENT", laborEntry.getLaborQueComment());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborQueComment());
row.setField("LABORQUECREATEDATE", laborEntry.getLaborCreateDate());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborCreateDate());
row.setField("LABORQUECREATEDATE", laborEntry.getLaborCreateUser());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborCreateUser());
row.setField("QUESTATUS", laborEntry.getQueStatus());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborCreateUser());
row.setField("LABORQUEFETCH", laborEntry.getLaborQueFetch());
Log.e ("Chronicle", "Avem" + laborEntry.getLaborQueFetch());
row.setField("DEPARTMENTID", laborEntry.getDepartmentID());
Log.e ("Chronicle", "Avem" + laborEntry.getDepartmentID());
row.setField("ACTIVITYID", laborEntry.getActivityID());
Log.e ("Chronicle", "Avem" + laborEntry.getActivityID());
dataTable.acceptChangesForRow(row);
handler.post(new Runnable() {
@Override
public void run() {
Toast.makeText(context,
"Stopped tracking labor for " + ChronicleApplication.getInstance().getLaborActivityDesc(), Toast.LENGTH_LONG).show();
}
});
}
catch (Exception e)
{
Log.e ("Chronicle", "Exception " + e.getLocalizedMessage());
}
}
} ).start();
return false;
}
boolean sendJournalMessage(final CTIJournalData journal) {
new Thread(new Runnable() {
@Override
public void run() {
try
{
journalService.getProxyMessage().getEnvelopes().put("AES", new AesEncryptionEnvelope(ConstantsUtils.AES_PASSWORD));
VariantArray userDetails = userInfo.getValue().getAttributes();
VariantType type = journalService.CreateJournal(journal.getJournalSubject(),
journal.getRecipientList(),
journal.getSysCategoryID1(),
journal.getSysCategoryID2(),
journal.getUserID(),
Integer.valueOf(journal.getDeptID().toString()),
Integer.valueOf(journal.getActivityID().toString()),
journal.getDeptDescription(),
journal.getSecurityLevel(),
journal.getAttachedDocs(),
journal.getPriority(),
journal.getAssociatedActivity(),
journal.getJournalPerson(),
journal.getJournalDoc(),
journal.getJournalTransmission(),
journal.getJournalAssignment(),
journal.getJournalTag(),
journal.getJournalMemo(),
journal.getCreateUserFullName(),
journal.getMacroid(),
journal.getSContext(),
Integer.valueOf(journal.getIDetail1().toString()),
null,
null,
null,
journal.getSConcerning(),
journal.getSFaxCover(),
journal.getBTransmit(),
journal.getJournalHeaderAccess(),
VariantType.nullVariant(), /* vParams*/
journal.getBinDocumentList());
}
catch (Exception e)
{
Log.e ("Chronicle", "Exception CTIDataAcess:sendJournalMessage" + e.getLocalizedMessage());
}
}
}).start();
return true;
}
}
The problem is with “journalService.CreateJournal”