Browse Source

提交类型 处理bug
提交内容 详情界面添加附件支持

Bitliker 7 years ago
parent
commit
d4075dc6d7
26 changed files with 803 additions and 150 deletions
  1. 3 3
      WeiChat/version.properties
  2. 1 0
      app_core/common/src/main/java/com/core/app/Constants.java
  3. 3 3
      app_core/common/src/main/java/com/core/utils/CommonUtil.java
  4. 10 7
      app_modular/apputils/src/main/java/com/modular/apputils/activity/BillDetailsActivity.java
  5. 24 12
      app_modular/apputils/src/main/java/com/modular/apputils/activity/BillListActivity.java
  6. 1 1
      app_modular/apputils/src/main/java/com/modular/apputils/adapter/BillAdapter.java
  7. 5 2
      app_modular/apputils/src/main/java/com/modular/apputils/adapter/BillListAdapter.java
  8. 79 38
      app_modular/apputils/src/main/java/com/modular/apputils/fragment/BIllListFragment.java
  9. 43 11
      app_modular/apputils/src/main/java/com/modular/apputils/model/BillListConfig.java
  10. 68 19
      app_modular/apputils/src/main/java/com/modular/apputils/model/BillListGroupModel.java
  11. 11 0
      app_modular/apputils/src/main/java/com/modular/apputils/presenter/BillDetailsPresenter.java
  12. 10 5
      app_modular/apputils/src/main/java/com/modular/apputils/presenter/BillPresenter.java
  13. 65 0
      app_modular/apputils/src/main/res/layout/activity_customer_contact_details.xml
  14. 0 0
      app_modular/apputils/src/main/res/menu/search.xml
  15. 8 1
      app_modular/appworks/src/main/AndroidManifest.xml
  16. 16 0
      app_modular/appworks/src/main/java/com/uas/appworks/activity/SchedulerCreateActivity.java
  17. 62 6
      app_modular/appworks/src/main/java/com/uas/appworks/adapter/CustomerBillInputAdapter.java
  18. 73 26
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/BillSearchActivity.java
  19. 60 1
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerBillInputActivity.java
  20. 7 2
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerCareListActivity.java
  21. 1 0
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerContactActivity.java
  22. 222 0
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerContactDetailActivity.java
  23. 1 1
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerDetails3_0Activity.java
  24. 16 4
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerManageActivity.java
  25. 5 2
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/CustomerDetailsBottomListFragment.java
  26. 9 6
      app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/CustomerListDetailsFragment.java

+ 3 - 3
WeiChat/version.properties

@@ -1,5 +1,5 @@
-#Thu Oct 11 08:52:06 CST 2018
+#Thu Oct 11 09:37:47 CST 2018
 debugName=850
-versionName=647
+versionName=648
 debugCode=850
-versionCode=187
+versionCode=188

+ 1 - 0
app_core/common/src/main/java/com/core/app/Constants.java

@@ -582,5 +582,6 @@ public class Constants {
         String INPUT_CLASS = "mInputClass";//进入编辑界面
         String LIST_CONDITION = "mListCondition";//列表Condition
         String DB_FIND_CONDITION = "dbfindCondition";//录入界面,dbfind字段添加的前提Condition
+        String BILL_LIST_FIELD_FORWARD = "Bill_List_Field_Forward";//录入界面,dbfind字段添加的前提Condition
     }
 }

+ 3 - 3
app_core/common/src/main/java/com/core/utils/CommonUtil.java

@@ -102,9 +102,9 @@ public class CommonUtil {
             ct=MyApplication.getInstance();
         }
         String baseUrl = getSharedPreferences(ct, "erp_baseurl");
-        if (BaseConfig.isDebug()){
-            baseUrl="http://192.168.253.243:8080/ERP/";
-        }
+//        if (BaseConfig.isDebug()){
+//            baseUrl="http://192.168.253.243:8080/ERP/";
+//        }
         return baseUrl;
     }
 

+ 10 - 7
app_modular/apputils/src/main/java/com/modular/apputils/activity/BillDetailsActivity.java

@@ -31,19 +31,23 @@ public class BillDetailsActivity extends OABaseActivity implements IBillDetails
     protected boolean isMe;//是否是自己的单据
 
 
+    public BillDetailsAdapter newBillDetailsAdapter(List<BillGroupModel> groupModels) {
+        return new BillDetailsAdapter(ct, groupModels);
+    }
 
-    public BillDetailsPresenter newBillDetailsPresenter(){
-        return  new BillDetailsPresenter(ct, this);
+    public BillDetailsPresenter newBillDetailsPresenter() {
+        return new BillDetailsPresenter(ct, this);
     }
 
-    public int getLayoutId(){
+    public int getLayoutId() {
         return R.layout.activity_bill_details;
     }
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(getLayoutId());
-        mBillDetailsPresenter =newBillDetailsPresenter();
+        mBillDetailsPresenter = newBillDetailsPresenter();
         Intent intent = getIntent();
         if (intent != null) {
             isMe = intent.getBooleanExtra(Constants.Intents.MY_DOIT, false);
@@ -54,14 +58,13 @@ public class BillDetailsActivity extends OABaseActivity implements IBillDetails
 
     @Override
     public boolean onCreateOptionsMenu(Menu menu) {
-        if (isMe&&(TextUtils.isEmpty(status) || !status.equals("已审核"))){
+        if (isMe && (TextUtils.isEmpty(status) || !status.equals("已审核"))) {
             getMenuInflater().inflate(R.menu.menu_input_edit, menu);
         }
         return super.onCreateOptionsMenu(menu);
     }
 
 
-
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         if (R.id.edit == item.getItemId()) {
@@ -99,7 +102,7 @@ public class BillDetailsActivity extends OABaseActivity implements IBillDetails
     @Override
     public void setAdapter(List<BillGroupModel> groupModels) {
         if (mBillDetailsAdapter == null) {
-            mBillDetailsAdapter = new BillDetailsAdapter(ct, groupModels);
+            mBillDetailsAdapter = newBillDetailsAdapter(groupModels);
             mRecyclerView.setAdapter(mBillDetailsAdapter);
         } else {
             mBillDetailsAdapter.updateGroupModels(groupModels);

+ 24 - 12
app_modular/apputils/src/main/java/com/modular/apputils/activity/BillListActivity.java

@@ -14,10 +14,12 @@ import com.core.app.Constants;
 import com.core.base.OABaseActivity;
 import com.modular.apputils.R;
 import com.modular.apputils.fragment.BIllListFragment;
+import com.modular.apputils.model.BillConfig;
 import com.modular.apputils.model.BillListConfig;
 import com.modular.apputils.model.BillListGroupModel;
 
 import java.io.Serializable;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 
@@ -80,7 +82,7 @@ public class BillListActivity extends OABaseActivity implements BIllListFragment
         @Override
         public Fragment getItem(int position) {
             BillListConfig billConfig = billListConfigList.get(position);
-            return BIllListFragment.newInstance(billConfig.isMe(),billConfig.getCaller(), billConfig.getCondition())
+            return BIllListFragment.newInstance(billConfig,mDetailsClass)
                     .setOnBillListListener(BillListActivity.this);
         }
 
@@ -100,29 +102,39 @@ public class BillListActivity extends OABaseActivity implements BIllListFragment
     }
 
     @Override
-    public void itemClick(boolean isMe,int id, String mCaller, String mCondition, BillListGroupModel.BillListField field) {
-        if (field.getStatus().equals("在录入")) {
+    public void itemClick(BillListConfig billConfig, int formId, BillListGroupModel mBillListGroupModel) {
+        if (mBillListGroupModel.getStatus().equals("在录入")) {
             startActivity(new Intent(ct, mInputClass != null ? mInputClass : BillInputActivity.class)
-                    .putExtra(Constants.Intents.CALLER, mCaller)
-                    .putExtra(Constants.Intents.MY_DOIT, isMe)
+                    .putExtra(Constants.Intents.CALLER, billConfig.getCaller())
+                    .putExtra(Constants.Intents.MY_DOIT, billConfig.isMe())
                     .putExtra(Constants.Intents.DB_FIND_CONDITION, dbfindCondition)
                     .putExtra(Constants.Intents.TITLE, getToolBarTitle())
-                    .putExtra(Constants.Intents.ID, field.getId()));
+                    .putExtra(Constants.Intents.ID, mBillListGroupModel.getId()));
         } else if (mDetailsClass != null) {
+            ArrayList<BillListGroupModel.BillListField> fields = new ArrayList<>();
+            if (billConfig.isNeedForward()) {
+                if (!ListUtils.isEmpty(mBillListGroupModel.getBillFields())) {
+                    fields.addAll(mBillListGroupModel.getBillFields());
+                }
+                if (!ListUtils.isEmpty(mBillListGroupModel.getHideBillFields())) {
+                    fields.addAll(mBillListGroupModel.getHideBillFields());
+                }
+            }
             startActivity(new Intent(ct, mDetailsClass)
-                    .putExtra(Constants.Intents.CALLER, mCaller)
+                    .putExtra(Constants.Intents.CALLER, billConfig.getCaller())
                     .putExtra(Constants.Intents.DB_FIND_CONDITION, dbfindCondition)
                     .putExtra(Constants.Intents.TITLE, getToolBarTitle())
-                    .putExtra(Constants.Intents.MY_DOIT, isMe)
+                    .putExtra(Constants.Intents.MY_DOIT, billConfig.isMe())
                     .putExtra(Constants.Intents.INPUT_CLASS, getToolBarTitle())
-                    .putExtra(Constants.Intents.ID, field.getId()));
+                    .putExtra(Constants.Intents.BILL_LIST_FIELD_FORWARD, fields)
+                    .putExtra(Constants.Intents.ID, mBillListGroupModel.getId()));
         } else {
             //进入通用详情界面
             startActivity(new Intent("com.modular.form.erp.activity.CommonDocDetailsActivity")
-                    .putExtra("caller",mCaller)
-                    .putExtra("keyValue", field.getId())
+                    .putExtra("caller", billConfig.getCaller())
+                    .putExtra("keyValue", mBillListGroupModel.getId())
                     .putExtra("update", "1")
-                    .putExtra(Constants.Intents.MY_DOIT, isMe)
+                    .putExtra(Constants.Intents.MY_DOIT, billConfig.isMe())
                     .putExtra("title", getToolBarTitle())
                     .putExtra("statusKey", "")
                     .putExtra("status", "已提交"));

+ 1 - 1
app_modular/apputils/src/main/java/com/modular/apputils/adapter/BillAdapter.java

@@ -443,7 +443,7 @@ public class BillAdapter extends RecyclerView.Adapter<BillAdapter.BaseViewHolder
     }
 
 
-    private class TextChangListener extends EditChangeListener {
+    public class TextChangListener extends EditChangeListener {
         EditText ed;
         private int position;
 

+ 5 - 2
app_modular/apputils/src/main/java/com/modular/apputils/adapter/BillListAdapter.java

@@ -97,13 +97,16 @@ public class BillListAdapter extends RecyclerView.Adapter<BillListAdapter.ViewHo
         public void onClick(View view) {
             if (view.getTag() != null && view.getTag() instanceof BillListGroupModel.BillListField) {
                 if (mOnAdapterListener != null) {
-                    mOnAdapterListener.onClick((BillListGroupModel.BillListField) view.getTag());
+                    BillListGroupModel.BillListField mBillListField = (BillListGroupModel.BillListField) view.getTag();
+                   if (mBillListField.getGroupIndex()>=0&&ListUtils.getSize(groupModels)>mBillListField.getGroupIndex()){
+                       mOnAdapterListener.onClick(groupModels.get(mBillListField.getGroupIndex()));
+                   }
                 }
             }
         }
     };
 
     public interface OnAdapterListener {
-        void onClick(BillListGroupModel.BillListField field);
+        void onClick(BillListGroupModel  mBillListGroupModel);
     }
 }

+ 79 - 38
app_modular/apputils/src/main/java/com/modular/apputils/fragment/BIllListFragment.java

@@ -5,6 +5,9 @@ import android.os.Bundle;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.text.TextUtils;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
 import android.view.View;
 
 import com.alibaba.fastjson.JSON;
@@ -21,6 +24,8 @@ import com.modular.apputils.R;
 import com.modular.apputils.activity.BillInputActivity;
 import com.modular.apputils.adapter.BillListAdapter;
 import com.modular.apputils.listener.OnSmartHttpListener;
+import com.modular.apputils.model.BillConfig;
+import com.modular.apputils.model.BillListConfig;
 import com.modular.apputils.model.BillListGroupModel;
 import com.modular.apputils.network.Parameter;
 import com.modular.apputils.network.Tags;
@@ -29,6 +34,7 @@ import com.module.recyclerlibrary.ui.refresh.BaseRefreshLayout;
 import com.module.recyclerlibrary.ui.refresh.EmptyRecyclerView;
 import com.module.recyclerlibrary.ui.refresh.simlpe.SimpleRefreshLayout;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -36,26 +42,45 @@ public class BIllListFragment extends ViewPagerLazyFragment {
     private final int PAGE_SIZE = 20;
     private final int LOAD_LIST_DATA = 0x11;
 
-    private boolean isMe;
-    private String mCaller;
-    private String mCondition;
+    private BillListConfig billConfig;
+
     private int mPageIndex = 1;
     private RecyclerView mRecyclerView;
-
+    private Class mDetailsClass;
     private UUHttpHelper mUUHttpHelper;
     private SimpleRefreshLayout mRefreshLayout;
 
 
-    public static BIllListFragment newInstance(boolean isMe,String mCaller, String mCondition) {
+    public static BIllListFragment newInstance(BillListConfig billConfig, Class mDetailsClass) {
         Bundle args = new Bundle();
         BIllListFragment fragment = new BIllListFragment();
-        args.putString("mCaller", mCaller);
-        args.putBoolean("isMe", isMe);
-        args.putString("mCondition", mCondition);
+        args.putParcelable("billConfig", billConfig);
+        args.putSerializable("mDetailsClass", mDetailsClass);
         fragment.setArguments(args);
         return fragment;
     }
 
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        inflater.inflate(R.menu.search, menu);
+        super.onCreateOptionsMenu(menu, inflater);
+    }
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (R.id.search == item.getItemId()) {
+            startActivity(new Intent("com.modular.work.crm3_0.activity.BillSearchActivity")
+                    .putExtra(Constants.Intents.CALLER, billConfig.getCaller())
+                    .putExtra(Constants.Intents.DETAILS_CLASS, mDetailsClass)
+                    .putExtra(Constants.Intents.MY_DOIT, billConfig.isMe())
+                    .putExtra(Constants.Intents.CONDITION, billConfig.getCondition())
+                    .putStringArrayListExtra(Constants.Intents.FIELD_CONFIG, fieldConfig)
+                    .putExtra(Constants.Intents.CONFIG, billConfig)
+                    .putExtra(Constants.Intents.TITLE, getActivity().getTitle())
+            );
+        }
+        return super.onOptionsItemSelected(item);
+    }
     @Override
     protected int inflateLayoutId() {
         return R.layout.common_refreshlayout_recycler;
@@ -71,9 +96,11 @@ public class BIllListFragment extends ViewPagerLazyFragment {
     private void initView() {
         Bundle args = getArguments();
         if (args != null) {
-            mCondition = args.getString("mCondition");
-            mCaller = args.getString("mCaller");
-            isMe = args.getBoolean("isMe",false);
+            billConfig = args.getParcelable("billConfig");
+             Serializable mSerializable= args.getSerializable("mDetailsClass");
+             if (mSerializable!=null&& mSerializable instanceof Class){
+                 mDetailsClass= (Class) mSerializable;
+             }
         }
         findViewById(R.id.mSearchView).setVisibility(View.GONE);
         mRefreshLayout = findViewById(R.id.mRefreshLayout);
@@ -101,8 +128,8 @@ public class BIllListFragment extends ViewPagerLazyFragment {
         }
         mUUHttpHelper.requestCompanyHttp(new Parameter.Builder()
                 .record(LOAD_LIST_DATA)
-                .addParams("caller", mCaller)
-                .addParams("condition", mCondition)
+                .addParams("caller", billConfig.getCaller())
+                .addParams("condition", billConfig.getCondition())
                 .mode(Method.GET)
                 .addParams("page", mPageIndex)
                 .addParams("pageSize", PAGE_SIZE)
@@ -146,41 +173,53 @@ public class BIllListFragment extends ViewPagerLazyFragment {
             int index = -1;
             for (int i = 0; i < listdata.size(); i++) {
                 List<BillListGroupModel.BillListField> billListFields = null;
+                List<BillListGroupModel.BillListField> hideBillListFields = null;
                 BillListGroupModel groupModel = new BillListGroupModel();
                 JSONObject data = listdata.getJSONObject(i);
                 int id = JSONUtil.getInt(data, keyField);
                 String status = JSONUtil.getText(data, "cu_auditstatus");
-
+                int showNum = 0;
                 for (int j = 0; j < columns.size(); j++) {
                     JSONObject column = columns.getJSONObject(j);
-                    if (JSONUtil.getInt(column, "width") > 0) {
-                        if (billListFields == null) {
-                            billListFields = new ArrayList<>();
-                            index++;
-                        }
-                        String caption = JSONUtil.getText(column, "caption");
-                        String dataIndex = JSONUtil.getText(column, "dataIndex");
-                        String values = JSONUtil.getText(data, dataIndex);
-                        if (!TextUtils.isEmpty(dataIndex) && i == 0) {
-                            fieldConfig.add(dataIndex);
-                        }
-
-                        BillListGroupModel.BillListField billListField = new BillListGroupModel.BillListField();
-                        billListField.setId(id);
-                        billListField.setStatus(status);
-                        billListField.setCaption(caption);
-                        billListField.setField(dataIndex);
-                        billListField.setValue(values);
-                        billListField.setGroupIndex(index);
-                        groupModel.setGroupIndex(index);
+                    if (billListFields == null) {
+                        billListFields = new ArrayList<>();
+                        index++;
+                    }
+                    String caption = JSONUtil.getText(column, "caption");
+                    String dataIndex = JSONUtil.getText(column, "dataIndex");
+                    String values = JSONUtil.getText(data, dataIndex);
+                    if (!TextUtils.isEmpty(dataIndex) && i == 0) {
+                        fieldConfig.add(dataIndex);
+                    }
+                    if ("状态".equals(caption)){
+                        status= values;
+                    }
+                    BillListGroupModel.BillListField billListField = new BillListGroupModel.BillListField();
+                    billListField.setCaption(caption);
+                    billListField.setField(dataIndex);
+                    billListField.setValue(values);
+                    billListField.setGroupIndex(index);
+                    groupModel.setGroupIndex(index);
+                    if (JSONUtil.getInt(column, "width") > 0 && (billConfig.getShowItemNum() <= 0 || billConfig.getShowItemNum() >showNum)) {
                         billListFields.add(billListField);
+                        showNum++;
+                    } else {
+                        if (hideBillListFields==null){
+                            hideBillListFields=new ArrayList<>();
+                        }
+                        hideBillListFields.add(billListField);
                     }
+
                 }
+                groupModel.setId(id);
+                groupModel.setStatus(status);
                 if (!ListUtils.isEmpty(billListFields)) {
                     groupModel.setBillFields(billListFields);
+                    if (!ListUtils.isEmpty(hideBillListFields)) {
+                        groupModel.setHideBillFields(hideBillListFields);
+                    }
                     groupModels.add(groupModel);
                 }
-
             }
         }
         setAdapter(groupModels);
@@ -193,9 +232,9 @@ public class BIllListFragment extends ViewPagerLazyFragment {
         if (mListAdapter == null) {
             mListAdapter = new BillListAdapter(ct, groupModels, new BillListAdapter.OnAdapterListener() {
                 @Override
-                public void onClick(BillListGroupModel.BillListField field) {
+                public void onClick(BillListGroupModel mBillListGroupModel) {
                     if (mOnBillListListener != null) {
-                        mOnBillListListener.itemClick(isMe,field.getId(), mCaller, mCondition, field);
+                        mOnBillListListener.itemClick(billConfig, mBillListGroupModel.getId(), mBillListGroupModel);
                     }
                 }
             });
@@ -229,7 +268,9 @@ public class BIllListFragment extends ViewPagerLazyFragment {
     }
 
     public interface OnBillListListener {
-        void itemClick(boolean isMe,int id, String mCaller, String mCondition, BillListGroupModel.BillListField field);
+        void itemClick(BillListConfig billConfig, int formId, BillListGroupModel mBillListGroupModel);
     }
+
+
 }
 

+ 43 - 11
app_modular/apputils/src/main/java/com/modular/apputils/model/BillListConfig.java

@@ -3,21 +3,44 @@ package com.modular.apputils.model;
 import android.os.Parcel;
 import android.os.Parcelable;
 
-public class BillListConfig implements Parcelable  {
-    private boolean isMe;
-    private String mTitle;
+public class BillListConfig implements Parcelable {
+    private boolean isMe;//是否是我的
+    private String mTitle;//标题
     private String mCaller;
-    private String mCondition;
+    private String mCondition;//条件语句
+    private int showItemNum;//显示条目
+    private boolean needForward;//是否需要专题数据
 
     public BillListConfig() {
     }
 
+    public BillListConfig(BillListConfig mBillListConfig) {
+        this.isMe = mBillListConfig.isMe;
+        this.mTitle = mBillListConfig.mTitle;
+        this.mCaller = mBillListConfig.mCaller;
+        this.mCondition = mBillListConfig.mCondition;
+        this.showItemNum = mBillListConfig.showItemNum;
+        this.needForward = mBillListConfig.needForward;
+    }
+
 
     protected BillListConfig(Parcel in) {
+        needForward = in.readByte() != 0;
         isMe = in.readByte() != 0;
         mTitle = in.readString();
         mCaller = in.readString();
         mCondition = in.readString();
+        showItemNum = in.readInt();
+    }
+
+    @Override
+    public void writeToParcel(Parcel parcel, int i) {
+        parcel.writeByte((byte) (needForward ? 1 : 0));
+        parcel.writeByte((byte) (isMe ? 1 : 0));
+        parcel.writeString(mTitle);
+        parcel.writeString(mCaller);
+        parcel.writeString(mCondition);
+        parcel.writeInt(showItemNum);
     }
 
     public static final Creator<BillListConfig> CREATOR = new Creator<BillListConfig>() {
@@ -64,17 +87,26 @@ public class BillListConfig implements Parcelable  {
         this.mCondition = mCondition;
     }
 
+    public int getShowItemNum() {
+        return showItemNum;
+    }
+
+    public void setShowItemNum(int showItemNum) {
+        this.showItemNum = showItemNum;
+    }
+
+    public boolean isNeedForward() {
+        return needForward;
+    }
+
+    public void setNeedForward(boolean needForward) {
+        this.needForward = needForward;
+    }
 
     @Override
     public int describeContents() {
         return 0;
     }
 
-    @Override
-    public void writeToParcel(Parcel parcel, int i) {
-        parcel.writeByte((byte) (isMe ? 1 : 0));
-        parcel.writeString(mTitle);
-        parcel.writeString(mCaller);
-        parcel.writeString(mCondition);
-    }
+
 }

+ 68 - 19
app_modular/apputils/src/main/java/com/modular/apputils/model/BillListGroupModel.java

@@ -1,14 +1,35 @@
 package com.modular.apputils.model;
 
+import android.os.Parcel;
+import android.os.Parcelable;
+
 import java.util.List;
 
 /**
  * 单据列表组
  */
 public class BillListGroupModel {
+    private int id;//id
     private int groupIndex;//当前组所在的整个显示集合里面的索引
+    private String status;
     private List<BillListField> billFields;
+    private List<BillListField> hideBillFields;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getStatus() {
+        return status;
+    }
 
+    public void setStatus(String status) {
+        this.status = status;
+    }
 
     public int getGroupIndex() {
         return groupIndex;
@@ -26,39 +47,53 @@ public class BillListGroupModel {
         this.billFields = billFields;
     }
 
-    public static class BillListField {
-        private int id;//id
-        private String status;
+    public List<BillListField> getHideBillFields() {
+        return hideBillFields;
+    }
+
+    public void setHideBillFields(List<BillListField> hideBillFields) {
+        this.hideBillFields = hideBillFields;
+    }
+
+    public static class BillListField implements Parcelable{
         private String statusKey;
         private int groupIndex;//所在组索引
         private String caption;//字段名称
         private String field;//字段
         private String value;//值
 
-        public String getStatusKey() {
-            return statusKey;
+        public BillListField() {
         }
 
-        public void setStatusKey(String statusKey) {
-            this.statusKey = statusKey;
+        protected BillListField(Parcel in) {
+            statusKey = in.readString();
+            groupIndex = in.readInt();
+            caption = in.readString();
+            field = in.readString();
+            value = in.readString();
         }
 
-        public String getStatus() {
-            return status;
-        }
+        public static final Creator<BillListField> CREATOR = new Creator<BillListField>() {
+            @Override
+            public BillListField createFromParcel(Parcel in) {
+                return new BillListField(in);
+            }
 
-        public void setStatus(String status) {
-            this.status = status;
-        }
+            @Override
+            public BillListField[] newArray(int size) {
+                return new BillListField[size];
+            }
+        };
 
-        public int getId() {
-            return id;
+        public String getStatusKey() {
+            return statusKey;
         }
 
-        public void setId(int id) {
-            this.id = id;
+        public void setStatusKey(String statusKey) {
+            this.statusKey = statusKey;
         }
 
+
         public int getGroupIndex() {
             return groupIndex;
         }
@@ -68,7 +103,7 @@ public class BillListGroupModel {
         }
 
         public String getCaption() {
-            return caption==null?"":caption;
+            return caption == null ? "" : caption;
         }
 
         public void setCaption(String caption) {
@@ -84,11 +119,25 @@ public class BillListGroupModel {
         }
 
         public String getValue() {
-            return value==null?"":value;
+            return value == null ? "" : value;
         }
 
         public void setValue(String value) {
             this.value = value;
         }
+
+        @Override
+        public int describeContents() {
+            return 0;
+        }
+
+        @Override
+        public void writeToParcel(Parcel parcel, int i) {
+            parcel.writeString(statusKey);
+            parcel.writeInt(groupIndex);
+            parcel.writeString(caption);
+            parcel.writeString(field);
+            parcel.writeString(value);
+        }
     }
 }

+ 11 - 0
app_modular/apputils/src/main/java/com/modular/apputils/presenter/BillDetailsPresenter.java

@@ -44,6 +44,14 @@ public class BillDetailsPresenter extends BaseNetPresenter {
     protected List<BillJump> mBillJumps;
 
 
+    public String getCaller() {
+        return mCaller;
+    }
+
+    public Class getInputClass() {
+        return mInputClass;
+    }
+
     public BillDetailsPresenter(Context ct, IBillDetails mIBillDetails) {
         super(ct);
         this.mIBillDetails = mIBillDetails;
@@ -71,6 +79,9 @@ public class BillDetailsPresenter extends BaseNetPresenter {
         loadFormandGridDetail();
     }
 
+    public int getId() {
+        return mId;
+    }
 
     public void unSubmit() {
         mIBillDetails.showLoading();

+ 10 - 5
app_modular/apputils/src/main/java/com/modular/apputils/presenter/BillPresenter.java

@@ -130,7 +130,7 @@ public class BillPresenter extends BaseNetPresenter implements OnSmartHttpListen
                     if (TextUtils.isEmpty(billModel.getValue())
                             && ("necessaryField".equals(billModel.getAllowBlank())
                             || "F".equals(billModel.getAllowBlank())) && billModel.getIsdefault() == -1) {
-                        iBill.showToast(billModel.getField() + "为必填项");
+                        iBill.showToast(billModel.getCaption() + "为必填项");
                         iBill.dimssLoading();
                         return;
                     }
@@ -330,10 +330,15 @@ public class BillPresenter extends BaseNetPresenter implements OnSmartHttpListen
                 break;
             case SAVE_AND_SUBMIT:
                 if (JSONUtil.getBoolean(jsonObject, "success")) {
-                    int keyvalue = JSONUtil.getInt(jsonObject, "keyvalue");
-                    String formcode = JSONUtil.getText(jsonObject, "formcode");
-                    judgeApproval(keyvalue, formcode);
-                    iBill.showToast(R.string.save_success);
+                    if (mId<=0){
+                        int keyvalue = JSONUtil.getInt(jsonObject, "keyvalue");
+                        String formcode = JSONUtil.getText(jsonObject, "formcode");
+                        judgeApproval(keyvalue, formcode);
+                        iBill.showToast(R.string.save_success);
+                    }else{
+                        judgeApproval(mId, "");
+                        iBill.showToast(R.string.save_success);
+                    }
                 }
                 break;
             case LOAD_JUDGE_APPROVAL:

+ 65 - 0
app_modular/apputils/src/main/res/layout/activity_customer_contact_details.xml

@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+
+    <LinearLayout
+        android:id="@+id/bottomLL"
+        android:layout_width="match_parent"
+        android:layout_height="40dp"
+        android:layout_alignParentBottom="true"
+        android:orientation="horizontal">
+
+        <Button
+            android:id="@+id/callBtn"
+            android:layout_width="0dp"
+            android:background="@drawable/selector_me_menu_item_bg"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:text="打电话" />
+
+        <View
+            android:layout_width="2px"
+            android:layout_height="match_parent"
+            android:background="@color/item_line"/>
+        <Button
+            android:id="@+id/scheduleBtn"
+            android:layout_width="0dp"
+            android:background="@drawable/selector_me_menu_item_bg"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:text="安排日程" />
+        <View
+            android:layout_width="2px"
+            android:layout_height="match_parent"
+            android:background="@color/item_line"/>
+        <Button
+            android:id="@+id/deleteBtn"
+            android:layout_width="0dp"
+            android:background="@drawable/selector_me_menu_item_bg"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:text="删除" />
+        <View
+            android:layout_width="2px"
+            android:layout_height="match_parent"
+            android:background="@color/item_line"/>
+        <Button
+            android:id="@+id/shareBtn"
+            android:layout_width="0dp"
+            android:visibility="gone"
+            android:background="@drawable/selector_me_menu_item_bg"
+            android:layout_height="match_parent"
+            android:layout_weight="1"
+            android:text="分享" />
+
+    </LinearLayout>
+
+    <com.module.recyclerlibrary.ui.refresh.EmptyRecyclerView
+        android:id="@+id/mEmptyRecyclerView"
+        android:layout_above="@id/bottomLL"
+        android:paddingBottom="@dimen/paddingMin"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+</RelativeLayout>

+ 0 - 0
app_modular/appworks/src/main/res/menu/search.xml → app_modular/apputils/src/main/res/menu/search.xml


+ 8 - 1
app_modular/appworks/src/main/AndroidManifest.xml

@@ -521,6 +521,7 @@
             </intent-filter>
         </activity>
         <activity android:name=".crm3_0.activity.CustomerListActivity"/>
+        <activity android:name=".crm3_0.activity.CustomerContactDetailActivity"/>
         <activity android:name="com.modular.apputils.activity.BillListActivity"/>
         <activity android:name=".crm3_0.activity.CustomerManageActivity"
             android:label="客户管理">
@@ -565,7 +566,13 @@
         <activity android:name=".activity.businessManage.businessMineList.BusinessMineListActivity" />
         <activity android:name=".activity.businessManage.businessStage.BusinessStageActivity" />
       
-        <activity android:name=".crm3_0.activity.BillSearchActivity" />
+        <activity android:name=".crm3_0.activity.BillSearchActivity" >
+            <intent-filter>
+                <action android:name="com.modular.work.crm3_0.activity.BillSearchActivity" />
+
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
         <activity android:name=".crm3_0.activity.CustomerVisitDetailsActivity" />
         <activity android:name=".crm3_0.activity.CustomerCareListActivity" />
         <activity android:name=".crm3_0.activity.VisitRecordBillInputActivity" />

+ 16 - 0
app_modular/appworks/src/main/java/com/uas/appworks/activity/SchedulerCreateActivity.java

@@ -21,6 +21,7 @@ import com.common.data.DateFormatUtil;
 import com.common.data.JSONUtil;
 import com.common.preferences.PreferenceUtils;
 import com.common.system.DisplayUtil;
+import com.common.system.SystemUtil;
 import com.core.app.MyApplication;
 import com.core.model.SelectBean;
 import com.core.utils.CommonUtil;
@@ -61,6 +62,7 @@ public class SchedulerCreateActivity extends BaseNetActivity {
     private Schedule mSchedule;//当前的日程对象
     private PopupWindow setWindow;
 
+    private boolean canTouchTag;
 
     @Override
     protected int getLayoutId() {
@@ -69,15 +71,29 @@ public class SchedulerCreateActivity extends BaseNetActivity {
 
     @Override
     protected void init() throws Exception {
+        canTouchTag = true;
         isEnable = getIntent().getBooleanExtra(Constants.Intents.ENABLE, true);
         mSchedule = getIntent().getParcelableExtra(Constants.Intents.MODEL);
         if (mSchedule == null) {
             initSchedule();
+        } else {
+            if (!TextUtils.isEmpty(mSchedule.getTag())) {
+                canTouchTag = false;
+            }
+            if (mSchedule.getStartTime() == 0) {
+                mSchedule.setStartTime(System.currentTimeMillis());
+            }
+            if (mSchedule.getEndTime() == 0) {
+                mSchedule.setEndTime(System.currentTimeMillis());
+            }
         }
         setTitle(isEnable ? R.string.create_scheduler : R.string.scheduler_detail);
         findById();
         initView();
         updateEnable(isEnable);
+        if (!canTouchTag) {
+            typeTv.setClickable(false);
+        }
     }
 
     private void initSchedule() {

+ 62 - 6
app_modular/appworks/src/main/java/com/uas/appworks/adapter/CustomerBillInputAdapter.java

@@ -5,6 +5,7 @@ import android.support.annotation.LayoutRes;
 import android.support.annotation.NonNull;
 import android.support.v7.widget.RecyclerView;
 import android.text.Editable;
+import android.text.InputType;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -106,10 +107,65 @@ public class CustomerBillInputAdapter extends BillAdapter {
         void clickCompany(int position, BillGroupModel.BillModel model);
     }
 
-//    @Override
-//    public void bindInputView(InputViewHolder mInputViewHolder, BillGroupModel.BillModel model, int position) throws Exception {
-//        super.bindInputView(mInputViewHolder, model, position);
-//        if (model.getCaption().equals())
-//
-//    }
+    public void bindInputView(InputViewHolder mInputViewHolder, BillGroupModel.BillModel model, int position) throws Exception {
+        if (model != null) {
+            if (mInputViewHolder.valuesEd.getTag() != null && mInputViewHolder.valuesEd.getTag() instanceof TextChangListener) {
+                mInputViewHolder.valuesEd.removeTextChangedListener((TextChangListener) mInputViewHolder.valuesEd.getTag());
+            }
+            mInputViewHolder.captionTv.setText(model.getCaption());
+            mInputViewHolder.muchInputTv.setVisibility(model.getAllowBlank().equals("F") ? View.VISIBLE : View.GONE);
+            mInputViewHolder.valuesEd.setText(model.getValue());
+            if (model.getType().equals("N")) {
+                mInputViewHolder.valuesEd.setInputType(InputType.TYPE_CLASS_NUMBER);
+            } else {
+                mInputViewHolder.valuesEd.setInputType(InputType.TYPE_CLASS_TEXT);
+            }
+            if (model.getReadOnly().equals("T")) {
+                mInputViewHolder.valuesEd.setFocusable(false);
+                mInputViewHolder.valuesEd.setClickable(true);
+                mInputViewHolder.valuesEd.setOnClickListener(null);
+            } else if (BillTypeChangeUtils.isSelect(model.getType()) || model.getCaption().equals("企业名称")) {
+                //选择类型
+                mInputViewHolder.valuesEd.setHint("请选择");
+                mInputViewHolder.valuesEd.setFocusable(false);
+                mInputViewHolder.valuesEd.setClickable(true);
+                mInputViewHolder.selectIv.setVisibility(View.VISIBLE);
+                mInputViewHolder.valuesEd.setTag(com.modular.apputils.R.id.tag, position);
+                mInputViewHolder.valuesEd.setTag(com.modular.apputils.R.id.tag2, model);
+                mInputViewHolder.valuesEd.setOnClickListener(this);
+            } else {
+                //输入类型
+                mInputViewHolder.valuesEd.setHint("请输入");
+                mInputViewHolder.selectIv.setVisibility(View.GONE);
+                mInputViewHolder.valuesEd.setFocusable(true);
+                mInputViewHolder.valuesEd.setClickable(false);
+                mInputViewHolder.valuesEd.setFocusableInTouchMode(true);
+                TextChangListener mTextChangListener = new TextChangListener(mInputViewHolder.valuesEd, position);
+                mInputViewHolder.valuesEd.setTag(mTextChangListener);
+                mInputViewHolder.valuesEd.addTextChangedListener(mTextChangListener);
+                mInputViewHolder.valuesEd.setOnClickListener(null);
+            }
+
+        }
+    }
+
+    @Override
+    public void onClick(View view) {
+        if (view.getId() == com.modular.apputils.R.id.valuesEd) {
+            if (mOnAdapterListener != null) {
+                if (view.getTag(com.modular.apputils.R.id.tag2) != null && view.getTag(com.modular.apputils.R.id.tag2) instanceof BillGroupModel.BillModel) {
+                    int position = view.getTag(com.modular.apputils.R.id.tag) != null && view.getTag(com.modular.apputils.R.id.tag) instanceof Integer ? ((int) view.getTag(com.modular.apputils.R.id.tag)) : 0;
+                    BillGroupModel.BillModel mBillModel = (BillGroupModel.BillModel) view.getTag(com.modular.apputils.R.id.tag2);
+                    if (mBillModel.getCaption().equals("企业名称")) {
+                        mCompanyClickListener.clickCompany(mBillModel.getGroupIndex(),mBillModel);
+                    } else {
+                        mOnAdapterListener.toSelect(position, mBillModel);
+                    }
+                }
+            }
+
+        } else {
+            super.onClick(view);
+        }
+    }
 }

+ 73 - 26
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/BillSearchActivity.java

@@ -22,7 +22,9 @@ import com.core.utils.CommonUtil;
 import com.core.utils.StatusBarUtil;
 import com.core.widget.listener.EditChangeListener;
 import com.me.network.app.http.Method;
+import com.modular.apputils.activity.BillInputActivity;
 import com.modular.apputils.listener.OnSmartHttpListener;
+import com.modular.apputils.model.BillListConfig;
 import com.modular.apputils.model.BillListGroupModel;
 import com.modular.apputils.network.Parameter;
 import com.modular.apputils.network.Tags;
@@ -53,6 +55,7 @@ public class BillSearchActivity extends OABaseActivity {
     private String lastKeyWord;
     private boolean isMe;
     private Class mDetailsActivity;
+    private BillListConfig billConfig;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
@@ -77,6 +80,7 @@ public class BillSearchActivity extends OABaseActivity {
             isMe = intent.getBooleanExtra(Constants.Intents.MY_DOIT, false);
             mCaller = intent.getStringExtra(Constants.Intents.CALLER);
             mMustCondition = intent.getStringExtra(Constants.Intents.CONDITION);
+            billConfig = intent.getParcelableExtra(Constants.Intents.CONFIG);
             fieldConfig = intent.getStringArrayListExtra(Constants.Intents.FIELD_CONFIG);
             Serializable mSerializable = intent.getSerializableExtra(Constants.Intents.DETAILS_CLASS);
             if (mSerializable != null && mSerializable instanceof Class) {
@@ -183,6 +187,11 @@ public class BillSearchActivity extends OABaseActivity {
     };
 
     private void handlerListData(JSONObject object) throws Exception {
+        if (fieldConfig == null) {
+            fieldConfig = new ArrayList<>();
+        } else {
+            fieldConfig.clear();
+        }
         JSONArray columns = JSONUtil.getJSONArray(object, "columns");
         JSONArray listdata = JSONUtil.getJSONArray(object, "listdata");
         String keyField = JSONUtil.getText(object, "keyField");
@@ -193,34 +202,51 @@ public class BillSearchActivity extends OABaseActivity {
             int index = -1;
             for (int i = 0; i < listdata.size(); i++) {
                 List<BillListGroupModel.BillListField> billListFields = null;
+                List<BillListGroupModel.BillListField> hideBillListFields = null;
                 BillListGroupModel groupModel = new BillListGroupModel();
                 JSONObject data = listdata.getJSONObject(i);
                 int id = JSONUtil.getInt(data, keyField);
                 String status = JSONUtil.getText(data, "cu_auditstatus");
-
+                int showNum = 0;
                 for (int j = 0; j < columns.size(); j++) {
                     JSONObject column = columns.getJSONObject(j);
-                    if (JSONUtil.getInt(column, "width") > 0) {
-                        if (billListFields == null) {
-                            billListFields = new ArrayList<>();
-                            index++;
-                        }
-                        String caption = JSONUtil.getText(column, "caption");
-                        String dataIndex = JSONUtil.getText(column, "dataIndex");
-                        String values = JSONUtil.getText(data, dataIndex);
-                        BillListGroupModel.BillListField billListField = new BillListGroupModel.BillListField();
-                        billListField.setId(id);
-                        billListField.setStatus(status);
-                        billListField.setCaption(caption);
-                        billListField.setField(dataIndex);
-                        billListField.setValue(values);
-                        billListField.setGroupIndex(index);
-                        groupModel.setGroupIndex(index);
+                    if (billListFields == null) {
+                        billListFields = new ArrayList<>();
+                        index++;
+                    }
+                    String caption = JSONUtil.getText(column, "caption");
+                    String dataIndex = JSONUtil.getText(column, "dataIndex");
+                    String values = JSONUtil.getText(data, dataIndex);
+                    if (!TextUtils.isEmpty(dataIndex) && i == 0) {
+                        fieldConfig.add(dataIndex);
+                    }
+                    if ("状态".equals(caption)){
+                        status= values;
+                    }
+                    BillListGroupModel.BillListField billListField = new BillListGroupModel.BillListField();
+                    billListField.setCaption(caption);
+                    billListField.setField(dataIndex);
+                    billListField.setValue(values);
+                    billListField.setGroupIndex(index);
+                    groupModel.setGroupIndex(index);
+                    if (JSONUtil.getInt(column, "width") > 0 && (billConfig.getShowItemNum() <= 0 || billConfig.getShowItemNum() >showNum)) {
                         billListFields.add(billListField);
+                        showNum++;
+                    } else {
+                        if (hideBillListFields==null){
+                            hideBillListFields=new ArrayList<>();
+                        }
+                        hideBillListFields.add(billListField);
                     }
+
                 }
+                groupModel.setId(id);
+                groupModel.setStatus(status);
                 if (!ListUtils.isEmpty(billListFields)) {
                     groupModel.setBillFields(billListFields);
+                    if (!ListUtils.isEmpty(hideBillListFields)) {
+                        groupModel.setHideBillFields(hideBillListFields);
+                    }
                     groupModels.add(groupModel);
                 }
             }
@@ -234,18 +260,39 @@ public class BillSearchActivity extends OABaseActivity {
         if (mListAdapter == null) {
             mListAdapter = new BillListAdapter(ct, groupModels, new BillListAdapter.OnAdapterListener() {
                 @Override
-                public void onClick(BillListGroupModel.BillListField field) {
-                    if (field.getStatus().equals("在录入")) {
+                public void onClick(BillListGroupModel mBillListGroupModel) {
+                    if (mBillListGroupModel.getStatus().equals("在录入")) {
                         startActivity(new Intent(ct, CustomerBillInputActivity.class)
                                 .putExtra(Constants.Intents.CALLER, mCaller)
-                                .putExtra(Constants.Intents.TITLE, getToolBarTitle())
-                                .putExtra(Constants.Intents.ID, field.getId()));
+                                .putExtra(Constants.Intents.TITLE, getTitle())
+                                .putExtra(Constants.Intents.ID, mBillListGroupModel.getId()));
+                    } else if (mDetailsActivity != null) {
+                        ArrayList<BillListGroupModel.BillListField> fields = new ArrayList<>();
+                        if (billConfig.isNeedForward()) {
+                            if (!ListUtils.isEmpty(mBillListGroupModel.getBillFields())) {
+                                fields.addAll(mBillListGroupModel.getBillFields());
+                            }
+                            if (!ListUtils.isEmpty(mBillListGroupModel.getHideBillFields())) {
+                                fields.addAll(mBillListGroupModel.getHideBillFields());
+                            }
+                        }
+                        startActivity(new Intent(ct, mDetailsActivity)
+                                .putExtra(Constants.Intents.CALLER, billConfig.getCaller())
+                                .putExtra(Constants.Intents.TITLE, getTitle())
+                                .putExtra(Constants.Intents.MY_DOIT, billConfig.isMe())
+                                .putExtra(Constants.Intents.INPUT_CLASS, BillInputActivity.class)
+                                .putExtra(Constants.Intents.BILL_LIST_FIELD_FORWARD, fields)
+                                .putExtra(Constants.Intents.ID, mBillListGroupModel.getId()));
                     } else {
-                        startActivity(new Intent(ct, mDetailsActivity == null ? CustomerDetails3_0Activity.class : mDetailsActivity)
-                                .putExtra(Constants.Intents.CALLER, mCaller)
-                                .putExtra(Constants.Intents.MY_DOIT, isMe)
-                                .putExtra(Constants.Intents.TITLE, getToolBarTitle())
-                                .putExtra(Constants.Intents.ID, field.getId()));
+                        //进入通用详情界面
+                        startActivity(new Intent("com.modular.form.erp.activity.CommonDocDetailsActivity")
+                                .putExtra("caller", billConfig.getCaller())
+                                .putExtra("keyValue", mBillListGroupModel.getId())
+                                .putExtra("update", "1")
+                                .putExtra(Constants.Intents.MY_DOIT, billConfig.isMe())
+                                .putExtra("title", getTitle())
+                                .putExtra("statusKey", "")
+                                .putExtra("status", "已提交"));
                     }
 
                 }

+ 60 - 1
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerBillInputActivity.java

@@ -2,18 +2,26 @@ package com.uas.appworks.crm3_0.activity;
 
 import android.content.Intent;
 
+import android.os.Parcelable;
 import android.view.MenuItem;
+import android.widget.PopupWindow;
 
+import com.alibaba.fastjson.JSONObject;
+import com.baidu.mapapi.model.LatLng;
 import com.common.LogUtil;
+import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
 import com.core.app.Constants;
 import com.core.utils.CommonUtil;
+import com.core.widget.view.model.SelectAimModel;
 import com.modular.apputils.activity.BillInputActivity;
 import com.modular.apputils.adapter.BillAdapter;
 import com.modular.apputils.listener.OnSmartHttpListener;
 import com.modular.apputils.model.BillGroupModel;
 import com.modular.apputils.network.Parameter;
 import com.modular.apputils.network.Tags;
+import com.modular.apputils.presenter.BillPresenter;
+import com.modular.apputils.utils.PopupWindowHelper;
 import com.modular.apputils.utils.UUHttpHelper;
 import com.uas.appworks.R;
 import com.uas.appworks.adapter.CustomerBillInputAdapter;
@@ -25,12 +33,21 @@ import java.util.List;
  * 客户|预录入客户录入界面
  */
 public class CustomerBillInputActivity extends BillInputActivity {
+    private LatLng mLatLng;
+
+    @Override
+    public BillPresenter newBillPresenter() {
+        return super.newBillPresenter();
+    }
+
     @Override
     public BillAdapter newBillAdapter(List<BillGroupModel> groupModels) {
         return new CustomerBillInputAdapter(ct, groupModels, this, new CustomerBillInputAdapter.CompanyClickListener() {
             @Override
             public void clickCompany(int position, BillGroupModel.BillModel model) {
-                //TODO 点击公司
+                selectPosition = position;
+                Intent intent = new Intent("com.modular.form.SelectAimActivity");
+                startActivityForResult(intent, 0x20111);
             }
         });
     }
@@ -94,4 +111,46 @@ public class CustomerBillInputActivity extends BillInputActivity {
         }
         finish();
     }
+
+    private PopupWindow popupWindow = null;
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+
+        if (0x20111 == requestCode) {
+            SelectAimModel chcheAimModel = data.getParcelableExtra("data");
+            if (popupWindow != null) {
+                popupWindow.dismiss();
+                popupWindow = null;
+            }
+            popupWindow = PopupWindowHelper.create(this, getString(R.string.perfect_company_name), chcheAimModel, new PopupWindowHelper.OnClickListener() {
+                @Override
+                public void result(SelectAimModel model) {
+                    String name = model.getName();
+                    String address = model.getAddress();
+                    mLatLng = model.getLatLng();
+                    handlerSelectDbFind(name, address, selectPosition);
+
+                }
+            }, null);
+        } else {
+            super.onActivityResult(requestCode, resultCode, data);
+        }
+    }
+
+    protected void handlerSelectDbFind(String name, String address, int groupId) {
+        BillGroupModel mBillGroupModel = mBillAdapter.getBillGroupModel(groupId);
+        if (mBillGroupModel != null) {
+            if (!ListUtils.isEmpty(mBillGroupModel.getShowBillFields())) {
+                for (BillGroupModel.BillModel e : mBillGroupModel.getShowBillFields()) {
+                    if ("企业名称".equals(e.getCaption())) {
+                        e.setValue(name);
+                    } else if ("企业地址".equals(e.getCaption())) {
+                        e.setValue(address);
+                    }
+                }
+            }
+        }
+        mBillAdapter.notifyDataSetChanged();
+    }
 }

+ 7 - 2
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerCareListActivity.java

@@ -116,7 +116,6 @@ public class CustomerCareListActivity extends OABaseActivity {
             JSONObject jsonObject = JSON.parseObject(message);
             LogUtil.i("gong", what + "||onSuccess||" + message);
             switch (what) {
-
                 case LOAD_FORGET_CUSTOMER://遗忘客户
                     handlerForgetCustomer(JSONUtil.getJSONArray(jsonObject, "datas"));
                     break;
@@ -125,18 +124,24 @@ public class CustomerCareListActivity extends OABaseActivity {
                     break;
 
             }
+            if (mListView!=null&&mListView.isRefreshing()){
+                mListView.onRefreshComplete();
+            }
             dimssLoading();
         }
 
         @Override
         public void onFailure(int what, String message, Tags tag) throws Exception {
             LogUtil.i("gong", what + "||onFailure||" + message);
-            dimssLoading();
             if (JSONUtil.validateJSONObject(message)) {
                 showToast(JSONUtil.getText(message, "exceptionInfo"));
             } else {
                 showToast(message);
             }
+            if (mListView!=null&&mListView.isRefreshing()){
+                mListView.onRefreshComplete();
+            }
+            dimssLoading();
 
         }
     };

+ 1 - 0
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerContactActivity.java

@@ -83,6 +83,7 @@ public class CustomerContactActivity extends BillInputActivity {
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         switch (requestCode) {
             case REQUESTCODE_DB_FIND:
+                if (data == null) return;
                 String json = data.getStringExtra("data");
                 int groupIndex = data.getIntExtra("groupId", 0);
                 JSONObject object = JSON.parseObject(json);

+ 222 - 0
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerContactDetailActivity.java

@@ -0,0 +1,222 @@
+package com.uas.appworks.crm3_0.activity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.support.v7.widget.RecyclerView;
+import android.text.TextUtils;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import com.common.data.JSONUtil;
+import com.common.data.ListUtils;
+import com.common.system.SystemUtil;
+import com.core.app.Constants;
+import com.core.utils.CommonUtil;
+import com.me.network.app.http.Method;
+import com.modular.apputils.activity.BillDetailsActivity;
+import com.modular.apputils.adapter.BillDetailsAdapter;
+import com.modular.apputils.adapter.BillListAdapter;
+import com.modular.apputils.listener.OnSmartHttpListener;
+import com.modular.apputils.model.BillGroupModel;
+import com.modular.apputils.model.BillJump;
+import com.modular.apputils.model.BillListGroupModel;
+import com.modular.apputils.network.Parameter;
+import com.modular.apputils.network.Tags;
+import com.modular.apputils.utils.UUHttpHelper;
+import com.modular.apputils.widget.VeriftyDialog;
+import com.uas.appworks.R;
+import com.uas.appworks.activity.SchedulerCreateActivity;
+import com.uas.appworks.model.Schedule;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+public class CustomerContactDetailActivity extends BillDetailsActivity {
+
+    private String phone;
+    private int mContactId;
+
+    @Override
+    public int getLayoutId() {
+        return R.layout.activity_customer_contact_details;
+    }
+
+    @Override
+    protected void initView() {
+        super.initView();
+        findViewById(R.id.callBtn).setOnClickListener(mOnClickListener);
+        findViewById(R.id.scheduleBtn).setOnClickListener(mOnClickListener);
+        findViewById(R.id.deleteBtn).setOnClickListener(mOnClickListener);
+        findViewById(R.id.shareBtn).setOnClickListener(mOnClickListener);
+
+        if (getIntent() != null) {
+            List<BillListGroupModel.BillListField> fields = getIntent().getParcelableArrayListExtra(Constants.Intents.BILL_LIST_FIELD_FORWARD);
+            setAdapter2(fields);
+        }
+    }
+
+
+    @Override
+    public boolean onCreateOptionsMenu(Menu menu) {
+        getMenuInflater().inflate(com.modular.apputils.R.menu.menu_add_icon, menu);
+        return false;
+    }
+
+
+    @Override
+    public boolean onOptionsItemSelected(MenuItem item) {
+        if (com.modular.apputils.R.id.add_item == item.getItemId()) {
+            HashMap<String, String> dbfindCondition = null;
+            dbfindCondition = new HashMap<>();
+            dbfindCondition.put("cu_code", "cu_sellercode='" + CommonUtil.getEmcode() + "'");
+            String  mCaller = "Contact";
+            String mTitle = "客户联系人";
+            Class clazz = CustomerContactActivity.class;
+            startActivity(new Intent(ct, clazz)
+                    .putExtra(Constants.Intents.CALLER, mCaller)
+                    .putExtra(Constants.Intents.TITLE, mTitle)
+                    .putExtra(Constants.Intents.ID, mBillDetailsPresenter.getId())
+                    .putExtra(Constants.Intents.MY_DOIT, true)
+                    .putExtra(Constants.Intents.DB_FIND_CONDITION, dbfindCondition));
+        }
+        return super.onOptionsItemSelected(item);
+    }
+
+    @Override
+    public void setAdapter(List<BillGroupModel> groupModels) {
+
+    }
+
+    public void setAdapter2(List<BillListGroupModel.BillListField> fields) {
+        MAdapter mMAdapter = new MAdapter(fields);
+        mRecyclerView.setAdapter(mMAdapter);
+        if (fields != null) {
+            for (BillListGroupModel.BillListField field : fields) {
+                if (field.getCaption().equals("ID")) try {
+                    mContactId = Integer.valueOf(field.getValue());
+                } catch (Exception e) {
+
+                }
+                else {
+                    if (field.getCaption().equals("电话")) {
+                        phone = field.getValue();
+                    }
+                }
+            }
+        }
+    }
+
+    private View.OnClickListener mOnClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View view) {
+            if (view.getId() == R.id.callBtn) {
+                if (!TextUtils.isEmpty(phone)) {
+                    SystemUtil.phoneAction(ct, phone);
+                }
+            } else if (view.getId() == R.id.scheduleBtn) {
+                String mRemarks = "";
+                Schedule mSchedule = new Schedule(Schedule.TYPE_UU);
+                mSchedule.setRemarks(mRemarks);
+                mSchedule.setTag("客户联系人日程");
+                startActivityForResult(new Intent(ct, SchedulerCreateActivity.class)
+                        .putExtra(com.uas.appworks.datainquiry.Constants.Intents.ENABLE, true)
+                        .putExtra(com.uas.appworks.datainquiry.Constants.Intents.MODEL, mSchedule), 0x11);
+            } else if (view.getId() == R.id.deleteBtn) {
+                new VeriftyDialog.Builder(ct)
+                        .setTitle(getString(R.string.prompt_title))
+                        .setContent("是否确认删除当前明细表")
+                        .build(new VeriftyDialog.OnDialogClickListener() {
+                            @Override
+                            public void result(boolean clickSure) {
+                                if (clickSure) {
+                                    deleteDetail();
+                                }
+                            }
+                        });
+            } else if (view.getId() == R.id.shareBtn) {
+            }
+        }
+    };
+
+    public void deleteDetail() {
+        showLoading();
+        new UUHttpHelper(CommonUtil.getAppBaseUrl(ct))
+                .requestCompanyHttp(new Parameter.Builder()
+                                .url("common/deleteDetail.action")
+                                .addParams("caller", mBillDetailsPresenter.getCaller())
+                                .addParams("gridcaller", mBillDetailsPresenter.getCaller())
+                                .mode(Method.POST)
+                                .addParams("condition", "ct_id=" + mContactId)
+                        , new OnSmartHttpListener() {
+                            @Override
+                            public void onSuccess(int what, String message, Tags tag) throws Exception {
+                                showToast("删除成功");
+                                dimssLoading();
+                                setResult(RESULT_OK);
+                                finish();
+                            }
+
+                            @Override
+                            public void onFailure(int what, String message, Tags tag) throws Exception {
+                                if (JSONUtil.validateJSONObject(message)) {
+                                    showToast(JSONUtil.getText(message, "exceptionInfo"));
+                                } else {
+                                    showToast(message);
+                                }
+                                dimssLoading();
+                            }
+                        });
+    }
+
+    class MAdapter extends RecyclerView.Adapter<MAdapter.ViewHolder> {
+        private List<BillListGroupModel.BillListField> fields;
+
+        public MAdapter(List<BillListGroupModel.BillListField> fields) {
+            this.fields = fields;
+        }
+
+        @Override
+        public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
+            return new ViewHolder(LayoutInflater.from(ct).inflate(com.modular.apputils.R.layout.item_bill_details, viewGroup, false));
+
+        }
+
+        @Override
+        public void onBindViewHolder(ViewHolder mViewHolder, int position) {
+            BillListGroupModel.BillListField field = fields.get(position);
+            mViewHolder.captionTv.setText(field.getCaption());
+            mViewHolder.valuesTv.setText(field.getValue());
+            if (field.getCaption().contains("手机") || field.getCaption().contains("电话")) {
+                mViewHolder.valuesTv.setTag(com.modular.apputils.R.id.tag_key, 1);
+                mViewHolder.valuesTv.setTag(field.getValue());
+                mViewHolder.valuesTv.setOnClickListener(mOnClickListener);
+            } else {
+                mViewHolder.valuesTv.setOnClickListener(null);
+            }
+            mViewHolder.titleTv.setVisibility(View.GONE);
+        }
+
+        @Override
+        public int getItemCount() {
+            return ListUtils.getSize(fields);
+        }
+
+        class ViewHolder extends RecyclerView.ViewHolder {
+            private TextView titleTv;
+            private TextView captionTv;
+            private TextView valuesTv;
+
+            public ViewHolder(View itemView) {
+                super(itemView);
+                titleTv = (TextView) itemView.findViewById(com.modular.apputils.R.id.titleTv);
+                captionTv = (TextView) itemView.findViewById(com.modular.apputils.R.id.captionTv);
+                valuesTv = (TextView) itemView.findViewById(com.modular.apputils.R.id.valuesTv);
+            }
+        }
+    }
+}

+ 1 - 1
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerDetails3_0Activity.java

@@ -166,7 +166,7 @@ public class CustomerDetails3_0Activity extends BillDetailsActivity implements I
             if (mBottomDataList != null && mBottomDataList.size() > position && mBottomDataList.get(position) != null) {
                 bills = mBottomDataList.get(position);
             }
-            return CustomerDetailsBottomListFragment.newInstance(isMe,position, bills);
+            return CustomerDetailsBottomListFragment.newInstance(isMe,mBillDetailsPresenter.getId(),position, bills);
         }
 
         @Override

+ 16 - 4
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/activity/CustomerManageActivity.java

@@ -334,12 +334,14 @@ public class CustomerManageActivity extends OABaseActivity implements ICustomerM
                 BillListConfig mBillListConfig = new BillListConfig();
                 mBillListConfig.setMe(true);
                 mBillListConfig.setTitle("我负责的");
+                mBillListConfig.setShowItemNum(4);
+                mBillListConfig.setNeedForward(true);
                 mBillListConfig.setCaller("Contact");
                 mBillListConfig.setCondition("cu_sellercode=\'" + emCode + "\'");
                 billListConfigs.add(mBillListConfig);
-                mBillListConfig = new BillListConfig();
+                mBillListConfig = new BillListConfig(mBillListConfig);
                 mBillListConfig.setTitle("我下属的");
-                mBillListConfig.setCaller("Contact");
+                mBillListConfig.setMe(false);
                 String mCondition = "cu_sellercode in (select em_code from employee left join job on em_defaulthsid=jo_id where jo_subof=(select em_defaulthsid from employee where em_code =\'" + emCode + "\'))";
                 HashMap<Object, Object> dbfindCondition = new HashMap<>();
                 dbfindCondition.put("cu_code", "cu_sellercode='" + CommonUtil.getEmcode() + "'");
@@ -349,7 +351,7 @@ public class CustomerManageActivity extends OABaseActivity implements ICustomerM
                         .putExtra(Constants.Intents.DB_FIND_CONDITION, dbfindCondition)
                         .putExtra(Constants.Intents.CONFIG, billListConfigs)
                         .putExtra(Constants.Intents.TITLE, "客户联系人")
-                        .putExtra(Constants.Intents.DETAILS_CLASS, CustomerContactActivity.class)
+                        .putExtra(Constants.Intents.DETAILS_CLASS, CustomerContactDetailActivity.class)
                 );
                 break;
             case 3:
@@ -424,6 +426,7 @@ public class CustomerManageActivity extends OABaseActivity implements ICustomerM
                 .putExtra(Constants.Intents.CALLER, mCaller)
                 .putExtra(Constants.Intents.TITLE, mTitle)
                 .putExtra(Constants.Intents.ID, mId)
+                .putExtra(Constants.Intents.MY_DOIT, true)
                 .putExtra(Constants.Intents.DB_FIND_CONDITION, dbfindCondition)
         );
     }
@@ -455,8 +458,17 @@ public class CustomerManageActivity extends OABaseActivity implements ICustomerM
                         mViewHolder = (ViewHolder) view.getTag();
                     }
                     mViewHolder.titleTv.setText(model.getTitle());
+                    String unit = "个";
+                    switch (position) {
+                        case 2:
+                            unit = "次";
+                            break;
+                        case 3:
+                            unit = "条";
+                            break;
+                    }
                     TextUtil.create().addTintSection(model.getSubTitle(), 0xff0E80F1)
-                            .addBgSection("次", 0xff666666)
+                            .addBgSection(unit, 0xff666666)
                             .showIn(mViewHolder.numTv);
                     return view;
                 }

+ 5 - 2
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/CustomerDetailsBottomListFragment.java

@@ -30,14 +30,16 @@ import java.util.List;
 public class CustomerDetailsBottomListFragment extends ViewPagerLazyFragment {
     private boolean isMe;//0,客户地址 1,客户联系人 2.拜访记录 3,客户商机
     private int type;//0,客户地址 1,客户联系人 2.拜访记录 3,客户商机
+    private int mId;//主表id
     private List<CustomerBindBill> mCusBusiness;
     private RecyclerView mRecyclerView;
 
 
-    public static CustomerDetailsBottomListFragment newInstance(boolean isMe,int type, ArrayList<CustomerBindBill> mCusBusiness) {
+    public static CustomerDetailsBottomListFragment newInstance(boolean isMe,int mId,int type, ArrayList<CustomerBindBill> mCusBusiness) {
         Bundle args = new Bundle();
         CustomerDetailsBottomListFragment fragment = new CustomerDetailsBottomListFragment();
         args.putBoolean("isMe", isMe);
+        args.putInt("mId", mId);
         args.putInt("type", type);
         args.putParcelableArrayList("mCusBusiness", mCusBusiness);
         fragment.setArguments(args);
@@ -54,6 +56,7 @@ public class CustomerDetailsBottomListFragment extends ViewPagerLazyFragment {
     protected void LazyData() {
         if (getArguments() != null) {
             type = getArguments().getInt("type", 0);
+            mId = getArguments().getInt("mId", 0);
             isMe = getArguments().getBoolean("isMe", false);
             mCusBusiness = getArguments().getParcelableArrayList("mCusBusiness");
         }
@@ -201,7 +204,7 @@ public class CustomerDetailsBottomListFragment extends ViewPagerLazyFragment {
                                     .putExtra(Constants.Intents.CALLER, "Contact")
                                     .putExtra(Constants.Intents.INPUT_CLASS, CustomerContactActivity.class)
                                     .putExtra(Constants.Intents.TITLE, "客户联系人")
-                                    .putExtra(Constants.Intents.ID, bill.getId()));
+                                    .putExtra(Constants.Intents.ID, mId));
                             break;
                         case 2://拜访记录
                             startActivity(new Intent(ct, BillDetailsActivity.class)

+ 9 - 6
app_modular/appworks/src/main/java/com/uas/appworks/crm3_0/fragment/CustomerListDetailsFragment.java

@@ -198,8 +198,9 @@ public class CustomerListDetailsFragment extends ViewPagerLazyFragment {
                         }
 
                         BillListGroupModel.BillListField billListField = new BillListGroupModel.BillListField();
-                        billListField.setId(id);
-                        billListField.setStatus(status);
+                        if ("单据状态".equals(caption)){
+                            status= values;
+                        }
                         billListField.setCaption(caption);
                         billListField.setField(dataIndex);
                         billListField.setValue(values);
@@ -208,6 +209,8 @@ public class CustomerListDetailsFragment extends ViewPagerLazyFragment {
                         billListFields.add(billListField);
                     }
                 }
+                groupModel.setId(id);
+                groupModel.setStatus(status);
                 if (!ListUtils.isEmpty(billListFields)) {
                     groupModel.setBillFields(billListFields);
                     groupModels.add(groupModel);
@@ -226,7 +229,7 @@ public class CustomerListDetailsFragment extends ViewPagerLazyFragment {
 
             mListAdapter = new BillListAdapter(ct, groupModels, new BillListAdapter.OnAdapterListener() {
                 @Override
-                public void onClick(BillListGroupModel.BillListField field) {
+                public void onClick(BillListGroupModel mBillListGroupModel) {
                     CharSequence title = getActivity().getTitle();
                     String titleStr="";
                     if (!TextUtils.isEmpty(title)) {
@@ -235,18 +238,18 @@ public class CustomerListDetailsFragment extends ViewPagerLazyFragment {
                             titleStr= titleStr.replace("列表","");
                         }
                     }
-                    if (field.getStatus().equals("在录入")) {
+                    if (mBillListGroupModel.getStatus().equals("在录入")) {
                         startActivity(new Intent(ct, CustomerBillInputActivity.class)
                                 .putExtra(Constants.Intents.CALLER, mCaller)
                                 .putExtra(Constants.Intents.TITLE, titleStr)
                                 .putExtra(Constants.Intents.MY_DOIT, isMe)
-                                .putExtra(Constants.Intents.ID, field.getId()));
+                                .putExtra(Constants.Intents.ID, mBillListGroupModel.getId()));
                     } else {
                         startActivity(new Intent(ct, CustomerDetails3_0Activity.class)
                                 .putExtra(Constants.Intents.CALLER, mCaller)
                                 .putExtra(Constants.Intents.TITLE, titleStr)
                                 .putExtra(Constants.Intents.MY_DOIT, isMe)
-                                .putExtra(Constants.Intents.ID, field.getId()));
+                                .putExtra(Constants.Intents.ID, mBillListGroupModel.getId()));
                     }
 
                 }