/*************************************************************************************
* Product: SFAndroid (Sales Force Mobile) *
* This program is free software; you can redistribute it and/or modify it *
* under the terms version 2 of the GNU General Public License as published *
* by the Free Software Foundation. This program is distributed in the hope *
* that it will be useful, but WITHOUT ANY WARRANTY; without even the implied *
* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. *
* See the GNU General Public License for more details. *
* You should have received a copy of the GNU General Public License along *
* with this program; if not, write to the Free Software Foundation, Inc., *
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. *
* For the text or an alternative of this public license, you may reach us *
* Copyright (C) 2012-2014 E.R.P. Consultores y Asociados, S.A. All Rights Reserved. *
* Contributor(s): Yamel Senih www.erpconsultoresyasociados.com *
*************************************************************************************/
package org.spinsuite.view;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.logging.Level;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
import org.spinsuite.adapters.ReportAdapter;
import org.spinsuite.adapters.ReportExportMenuAdapter;
import org.spinsuite.adapters.SearchAdapter;
import org.spinsuite.base.DB;
import org.spinsuite.base.R;
import org.spinsuite.process.InfoPara;
import org.spinsuite.process.ProcessCtl;
import org.spinsuite.process.ProcessInfo;
import org.spinsuite.process.ProcessInfoLog;
import org.spinsuite.process.ProcessInfoParameter;
import org.spinsuite.util.ActivityParameter;
import org.spinsuite.util.DisplayMenuItem;
import org.spinsuite.util.DisplayRecordItem;
import org.spinsuite.util.DisplayType;
import org.spinsuite.util.KeyNamePair;
import org.spinsuite.util.LogM;
import org.spinsuite.util.Msg;
import org.spinsuite.util.ViewIndex;
import org.spinsuite.view.lookup.InfoField;
import org.spinsuite.view.lookup.VLookup;
import org.spinsuite.view.lookup.VLookupCheckBox;
import org.spinsuite.view.lookup.VLookupDateBox;
import org.spinsuite.view.lookup.VLookupSearch;
import org.spinsuite.view.lookup.VLookupSpinner;
import org.spinsuite.view.lookup.VLookupString;
import org.spinsuite.view.report.ReportPrintData;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Color;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.view.GravityCompat;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v4.widget.SearchViewCompat;
import android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat;
import android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat;
import android.text.TextUtils;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.ListView;
import android.widget.PopupMenu;
import android.widget.ScrollView;
import android.widget.TableLayout;
import android.widget.TextView;
import com.itextpdf.text.DocumentException;
/**
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a>
*
*/
public class V_Process extends FragmentActivity {
/** Adapter */
private SearchAdapter logAdapter = null;
/** Report Adapter */
private ReportAdapter reportAdapter = null;
/** Field */
private InfoField m_field = null;
/** View Index Array */
private ArrayList<ViewIndex> viewList = null;
/** Parameter */
private ActivityParameter m_activityParam = null;
/** Process Info */
private ProcessInfo m_pInfo = null;
/** Process Control */
private ProcessCtl m_pControl = null;
/** Row */
private LinearLayout v_row = null;
/** Header Report */
private LinearLayout ll_HeaderReport = null;
/** Process Parameters */
private LinearLayout ll_ProcessPara = null;
/** Main Layout */
private ScrollView sv_Param = null;
/** List View */
private ListView lv_LogReport = null;
/** Row Parameter */
private LayoutParams v_rowParam = null;
/** Table Layout */
private TableLayout v_tableLayout = null;
/** Text Description */
private TextView tv_Description = null;
/** Text Help */
private TextView tv_Help = null;
/** Text Summary */
private TextView tv_Summary = null;
/** Item Search */
private MenuItem iSearch = null;
/** Item Print Format */
private MenuItem iPrintFormat = null;
/** Item Process */
private MenuItem iProcess = null;
/** Print Format */
private KeyNamePair[] m_PrintFormats = null;
/** Popup Menu */
private PopupMenu pPrintFormat = null;
/** Is Loaded */
private boolean isLoaded = false;
/** Drawer Layout */
private DrawerLayout m_DLayout = null;
/** List View with options */
private ListView m_DList = null;
/** Toggle */
private ActionBarDrawerToggle m_DToggle = null;
/** Flag (Drawer Loaded) */
private boolean isDrawerLoaded = false;
/** View Weight */
private static final float WEIGHT_SUM = 2;
private static final float WEIGHT = 1;
/** Export */
private static final int SHARE_FOR = 0;
private static final int EXPORT_TO_PDF = 1;
private static final int EXPORT_TO_XLS = 2;
private static final int EXPORT_TO_XML = 3;
private static final int EXPORT_TO_HTML = 4;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
super.setContentView(R.layout.v_process);
// Get Field
Bundle bundle = getIntent().getExtras();
if(bundle != null){
m_field = (InfoField) bundle.getParcelable("Field");
m_activityParam = (ActivityParameter) bundle.getParcelable("Param");
}
//
if(m_field == null)
m_field = new InfoField();
//
if(m_activityParam == null)
m_activityParam = new ActivityParameter();
// Get Elements
ll_HeaderReport = (LinearLayout) findViewById(R.id.ll_HeaderReport);
ll_ProcessPara = (LinearLayout) findViewById(R.id.ll_ProcessPara);
tv_Description = (TextView) findViewById(R.id.tv_Description);
tv_Help = (TextView) findViewById(R.id.tv_Help);
sv_Param = (ScrollView) findViewById(R.id.sv_Param);
lv_LogReport = (ListView) findViewById(R.id.lv_LogReport);
// Set Parameter
v_rowParam = new LayoutParams(LayoutParams.MATCH_PARENT,
LayoutParams.MATCH_PARENT, WEIGHT);
// Table Layout
v_tableLayout = new TableLayout(this);
// Add View
sv_Param.addView(v_tableLayout);
//
viewList = new ArrayList<ViewIndex>();
// Title
getActionBar().setSubtitle(m_activityParam.getName());
getActionBar().setDisplayHomeAsUpEnabled(true);
getActionBar().setHomeButtonEnabled(true);
//
loadProcessInfo();
// Load Drawer
loadDrawerOption();
// Load Print Formats
loadPrintFormat();
}
/**
* Load Drawer
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 14/03/2014, 09:23:22
* @return void
*/
protected void loadDrawer(){
//
m_DLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
//
m_DList = (ListView) findViewById(R.id.left_drawer);
//
m_DLayout.setDrawerShadow(R.drawable.drawer_shadow, GravityCompat.START);
m_DList.setOnItemClickListener(new ListView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View arg1, int position,
long arg3) {
// Selected Option
onSelectedDrawerOption((DisplayMenuItem) adapter.getItemAtPosition(position));
}
});
m_DToggle = new ActionBarDrawerToggle(this, m_DLayout,
R.drawable.ic_drawer, R.string.drawer_open, R.string.drawer_close) {
public void onDrawerClosed(View view) {
invalidateOptionsMenu();
}
public void onDrawerOpened(View drawerView) {
invalidateOptionsMenu();
}
};
// Set Toggle
m_DLayout.setDrawerListener(m_DToggle);
//
isDrawerLoaded = true;
}
/**
* Share Report
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 03/04/2014, 14:42:18
* @param position
* @param printData
* @return void
*/
private void shareReport(int position, ReportPrintData printData){
// Path
String localPath = null;
String type = null;
try {
if(position == 0){
localPath = printData.createPDF();
type = "pdf";
} else if(position == 1){
localPath = printData.createXLS();
type = "excel";
}
//
if(localPath != null) {
// Share
Uri sourceUri = Uri.fromFile(new File(localPath));
//
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_STREAM, sourceUri);
shareIntent.putExtra(Intent.EXTRA_SUBJECT, getResources().getText(R.string.msg_Report)
+ " \"" + printData.getInfoReport().getName() + "\"");
shareIntent.putExtra(Intent.EXTRA_TEXT, getString(R.string.msg_SharedFromSFAndroid));
//
shareIntent.setType("application/" + type);
//
startActivity(Intent.createChooser(shareIntent,
getResources().getText(R.string.Action_Share)));
}
} catch (Exception e) {}
}
/**
* On Selected Item
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 31/03/2014, 22:13:32
* @param item
* @return void
*/
protected void onSelectedDrawerOption(DisplayMenuItem item){
final ReportPrintData printData = m_pControl.getReportPrintData();
if(printData == null
|| !isLoaded)
return;
// Message
String msg = null;
// Path
String path = null;
//
if(item.getSFA_Menu_ID() == SHARE_FOR){
new AlertDialog.Builder(this)
.setSingleChoiceItems(new String[]{
getString(R.string.msg_SendAsPDF),
getString(R.string.msg_SendAsXLS)
}, 0, null)
.setPositiveButton(R.string.msg_Acept, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
dialog.dismiss();
int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition();
// Share Report
shareReport(selectedPosition, printData);
}
}).show();
} else if(item.getSFA_Menu_ID() == EXPORT_TO_PDF){
try {
path = printData.createPDF();
} catch (FileNotFoundException e) {
LogM.log(getApplicationContext(), getClass(),
Level.SEVERE, "Error in Export to PDF:", e);
msg = getResources().getString(R.string.msg_FileNotFoundException)
+ " " + e.getMessage();
} catch (DocumentException e) {
LogM.log(getApplicationContext(), getClass(),
Level.SEVERE, "Error in Export to PDF:", e);
msg = getResources().getString(R.string.msg_DocumentException)
+ " " + e.getMessage();
}
} else if(item.getSFA_Menu_ID() == EXPORT_TO_XLS){
try {
path = printData.createXLS();
} catch (RowsExceededException e) {
LogM.log(getApplicationContext(), getClass(),
Level.SEVERE, "Error in Export to XLS:", e);
msg = getResources().getString(R.string.msg_RowsExceededException)
+ " " + e.getMessage();
} catch (WriteException e) {
LogM.log(getApplicationContext(), getClass(),
Level.SEVERE, "Error in Export to XLS:", e);
msg = getResources().getString(R.string.msg_WriteException)
+ " " + e.getMessage();
} catch (IOException e) {
LogM.log(getApplicationContext(), getClass(),
Level.SEVERE, "Error in Export to XLS:", e);
msg = getResources().getString(R.string.msg_IOException)
+ " " + e.getMessage();
}
} else if(item.getSFA_Menu_ID() == EXPORT_TO_XML){
} else if(item.getSFA_Menu_ID() == EXPORT_TO_HTML){
}
// Show Path
if(path != null){
// Message
Msg.toastMsg(getApplicationContext(),
getResources().getString(R.string.msg_Exported)
+ "... " + getResources().getString(R.string.msg_Path)
+ " \"" + path + "\"");
} else if(msg != null){ // Show Message
Msg.alertMsg(this, getResources().getString(R.string.msg_Error), msg);
}
// Close Drawer
m_DLayout.closeDrawer(m_DList);
}
/**
* Load Drawer Option
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 14/03/2014, 17:45:08
* @return void
*/
private void loadDrawerOption(){
loadDrawer();
// Populate
ArrayList<DisplayMenuItem> listMenu = new ArrayList<DisplayMenuItem>();
listMenu.add(new DisplayMenuItem(SHARE_FOR, getResources().getString(R.string.Action_Share), null, "share_m"));
listMenu.add(new DisplayMenuItem(EXPORT_TO_PDF, getResources().getString(R.string.Action_Export_PDF), null, "pdf_m"));
listMenu.add(new DisplayMenuItem(EXPORT_TO_XLS, getResources().getString(R.string.Action_Export_XLS), null, "xls_m"));
listMenu.add(new DisplayMenuItem(EXPORT_TO_XML, getResources().getString(R.string.Action_Export_XML), null, "xml_m"));
listMenu.add(new DisplayMenuItem(EXPORT_TO_HTML, getResources().getString(R.string.Action_Export_HTML), null, "html_m"));
// Set Adapter
ReportExportMenuAdapter mi_adapter = new ReportExportMenuAdapter(this, R.layout.i_activity_menu, true, listMenu);
mi_adapter.setDropDownViewResource(R.layout.i_activity_menu);
m_DList.setAdapter(mi_adapter);
}
@Override
public boolean onPrepareOptionsMenu(Menu menu) {
if(isDrawerLoaded){
boolean drawerOpen = m_DLayout.isDrawerOpen(m_DList);
if(drawerOpen)
menu.setGroupVisible(R.id.group_process, false);
else {
if(isLoaded){
// Show Search Menu
if((logAdapter != null
&& !m_pInfo.isReport())
|| (reportAdapter != null
&& m_pInfo.isReport()))
iSearch.setVisible(true);
if(m_pInfo.isReport()){
iPrintFormat.setVisible(true);
}
}
// Visible Process
iProcess.setVisible(true);
}
}
return super.onPrepareOptionsMenu(menu);
}
/**
* Is Drawer Layout Open
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 16/03/2014, 10:32:25
* @return
* @return boolean
*/
protected boolean isDrawerLayoutOpen(){
if(isDrawerLoaded)
return m_DLayout.isDrawerOpen(m_DList);
return false;
}
/**
* Get Drawer List
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 14/03/2014, 17:43:59
* @return
* @return ListView
*/
protected ListView getDrawerList(){
return m_DList;
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
if(isDrawerLoaded)
m_DToggle.syncState();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
if(isDrawerLoaded)
m_DToggle.onConfigurationChanged(newConfig);
}
/**
* Load Process Information
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 18/03/2014, 22:07:43
* @return void
*/
private void loadProcessInfo(){
// Instance Process
m_pInfo = new ProcessInfo(getApplicationContext(), m_activityParam, null);
// Set Description
String info = m_pInfo.getDescription();
if(info != null
&& info.length() > 0){
// Set Info
tv_Description.setText(info);
tv_Description.setVisibility(TextView.VISIBLE);
}
// Set Help
info = m_pInfo.getHelp();
if(info != null
&& info.length() > 0){
// Set Info
tv_Help.setText(info);
tv_Help.setVisibility(TextView.VISIBLE);
}
// Get for Load
InfoPara[] infoPara = m_pInfo.getProcessInfoPara();
if(infoPara != null){
// Add Fields
for(InfoPara pField : infoPara){
// Add View to Layout
InfoField field = new InfoField(pField);
//
addView(field);
// Add To Parameter
if(pField.IsRange){
InfoField field_To = new InfoField(pField);
field_To.ColumnName = field.ColumnName + "_To";
field_To.IsSameLine = true;
field_To.DefaultValue = pField.DefaultValue2;
addView(field_To);
}
}
}
// Add Summary Text
v_row = new LinearLayout(this);
v_row.setOrientation(LinearLayout.HORIZONTAL);
v_row.setWeightSum(WEIGHT_SUM);
//
tv_Summary = new TextView(this);
tv_Summary.setVisibility(TextView.GONE);
v_row.addView(tv_Summary, v_rowParam);
v_tableLayout.addView(v_row);
// Instance Process Control
m_pControl = new ProcessCtl(m_pInfo);
}
/**
* Add View to Process Panel
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 18/03/2014, 22:10:08
* @param field
* @return void
*/
private void addView(InfoField field){
boolean isSameLine = field.IsSameLine;
boolean isFirst = false;
// Add New Row
if(isFirst = (v_row == null)
|| !isSameLine) {
v_row = new LinearLayout(this);
v_row.setOrientation(LinearLayout.HORIZONTAL);
v_row.setWeightSum(WEIGHT_SUM);
}
VLookup lookup = null;
// Add
if(DisplayType.isDate(field.DisplayType)){
lookup = new VLookupDateBox(this, field);
} else if(DisplayType.isText(field.DisplayType)){
VLookupString lookupString = new VLookupString(this, field);
lookupString.setInputType(DisplayType.getInputType(field.DisplayType));
lookup = lookupString;
} else if(DisplayType.isBoolean(field.DisplayType)){
lookup = new VLookupCheckBox(this, field);
} else if(DisplayType.isLookup(field.DisplayType)){
// Table Direct
if(field.DisplayType == DisplayType.TABLE_DIR){
lookup = new VLookupSpinner(this, field);
} else if(field.DisplayType == DisplayType.SEARCH){
lookup = new VLookupSearch(this, field);
}
}
// is Filled
if(lookup != null){
lookup.setLayoutParams(v_rowParam);
ViewIndex index = new ViewIndex(lookup, field.ColumnName);
viewList.add(index);
v_row.addView(lookup);
// Add Row
if(!isSameLine
|| isFirst)
v_tableLayout.addView(v_row);
}
}
/**
* Get Values from Parameters
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 21/03/2014, 17:05:03
* @return
* @return boolean
*/
private boolean getValuesFromParameters(){
boolean ok = true;
// Parameters
ArrayList<ProcessInfoParameter> arrayParameter = new ArrayList<ProcessInfoParameter>();
//
ProcessInfoParameter parameter = null;
m_pInfo.setParameter(null);
// Get Values
for (ViewIndex vIndex: viewList) {
VLookup lookup = vIndex.getVLookup();
InfoField field = lookup.getField();
if((field.IsMandatory)
&& lookup.isEmpty()){
Msg.alertMustFillField(this, field.Name, lookup.getChildView());
// set ok to false
ok = false;
break;
}
// Get Value
Object value = DisplayType.getJDBC_Value(field.DisplayType, lookup.getValue(), true, true);
if(!field.IsSameLine) {
parameter = new ProcessInfoParameter(field.ColumnName,
value, field.Name, lookup.getDisplayValue(), field.DisplayType);
} else {
if(parameter != null){
parameter.setParameter_To(value);
parameter.setInfo_To(field.Name);
}
}
// Add to Array
arrayParameter.add(parameter);
// Set on Context
}
// Populate array
ProcessInfoParameter[] param = new ProcessInfoParameter[arrayParameter.size()];
arrayParameter.toArray(param);
//
m_pInfo.setParameter(param);
// Return
return ok;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
// Inflate menu
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.process, menu);
// Get Item
iSearch = menu.findItem(R.id.action_search);
// Print Format
iPrintFormat = menu.findItem(R.id.action_print_format);
// Process
iProcess = menu.findItem(R.id.action_process);
// Search View
final View searchView = SearchViewCompat.newSearchView(this);
if (searchView != null) {
// Set Back ground Color
int id = searchView.getContext().getResources()
.getIdentifier("android:id/search_src_text", null, null);
EditText searchText = (EditText) searchView.findViewById(id);
// Set Parameters
if(searchText != null)
searchText.setTextAppearance(this, R.style.TextSearch);
//
SearchViewCompat.setOnQueryTextListener(searchView,
new OnQueryTextListenerCompat() {
@Override
public boolean onQueryTextChange(String newText) {
String mFilter = !TextUtils.isEmpty(newText) ? newText : null;
// Search
searchLinstView(mFilter);
return true;
}
});
SearchViewCompat.setOnCloseListener(searchView,
new OnCloseListenerCompat() {
@Override
public boolean onClose() {
if (!TextUtils.isEmpty(SearchViewCompat.getQuery(searchView))) {
SearchViewCompat.setQuery(searchView, null, true);
}
return true;
}
});
MenuItemCompat.setActionView(iSearch, searchView);
// Set Visible
iSearch.setVisible(false);
iPrintFormat.setVisible(false);
}
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if(isDrawerLoaded) {
if (m_DToggle.onOptionsItemSelected(item)) {
return true;
}
}
//
switch (item.getItemId()) {
case R.id.action_process:
if(isLoaded){
ll_ProcessPara.setVisibility(ScrollView.VISIBLE);
item.setIcon(R.drawable.process_m);
if(m_pInfo.isReport()){
iSearch.setVisible(false);
iPrintFormat.setVisible(false);
}
//
isLoaded = false;
return true;
}
// Run Process
if(!getValuesFromParameters())
return false;
m_pControl.runProcess();
tv_Summary.setTextAppearance(this, R.style.TextStandard);
tv_Summary.setVisibility(TextView.VISIBLE);
// If Error
if(m_pInfo.isError())
tv_Summary.setTextColor(Color.RED);
else
tv_Summary.setTextColor(Color.BLUE);
// Set Summary
tv_Summary.setText(m_pInfo.getSummary());
// Show all logs
if(!m_pInfo.isReport()
|| m_pInfo.isError())
showLog();
// Show report
else if(m_pInfo.isReport()){
iSearch.setVisible(true);
iPrintFormat.setVisible(true);
ll_HeaderReport.setVisibility(LinearLayout.VISIBLE);
showReport(0);
}
// Hide Parameter
if(!m_pInfo.isError()){
ll_ProcessPara.setVisibility(ScrollView.GONE);
item.setIcon(R.drawable.config_m);
// Set Is Loaded
isLoaded = true;
}
return true;
case R.id.action_print_format:
showPrintFormat();
return true;
}
return super.onOptionsItemSelected(item);
}
/**
* Load Print Format
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 31/03/2014, 11:29:18
* @return
*/
private void loadPrintFormat(){
String sql = new String("SELECT pf.AD_PrintFormat_ID, pf.Name " +
"FROM AD_PrintFormat pf " +
"WHERE pf.IsActive = ? " +
"AND EXISTS(SELECT 1 " +
" FROM AD_Process p " +
" LEFT JOIN AD_ReportView rv ON(rv.AD_ReportView_ID = p.AD_ReportView_ID) " +
" LEFT JOIN AD_PrintFormat pft ON(pft.AD_PrintFormat_ID = p.AD_PrintFormat_ID) " +
" WHERE p.AD_Process_ID = ? " +
" AND pf.SFA_Table_ID = COALESCE(rv.SFA_Table_ID, pft.SFA_Table_ID)) " +
"ORDER BY IsDefault DESC");
m_PrintFormats = DB.getKeyNamePairs(getApplicationContext(),
sql, new String[]{"Y", String.valueOf(m_pInfo.getAD_Process_ID())});
}
/**
* Show Print Formats
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 31/03/2014, 11:57:26
* @return void
*/
private void showPrintFormat(){
View menuItemView = findViewById(R.id.action_print_format);
pPrintFormat = new PopupMenu(this, menuItemView);
for(KeyNamePair pFormat: m_PrintFormats){
pPrintFormat.getMenu().add(Menu.NONE, pFormat.getKey(),
Menu.NONE, pFormat.getName());
}
// Listener
pPrintFormat.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int m_AD_PrintFormatItem_ID = item.getItemId();
if(isLoaded){
showReport(m_AD_PrintFormatItem_ID);
}
return false;
}
});
// Show
pPrintFormat.show();
}
/**
* Show Process Log
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 21/03/2014, 18:28:06
* @return void
*/
private void showLog(){
ArrayList<DisplayRecordItem> data = new ArrayList<DisplayRecordItem>();
SimpleDateFormat formatDate = DisplayType.getDateFormat(getApplicationContext());
// Get Logs
ProcessInfoLog[] logs = m_pInfo.getLogs();
if(logs != null){
for(ProcessInfoLog log : m_pInfo.getLogs()){
String strLog = log.getP_Msg();
// Add Date
if(log.getP_Date() != null)
strLog += " | " + formatDate.format(log.getP_Date());
// Number
if(log.getP_Number() != null)
strLog += " | " + log.getP_Number().doubleValue();
// Add to array
data.add(new DisplayRecordItem(log.getLog_ID(), strLog.toString()));
}
}
// Set Adapter
logAdapter = new SearchAdapter(this, R.layout.i_search, data);
logAdapter.setDropDownViewResource(R.layout.i_search);
lv_LogReport.setAdapter(logAdapter);
}
/**
* Show report from data
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 25/03/2014, 20:52:23
* @param m_AD_PrintFormat_ID
* @return void
*/
private void showReport(int m_AD_PrintFormat_ID){
// Get Print Data
ReportPrintData printData = m_pControl.getReportPrintData(m_AD_PrintFormat_ID);
if(printData != null){
//
reportAdapter = new ReportAdapter(getApplicationContext(),
printData.getData(), printData.getColumns(), ll_HeaderReport);
lv_LogReport.setAdapter(reportAdapter);
}
}
/**
* Search in Adapters
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 27/03/2014, 16:35:46
* @param filter
* @return void
*/
private void searchLinstView(String filter){
if(!isLoaded)
return;
if(logAdapter != null
&& !m_pInfo.isReport()){
logAdapter.getFilter().filter(filter);
} else if(reportAdapter != null
&& m_pInfo.isReport()){
reportAdapter.getFilter().filter(filter);
}
}
/**
* On Selected Record
* @author <a href="mailto:yamelsenih@gmail.com">Yamel Senih</a> 01/03/2014, 13:23:17
* @param item
* @return void
*/
/*private void selectedRecord(DisplayRecordItem item){
Intent intent = getIntent();
Bundle bundle = new Bundle();
bundle.putParcelable("Record", item);
bundle.putString("ColumnName", m_field.ColumnName);
intent.putExtras(bundle);
setResult(Activity.RESULT_OK, intent);
finish();
}*/
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK) {
if(data != null){
Bundle bundle = data.getExtras();
DisplayRecordItem item = (DisplayRecordItem) bundle.getParcelable("Record");
String columnName = bundle.getString("ColumnName");
// if a field or just search
if(columnName != null){
for (ViewIndex vIndex: viewList) {
VLookup lookup = vIndex.getVLookup();
if(vIndex.getColumnName().equals(columnName)){
((VLookupSearch) lookup).setItem(item);
break;
}
}
}
}
}
}
}