/**
* Odoo, Open Source Management Solution
* Copyright (C) 2012-today Odoo SA (<http:www.odoo.com>)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version
*
* 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 Affero General Public License for more details
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http:www.gnu.org/licenses/>
*
* Created on 13/1/15 3:40 PM
*/
package com.odoo.addons.crm;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
import com.odoo.App;
import com.odoo.addons.crm.models.CRMCaseStage;
import com.odoo.addons.crm.models.CRMLead;
import com.odoo.addons.customers.Customers;
import com.odoo.addons.sale.models.SaleOrder;
import com.odoo.base.addons.res.ResCompany;
import com.odoo.base.addons.res.ResUsers;
import com.odoo.core.orm.ODataRow;
import com.odoo.core.orm.OModel;
import com.odoo.core.orm.OValues;
import com.odoo.core.orm.fields.OColumn;
import com.odoo.core.support.sync.SyncUtils;
import com.odoo.core.utils.OActionBarUtils;
import com.odoo.core.utils.OAlert;
import com.odoo.core.utils.ODateUtils;
import com.odoo.core.utils.OResource;
import com.odoo.core.utils.StringUtils;
import com.odoo.R;
import java.util.ArrayList;
import java.util.List;
import odoo.controls.OForm;
public class CRMDetail extends ActionBarActivity {
public static final String TAG = CRMDetail.class.getSimpleName();
public static final int REQUEST_CONVERT_TO_OPPORTUNITY_WIZARD = 1223;
public static final int REQUEST_CONVERT_TO_QUOTATION_WIZARD = 1224;
private Bundle extra;
private OForm mForm;
private ODataRow record;
private CRMLead crmLead;
private ActionBar actionBar;
private Menu menu;
private String wonLost = "won";
private String type = "lead";
private TextView currency_symbol;
private int stage_id = -1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.crm_detail);
OActionBarUtils.setActionBar(this, true);
actionBar = getSupportActionBar();
crmLead = new CRMLead(this, null);
extra = getIntent().getExtras();
init();
}
private void init() {
mForm = (OForm) findViewById(R.id.crmLeadForm);
currency_symbol = (TextView) findViewById(R.id.currency_symbol);
if (!extra.containsKey(OColumn.ROW_ID)) {
if (extra.getString("type").equals(Customers.Type.Opportunities.toString())) {
type = "opportunity";
findViewById(R.id.opportunity_controls).setVisibility(View.VISIBLE);
}
if (extra.containsKey("stage_id")) {
stage_id = extra.getInt("stage_id");
}
mForm.initForm(null);
actionBar.setTitle(R.string.label_tag_new);
actionBar.setHomeAsUpIndicator(R.drawable.ic_action_navigation_close);
ODataRow currency = ResCompany.getCurrency(this);
if (currency != null) {
currency_symbol.setText(currency.getString("symbol"));
}
} else {
initFormValues();
}
mForm.setEditable(true);
}
private void initFormValues() {
record = crmLead.browse(extra.getInt(OColumn.ROW_ID));
if (record == null) {
finish();
}
ODataRow currency = record.getM2ORecord("company_currency").browse();
if (currency != null) {
currency_symbol.setText(currency.getString("symbol"));
}
if (!record.getString("type").equals("lead")) {
actionBar.setTitle(R.string.label_opportunity);
type = "opportunity";
findViewById(R.id.opportunity_controls).setVisibility(View.VISIBLE);
} else {
actionBar.setTitle(R.string.label_lead);
}
mForm.initForm(record);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_lead_detail, menu);
this.menu = menu;
toggleMenu();
return true;
}
private void toggleMenu() {
if (!extra.containsKey(OColumn.ROW_ID)) {
menu.findItem(R.id.menu_lead_detail_more).setVisible(false);
} else {
initFormValues();
menu.findItem(R.id.menu_lead_detail_more).setVisible(true);
if (record.getString("type").equals(CRMLead.KEY_LEAD)) {
menu.findItem(R.id.menu_lead_convert_to_quotation).setVisible(false);
menu.findItem(R.id.menu_mark_won).setVisible(false);
} else if (record.getString("type").equals(crmLead.KEY_OPPORTUNITY)) {
menu.findItem(R.id.menu_lead_convert_to_opportunity).setVisible(false);
}
}
menu.findItem(R.id.menu_lead_save).setVisible(true);
actionBar.setHomeAsUpIndicator(R.drawable.ic_action_navigation_close);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
App app = (App) getApplicationContext();
switch (item.getItemId()) {
case android.R.id.home:
finish();
break;
case R.id.menu_lead_save:
OValues values = mForm.getValues();
if (stage_id != OModel.INVALID_ROW_ID) {
values.put("stage_id", stage_id);
}
if (values != null) {
values.put("type", type);
int row_id;
if (record != null) {
crmLead.update(record.getInt(OColumn.ROW_ID), values);
row_id = record.getInt(OColumn.ROW_ID);
} else {
values.put("company_id", ResCompany.myId(this));
values.put("company_currency", ResCompany.myCurrency(this));
values.put("create_date", ODateUtils.getUTCDate());
values.put("user_id", ResUsers.myId(this));
CRMCaseStage stages = new CRMCaseStage(this, null);
ODataRow row;
if (!values.contains("stage_id")) {
row = stages.browse(new String[]{"name"}, "name = ?", new String[]{"New"});
} else {
row = stages.browse(stage_id);
}
if (row != null) {
values.put("stage_id", row.getInt(OColumn.ROW_ID));
values.put("stage_name", row.getString("name"));
}
values.put("display_name", values.getString("partner_name"));
values.put("assignee_name", crmLead.getUser().getName());
row_id = crmLead.insert(values);
}
crmLead.setReminder(row_id);
finish();
}
break;
case R.id.menu_lead_convert_to_opportunity:
if (record.getInt("id") == 0) {
OAlert.showWarning(this, OResource.string(this, R.string.label_sync_warning));
} else {
if (app.inNetwork()) {
int count = crmLead.count("id != ? and partner_id = ? and " + OColumn.ROW_ID + " != ?"
, new String[]{
"0",
record.getInt("partner_id") + "",
record.getString(OColumn.ROW_ID)
});
if (count > 0) {
Intent intent = new Intent(this, ConvertToOpportunityWizard.class);
intent.putExtras(record.getPrimaryBundleData());
startActivityForResult(intent, REQUEST_CONVERT_TO_OPPORTUNITY_WIZARD);
} else {
crmLead.convertToOpportunity(record, new ArrayList<Integer>(), convertDoneListener);
}
} else {
Toast.makeText(this, R.string.toast_network_required, Toast.LENGTH_LONG).show();
}
}
break;
case R.id.menu_mark_won:
if (app.inNetwork()) {
crmLead.markWonLost(wonLost, record, markDoneListener);
} else {
Toast.makeText(this, R.string.toast_network_required, Toast.LENGTH_LONG).show();
}
break;
case R.id.menu_mark_lost:
wonLost = "lost";
if (app.inNetwork()) {
crmLead.markWonLost(wonLost, record, markDoneListener);
} else {
Toast.makeText(this, R.string.toast_network_required, Toast.LENGTH_LONG).show();
}
break;
case R.id.menu_lead_convert_to_quotation:
if (app.inNetwork()) {
Intent intent = new Intent(this, ConvertToQuotation.class);
intent.putExtras(record.getPrimaryBundleData());
startActivityForResult(intent, REQUEST_CONVERT_TO_QUOTATION_WIZARD);
} else {
Toast.makeText(this, R.string.toast_network_required, Toast.LENGTH_LONG).show();
}
break;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CONVERT_TO_OPPORTUNITY_WIZARD && resultCode == RESULT_OK) {
List<Integer> ids = data.getIntegerArrayListExtra(ConvertToOpportunityWizard.KEY_LEADS_IDS);
crmLead.convertToOpportunity(record, ids, convertDoneListener);
}
if (requestCode == REQUEST_CONVERT_TO_QUOTATION_WIZARD && resultCode == Activity.RESULT_OK) {
crmLead.createQuotation(record, data.getStringExtra("partner_id"), data.getBooleanExtra("mark_won", false), createQuotationListener);
}
}
CRMLead.OnOperationSuccessListener createQuotationListener =
new CRMLead.OnOperationSuccessListener() {
@Override
public void OnSuccess() {
Toast.makeText(CRMDetail.this, OResource.string(CRMDetail.this,
R.string.label_quotation_created) + " " +
record.getString("name"), Toast.LENGTH_LONG).show();
SyncUtils sync = new SyncUtils(CRMDetail.this, crmLead.getUser());
sync.requestSync(SaleOrder.AUTHORITY);
}
@Override
public void OnCancelled() {
}
};
CRMLead.OnOperationSuccessListener markDoneListener = new CRMLead.OnOperationSuccessListener() {
@Override
public void OnSuccess() {
Toast.makeText(CRMDetail.this, StringUtils.capitalizeString(record.getString("type"))
+ " marked " + wonLost, Toast.LENGTH_LONG).show();
finish();
}
@Override
public void OnCancelled() {
}
};
CRMLead.OnOperationSuccessListener convertDoneListener = new CRMLead.OnOperationSuccessListener() {
@Override
public void OnSuccess() {
Toast.makeText(CRMDetail.this, R.string.label_convert_to_opportunity, Toast.LENGTH_LONG).show();
Intent intent = new Intent(CRMDetail.this, CRMDetail.class);
intent.putExtra(OColumn.ROW_ID, record.getInt(OColumn.ROW_ID));
startActivity(intent);
finish();
}
@Override
public void OnCancelled() {
}
};
}