ソースを参照

b2b商务备份

raomeng 8 年 前
コミット
d30bba0fe8
30 ファイル変更972 行追加44 行削除
  1. 1 1
      WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/PublicMessageAdapter.java
  2. 3 3
      WeiChat/version.properties
  3. 3 0
      app_core/common/src/main/java/com/core/app/Constants.java
  4. 1 1
      app_core/common/src/main/java/com/core/utils/CommonUtil.java
  5. 37 0
      app_core/common/src/main/res/layout/view_net_error.xml
  6. 5 4
      app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java
  7. 4 0
      app_modular/apputils/src/main/java/com/modular/apputils/activity/BaseNetActivity.java
  8. 11 10
      app_modular/apputils/src/main/java/com/modular/apputils/activity/SelectNetAcitivty.java
  9. 4 2
      app_modular/apputils/src/main/java/com/modular/apputils/utils/SwitchUtil.java
  10. 110 0
      app_modular/apputils/src/main/java/com/modular/apputils/utils/TestStr.java
  11. 1 0
      app_modular/appworks/src/main/AndroidManifest.xml
  12. 7 5
      app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/form/DataFormDetailActivity.java
  13. 23 18
      app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/activity/BusinessTravelActivity.java
  14. 190 0
      app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/activity/PurchaseDetailsActivity.java
  15. 218 0
      app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/adapter/PurchaseDetailsAdapter.java
  16. 85 0
      app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/model/Purchase.java
  17. 10 0
      app_modular/appworks/src/main/java/com/uas/appworks/adapter/B2BQuotePriceAdapter.java
  18. 0 0
      app_modular/appworks/src/main/java/com/uas/appworks/fragment/B2BBusinessListFragment.java
  19. 10 0
      app_modular/appworks/src/main/java/com/uas/appworks/model/bean/B2BInquiryDetailBean.java
  20. 10 0
      app_modular/appworks/src/main/java/com/uas/appworks/model/bean/B2BQuotePriceBean.java
  21. 8 0
      app_modular/appworks/src/main/res/drawable/selector_b2b_list_item_bg.xml
  22. 4 0
      app_modular/appworks/src/main/res/drawable/shape_b2b_detail_edittext.xml
  23. 13 0
      app_modular/appworks/src/main/res/layout/activity_purchase_details.xml
  24. 18 0
      app_modular/appworks/src/main/res/layout/item_btn.xml
  25. 16 0
      app_modular/appworks/src/main/res/layout/item_ls_purchase.xml
  26. 55 0
      app_modular/appworks/src/main/res/layout/item_purchase.xml
  27. 0 0
      app_modular/appworks/src/main/res/layout/layout_list_b2b_detail_edit.xml
  28. 29 0
      app_modular/appworks/src/main/res/layout/layout_list_b2b_detail_text.xml
  29. 29 0
      app_modular/appworks/src/main/res/layout/layout_list_b2b_white_detail_text.xml
  30. 67 0
      app_modular/appworks/src/main/res/layout/layout_list_subsection_quotation.xml

+ 1 - 1
WeiChat/src/main/java/com/xzjmyk/pm/activity/adapter/PublicMessageAdapter.java

@@ -465,7 +465,7 @@ public class PublicMessageAdapter extends BaseAdapter implements BusinessCircleA
                     builder.append("、");
             }
             if (message.getPraise() > praises.size()) {
-                builder.append("...");
+                builder.append("..."+"共"+message.getPraise()+"个点赞");
             }
 
             viewHolder.multi_praise_tv.setText(builder);

+ 3 - 3
WeiChat/version.properties

@@ -1,5 +1,5 @@
-#Tue Jan 16 16:32:48 CST 2018
-debugName=466
+#Tue Jan 16 11:12:55 CST 2018
+debugName=435
 versionName=624
-debugCode=466
+debugCode=435
 versionCode=163

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

@@ -473,5 +473,8 @@ public class Constants {
          * B2B商务
          */
         String B2B_COMPANY_BEAN = "b2b_company_bean";
+
+        String KEY_PURCHASE_ID="key_purchase_id";
+        String KEY_PURCHASE_STATUS="key_purchase_status";
     }
 }

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

@@ -101,7 +101,7 @@ public class CommonUtil {
         }
         String baseUrl = getSharedPreferences(ct, "erp_baseurl");
 //        if (BaseConfig.isDebug()){
-//            baseUrl="http://192.168.253.35:8080/ERP/";
+//            baseUrl="http://192.168.253.203:8090/ERP/";
 //        }
 //        baseUrl="http://192.168.253.203:8090/ERP/
 

+ 37 - 0
app_core/common/src/main/res/layout/view_net_error.xml

@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/rl_empty"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+
+        <TextView
+            android:id="@+id/textViewMessage"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerInParent="true"
+            android:layout_marginTop="16dp"
+            android:drawableTop="@drawable/ic_empty"
+            android:text="@string/common_list_empty"
+            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textColor="@color/gray_light" />
+
+        <Button
+            android:id="@+id/buttonEmpty"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_below="@+id/textViewMessage"
+            android:layout_centerHorizontal="true"
+            android:layout_marginTop="16dp"
+            android:text="@string/empty_button"
+            android:visibility="gone" />
+    </RelativeLayout>
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" />
+</RelativeLayout>

+ 5 - 4
app_modular/appmessages/src/main/java/com/modular/appmessages/presenter/MessagePresenter.java

@@ -61,6 +61,7 @@ import com.modular.booking.activity.services.BServiceListActivity;
 import com.modular.booking.model.SBMenuModel;
 import com.uas.appworks.CRM.erp.activity.DeviceManageActivity;
 import com.uas.appworks.OA.platform.activity.BusinessTravelActivity;
+import com.uas.appworks.OA.platform.activity.PurchaseDetailsActivity;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -597,8 +598,8 @@ public class MessagePresenter implements OnHttpResultListener {
         List<MessageModel> models = new ArrayList<>();
         List<MessageModel> detailModels = new ArrayList<>();
         MessageModel model = null;
-        MessageModel  detailModel = null;
-        LogUtil.i("array="+array.size());
+        MessageModel detailModel = null;
+        LogUtil.i("array=" + array.size());
         for (int i = 0; i < array.size(); i++) {
             object = array.getJSONObject(i);
             model = new MessageModel();
@@ -620,7 +621,7 @@ public class MessagePresenter implements OnHttpResultListener {
                     detailModel.setId(JSONUtil.getInt(detail, "id"));
                     detailModel.setTitle(JSONUtil.getText(detail, "title"));
                     detailModel.setSubTitle(JSONUtil.getText(detail, "subTitle"));
-                    detailModel.setTime(DateFormatUtil.long2Str(JSONUtil.getTime(detail,"createTime"), "yyyy-MM-dd HH:mm"));
+                    detailModel.setTime(DateFormatUtil.long2Str(JSONUtil.getTime(detail, "createTime"), "yyyy-MM-dd HH:mm"));
                     detailModel.setType(type);
                     detailModel.setHierarchy(1);
                     detailModels.add(detailModel);
@@ -1274,7 +1275,7 @@ public class MessagePresenter implements OnHttpResultListener {
                 ct.startActivity(intent);
                 break;
             case 10:
-                intent = new Intent(ct, DeviceManageActivity.class);
+                intent = new Intent(ct, PurchaseDetailsActivity.class).putExtra(Constants.FLAG.KEY_PURCHASE_STATUS, "待回复");
                 ct.startActivity(intent);
                 break;
             default:

+ 4 - 0
app_modular/apputils/src/main/java/com/modular/apputils/activity/BaseNetActivity.java

@@ -11,6 +11,7 @@ import android.support.annotation.NonNull;
 import android.support.v4.app.ActivityCompat;
 import android.support.v4.content.ContextCompat;
 import android.util.DisplayMetrics;
+import android.util.Log;
 import android.util.SparseArray;
 import android.view.View;
 
@@ -134,6 +135,9 @@ public abstract class BaseNetActivity extends ActionBackActivity {
                         }
                         onHttpListener.onSuccess(record, message, tags);
                     } catch (Exception e) {
+                        if (e != null && e.getMessage() != null) {
+                            Log.i(TAG, e.getMessage());
+                        }
                         e.printStackTrace();
                     }
                     dismissProgress();

+ 11 - 10
app_modular/apputils/src/main/java/com/modular/apputils/activity/SelectNetAcitivty.java

@@ -125,6 +125,9 @@ public class SelectNetAcitivty extends OABaseActivity {
                 if (bundle != null) {
                     if (bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
                         String result = bundle.getString(CodeUtils.RESULT_STRING);
+                        LogUtil.i("result=" + result);
+                        lastKey = result;
+                        showLoading();
                         loadSearch(page = 1, result);
                     }
                 }
@@ -195,13 +198,13 @@ public class SelectNetAcitivty extends OABaseActivity {
 //            String kwUp = keyWork.toUpperCase();
 //            StringBuilder conditionBulid = new StringBuilder();
 //            for (Map.Entry<String, String> e : configMap.entrySet()) {
-//                conditionBulid.append("upper(" +e.getValue()+ ") like '%" + kwUp+ "%' or ");
+//                conditionBulid.append("upper(" + e.getValue() + ") like '%" + kwUp + "%' or ");
 //            }
-//            if (conditionBulid.length()>2){
-//                conditionBulid.delete(conditionBulid.length()-3,conditionBulid.length());
+//            if (conditionBulid.length() > 2) {
+//                conditionBulid.delete(conditionBulid.length() - 3, conditionBulid.length());
 //            }
 //            condition = conditionBulid.toString();
-//            LogUtil.i("condition="+condition);
+//            LogUtil.i("condition=" + condition);
 //        }
         HttpClient.Builder builder = new HttpClient.Builder();
         boolean isForm = StringUtil.isEmpty(gCaller);
@@ -302,19 +305,17 @@ public class SelectNetAcitivty extends OABaseActivity {
                     }
                 }
             });
-            if (ListUtils.isEmpty(models)) {
-                mEmptyLayout.showEmpty();
-            }
+
         } else {
             if (page == 1) {
                 mAdapter.setModels(models);
-                if (ListUtils.isEmpty(models)) {
-                    mEmptyLayout.showEmpty();
-                }
             } else {
                 mAdapter.addModls(models);
             }
         }
+        if (ListUtils.isEmpty(models)) {
+            mEmptyLayout.showEmpty();
+        }
     }
 
     private String getShowName(Map<String, String> object) throws Exception {

+ 4 - 2
app_modular/apputils/src/main/java/com/modular/apputils/utils/SwitchUtil.java

@@ -8,12 +8,14 @@ import com.common.config.BaseConfig;
  */
 
 public class SwitchUtil {
-
     public static boolean showYiyuanjuan() {
-        return false;
+        return true;
     }
 
     public static boolean showShebeiguanli() {
+        return  true;
+    }
+    public static boolean newFeePlease() {
         return  false;
     }
 

+ 110 - 0
app_modular/apputils/src/main/java/com/modular/apputils/utils/TestStr.java

@@ -42,4 +42,114 @@ public class TestStr {
            "\t\"em_cttpid\": null,\n" +
            "\t\"sessionId\": \"FF4B29623F0E5CD9A4D79160ED85160C\"\n" +
            "}";
+
+
+   public static String PURCHASE_STR="{\n" +
+           "\t\"CLIENT\": \"凤唐物联技术有限公司\",\n" +
+           "\t\"ADDRESS\": \"凤唐物联技术有限公司收货地址\",\n" +
+           "\t\"CODE\": \"W76267272828\",\n" +
+           "\t\"TIME\": \"2018-01-01\",\n" +
+           "\t\"REMARKS\": null,\n" +
+           "\t\"ALLS\": 30000,\n" +
+           "\t\"DATA\": [{\n" +
+           "\t\t\"ID\": 17,\n" +
+           "\t\t\"TIME\": \"2018-01-01\",\n" +
+           "\t\t\"REMARKS\": null,\n" +
+           "\t\t\"ALLS\": 30000,\n" +
+           "\t\t\"DELIVERYDATE\": null,\n" +
+           "\t\t\"NUMBER\": null\n" +
+           "\t},\n" +
+           "\t{\n" +
+           "\t\t\"ID\": 16,\n" +
+           "\t\t\"TIME\": \"2018-01-01\",\n" +
+           "\t\t\"REMARKS\": null,\n" +
+           "\t\t\"ALLS\": 30000,\n" +
+           "\t\t\"DELIVERYDATE\": null,\n" +
+           "\t\t\"NUMBER\": null\n" +
+           "\t},\n" +
+           "\t{\n" +
+           "\t\t\"ID\": 15,\n" +
+           "\t\t\"TIME\": \"2018-01-01\",\n" +
+           "\t\t\"REMARKS\": null,\n" +
+           "\t\t\"ALLS\": 30000,\n" +
+           "\t\t\"DELIVERYDATE\": null,\n" +
+           "\t\t\"NUMBER\": null\n" +
+           "\t},\n" +
+           "\t{\n" +
+           "\t\t\"ID\": 14,\n" +
+           "\t\t\"TIME\": \"2018-01-01\",\n" +
+           "\t\t\"REMARKS\": null,\n" +
+           "\t\t\"ALLS\": 30000,\n" +
+           "\t\t\"DELIVERYDATE\": null,\n" +
+           "\t\t\"NUMBER\": null\n" +
+           "\t},\n" +
+           "\t{\n" +
+           "\t\t\"ID\": 13,\n" +
+           "\t\t\"TIME\": \"2018-01-01\",\n" +
+           "\t\t\"REMARKS\": null,\n" +
+           "\t\t\"ALLS\": 30000,\n" +
+           "\t\t\"DELIVERYDATE\": null,\n" +
+           "\t\t\"NUMBER\": null\n" +
+           "\t},\n" +
+           "\t{\n" +
+           "\t\t\"ID\": 10,\n" +
+           "\t\t\"TIME\": \"2018-01-01\",\n" +
+           "\t\t\"REMARKS\": null,\n" +
+           "\t\t\"ALLS\": 30000,\n" +
+           "\t\t\"DELIVERYDATE\": null,\n" +
+           "\t\t\"NUMBER\": null\n" +
+           "\t},\n" +
+           "\t{\n" +
+           "\t\t\"ID\": 11,\n" +
+           "\t\t\"TIME\": \"2018-01-01\",\n" +
+           "\t\t\"REMARKS\": null,\n" +
+           "\t\t\"ALLS\": 30000,\n" +
+           "\t\t\"DELIVERYDATE\": null,\n" +
+           "\t\t\"NUMBER\": null\n" +
+           "\t},\n" +
+           "\t{\n" +
+           "\t\t\"ID\": 12,\n" +
+           "\t\t\"TIME\": \"2018-01-01\",\n" +
+           "\t\t\"REMARKS\": null,\n" +
+           "\t\t\"ALLS\": 30000,\n" +
+           "\t\t\"DELIVERYDATE\": null,\n" +
+           "\t\t\"NUMBER\": null\n" +
+           "\t}],\n" +
+           "\t\"fields\": [{\n" +
+           "\t\t\"caption\": \"ID\",\n" +
+           "\t\t\"field\": \"ID\",\n" +
+           "\t\t\"type\": \"int\",\n" +
+           "\t\t\"needInput\": true\n" +
+           "\t},\n" +
+           "\t{\n" +
+           "\t\t\"caption\": \"单据时间\",\n" +
+           "\t\t\"field\": \"TIME\",\n" +
+           "\t\t\"type\": \"date\",\n" +
+           "\t\t\"needInput\": true\n" +
+           "\t},\n" +
+           "\t{\n" +
+           "\t\t\"caption\": \"备注\",\n" +
+           "\t\t\"field\": \"REMARKS\",\n" +
+           "\t\t\"type\": \"S\",\n" +
+           "\t\t\"needInput\": true\n" +
+           "\t},\n" +
+           "\t{\n" +
+           "\t\t\"caption\": \"总额\",\n" +
+           "\t\t\"field\": \"ALLS\",\n" +
+           "\t\t\"type\": \"S\",\n" +
+           "\t\t\"needInput\": true\n" +
+           "\t},\n" +
+           "\t{\n" +
+           "\t\t\"caption\": \"交货时间\",\n" +
+           "\t\t\"field\": \"DELIVERYDATE\",\n" +
+           "\t\t\"type\": \"date\",\n" +
+           "\t\t\"needInput\": true\n" +
+           "\t},\n" +
+           "\t{\n" +
+           "\t\t\"caption\": \"数量\",\n" +
+           "\t\t\"field\": \"NUMBER\",\n" +
+           "\t\t\"type\": \"S\",\n" +
+           "\t\t\"needInput\": true\n" +
+           "\t}]\n" +
+           "}";
 }

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

@@ -401,6 +401,7 @@
             android:theme="@style/StyledBlueIndicators"
             android:windowSoftInputMode="adjustPan|stateHidden" />
         <activity android:name=".activity.PublicInquiryDetailActivity" />
+        <activity android:name=".OA.platform.activity.PurchaseDetailsActivity"/>
     </application>
 
 </manifest>

+ 7 - 5
app_modular/appworks/src/main/java/com/uas/appworks/OA/erp/activity/form/DataFormDetailActivity.java

@@ -52,6 +52,7 @@ import com.core.widget.view.selectcalendar.bean.Data;
 import com.lidroid.xutils.ViewUtils;
 import com.modular.apputils.activity.SelectNetAcitivty;
 import com.modular.apputils.utils.PopupWindowHelper;
+import com.modular.apputils.utils.SwitchUtil;
 import com.uas.appworks.OA.erp.activity.CommonDocDetailsActivity;
 import com.uas.appworks.OA.erp.model.form.GroupData;
 import com.uas.appworks.R;
@@ -75,6 +76,7 @@ import java.util.regex.Pattern;
 /**
  * @desc:动态表单界面
  * @author:Arison on 2016/11/8
+ * update 更新敏感操作,fpd_start_time(fpd_date1)fpd_end_time(fpd_date2)
  */
 public class DataFormDetailActivity extends BaseActivity implements View.OnClickListener {
 
@@ -660,8 +662,8 @@ public class DataFormDetailActivity extends BaseActivity implements View.OnClick
                 } else if ("FeePlease!CCSQ".equals(caller) || "FeePlease!CCSQ!new".equals(caller)) {
                     startDate = "fp_prestartdate";
                     endDate = "fp_preenddate";
-                    d_startDate = "fpd_date1";
-                    d_endDate = "fpd_date2";
+                    d_startDate = SwitchUtil.newFeePlease()?"fpd_start_time":"fpd_date1";
+                    d_endDate = SwitchUtil.newFeePlease()?"fpd_end_time":"fpd_date2";
 
                     formidkey = "fp_id";
                     detailkey_id = "fpd_id";//明细id
@@ -1624,14 +1626,14 @@ public class DataFormDetailActivity extends BaseActivity implements View.OnClick
                 mAdapter.getmListData().get(model.getGroupId()).getDatas().get(va_alltimes - 1).setValue(startDate);
                 mAdapter.getmListData().get(model.getGroupId()).getDatas().get(va_alldays - 1).setValue(endDate);
             }
-            if ("fpd_date1".equals(field) || "fpd_date2".equals(field)) {
+            if ("fpd_date1".equals(field) || "fpd_date2".equals(field)||"fpd_start_time".equals(field)||"fpd_end_time".equals(field)) {
                 List<Data> tempLists = mAdapter.getmListData().get(model.getGroupId()).getDatas();
                 for (int i = 0; i < tempLists.size(); i++) {
                     Data tempData = tempLists.get(i);
-                    if (tempData.getField().equals("fpd_date1")) {
+                    if (tempData.getField().equals(SwitchUtil.newFeePlease()?"fpd_start_time":"fpd_date1")) {
                         va_alldays = i + 1;
                     }
-                    if (tempData.getField().equals("fpd_date2")) {
+                    if (tempData.getField().equals(SwitchUtil.newFeePlease()?"fpd_end_time":"fpd_date2")) {
                         va_alltimes = i + 1;
                     }
                 }

+ 23 - 18
app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/activity/BusinessTravelActivity.java

@@ -6,6 +6,7 @@ import android.support.v7.widget.RecyclerView;
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
+import com.common.LogUtil;
 import com.common.config.BaseConfig;
 import com.common.data.JSONUtil;
 import com.common.data.ListUtils;
@@ -94,29 +95,33 @@ public class BusinessTravelActivity extends BaseNetActivity implements OnSmartHt
 
 
     private void handlerData(String message) throws Exception {
-        JSONObject object= JSON.parseObject(message);
-        JSONArray listdata = JSONUtil.getJSONArray(object, "listdata");
-        List<BusinessTravel> models = new ArrayList<>();
-        BusinessTravel model = null;
-        String cttpid=JSONUtil.getText(object, "em_cttpid");
-        for (int i = 0; i < listdata.size(); i++) {
-            JSONObject data = listdata.getJSONObject(i);
-            model = new BusinessTravel();
-            model.setType(BusinessTravel.TITLE);
-            model.setCode(JSONUtil.getText(data, "FP_ID"));
-            models.add(model);
-            JSONArray reimbursements = JSONUtil.getJSONArray(data, "reimbursement");
-            for (int j = 0; j < reimbursements.size(); j++) {
-                models.add(new BusinessTravel(cttpid,reimbursements.getJSONObject(i)));
+        LogUtil.i("handlerData");
+        try{
+            JSONObject object= JSON.parseObject(message);
+            JSONArray listdata = JSONUtil.getJSONArray(object, "listdata");
+            List<BusinessTravel> models = new ArrayList<>();
+            BusinessTravel model = null;
+            String cttpid=JSONUtil.getText(object, "em_cttpid");
+            for (int i = 0; i < listdata.size(); i++) {
+                JSONObject data = listdata.getJSONObject(i);
+                model = new BusinessTravel();
+                model.setType(BusinessTravel.TITLE);
+                model.setCode(JSONUtil.getText(data, "FP_ID"));
+                models.add(model);
+                JSONArray reimbursements = JSONUtil.getJSONArray(data, "reimbursement");
+                for (int j = 0; j < reimbursements.size(); j++) {
+                    models.add(new BusinessTravel(cttpid,reimbursements.getJSONObject(i)));
+                }
             }
+            setAdapter(models);
+        }catch (Exception e){
+            LogUtil.i("Exception="+e.getMessage());
         }
-        setAdapter(models);
+
     }
 
     private void setAdapter(List<BusinessTravel> models) {
-        if (BaseConfig.isDebug()) {
-
-        }
+        LogUtil.i("models="+models.size());
         if (mAdapter == null) {
             mAdapter = new BusinessTravelAdapter(ct, models, new BusinessTravelAdapter.OnItemClickListener() {
                 @Override

+ 190 - 0
app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/activity/PurchaseDetailsActivity.java

@@ -0,0 +1,190 @@
+package com.uas.appworks.OA.platform.activity;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.support.v7.widget.AppCompatButton;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.text.Editable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.EditText;
+import android.widget.ListView;
+import android.widget.TextView;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baidu.cyberplayer.utils.G;
+import com.chad.library.adapter.base.BaseViewHolder;
+import com.common.LogUtil;
+import com.common.data.CalendarUtil;
+import com.common.data.DateFormatUtil;
+import com.common.data.JSONUtil;
+import com.common.data.ListUtils;
+import com.common.data.StringUtil;
+import com.common.thread.ThreadPool;
+import com.core.app.Constants;
+import com.core.net.http.http.OAHttpHelper;
+import com.core.utils.CommonUtil;
+import com.core.utils.time.wheel.DateTimePicker;
+import com.core.widget.listener.EditChangeListener;
+import com.me.network.app.http.Method;
+import com.modular.apputils.activity.BaseNetActivity;
+import com.modular.apputils.listener.OnSmartHttpListener;
+import com.modular.apputils.network.Parameter;
+import com.modular.apputils.network.Tags;
+import com.modular.apputils.utils.TestStr;
+import com.uas.appworks.OA.platform.adapter.PurchaseDetailsAdapter;
+import com.uas.appworks.OA.platform.model.Purchase;
+import com.uas.appworks.R;
+
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * Created by Bitlike on 2018/1/15.
+ */
+
+public class PurchaseDetailsActivity extends BaseNetActivity implements OnSmartHttpListener {
+
+    private long varId;
+    private String varStatus;
+
+    private RecyclerView mRecyclerView;
+    private PurchaseDetailsAdapter mAdapter;
+
+    @Override
+    protected int getLayoutId() {
+        return R.layout.activity_purchase_details;
+    }
+
+    @Override
+    protected String getBaseUrl() {
+        return CommonUtil.getAppBaseUrl(ct);
+    }
+
+    @Override
+    protected void init() throws Exception {
+        Intent intent = getIntent();
+        if (intent != null) {
+            varId = intent.getLongExtra(Constants.FLAG.KEY_PURCHASE_ID, 0);
+            varStatus = intent.getStringExtra(Constants.FLAG.KEY_PURCHASE_STATUS);
+        }
+        if (varStatus == null) {
+            varStatus = "";
+        }
+        initView();
+        initData();
+    }
+
+    private void initView() {
+        mRecyclerView = findViewById(R.id.mRecyclerView);
+        mRecyclerView.setLayoutManager(new LinearLayoutManager(ct));
+
+    }
+
+    private void initData() {
+        handleMessage(TestStr.PURCHASE_STR);
+    }
+
+
+    private void verifiReply() {
+        reply();
+    }
+
+    private void reply() {
+        Parameter.Builder builder = new Parameter.Builder();
+        String json = null;
+        builder.mode(Method.POST)
+                .url("sale/orders/items/{orderItemId}/reply")
+                .addParams("json", json);
+        requestHttp(builder, this);
+    }
+
+    private Purchase getPurchase(int id, JSONObject object, String caption, String field) {
+        Purchase purchase = new Purchase(id);
+        purchase.setCaption(caption);
+        purchase.setField(field);
+        purchase.setValues(JSONUtil.getText(object, purchase.getField()));
+        return purchase;
+    }
+
+    private void handleMessage(final String message) {
+        ThreadPool.getThreadPool().addTask(new Runnable() {
+            @Override
+            public void run() {
+                JSONObject object = JSON.parseObject(message);
+                final List<Purchase> dataList = new ArrayList<>();
+                //添加头部固定功能
+                dataList.add(getPurchase(0, object, "客户", "CLIENT"));
+                dataList.add(getPurchase(0, object, "收货地址", "ADDRESS"));
+                dataList.add(getPurchase(0, object, "订单号", "CODE"));
+                dataList.add(getPurchase(0, object, "单据时间", "TIME"));
+                dataList.add(getPurchase(0, object, "备注", "REMARKS"));
+                dataList.add(getPurchase(0, object, "总额", "ALLS"));
+
+                JSONArray dataJSONs = JSONUtil.getJSONArray(object, "DATA");
+                JSONArray fields = JSONUtil.getJSONArray(object, "fields");
+
+                String idField = null;
+                for (int j = 0; j < fields.size(); j++) {
+                    if ("ID".equals(JSONUtil.getText(fields.getJSONObject(j), "caption"))) {
+                        idField = JSONUtil.getText(fields.getJSONObject(j), "field");
+                        break;
+                    }
+                }
+                if (!ListUtils.isEmpty(dataJSONs) && !ListUtils.isEmpty(fields)) {
+                    for (int i = 0; i < dataJSONs.size(); i++) {
+                        JSONObject dataJSON = dataJSONs.getJSONObject(i);
+                        for (int j = 0; j < fields.size(); j++) {
+                            JSONObject fieldJSON = fields.getJSONObject(j);
+                            Purchase purchaseItem = new Purchase();
+                            purchaseItem.setField(JSONUtil.getText(fieldJSON, "field"));
+                            purchaseItem.setCaption(JSONUtil.getText(fieldJSON, "caption"));
+                            purchaseItem.setType(JSONUtil.getText(fieldJSON, "type"));
+                            purchaseItem.setNeedInput(JSONUtil.getBoolean(fieldJSON, "needInput"));
+                            purchaseItem.setValues(JSONUtil.getText(dataJSON, purchaseItem.getField()));
+                            purchaseItem.setId(JSONUtil.getInt(dataJSON, idField));
+                            dataList.add(purchaseItem);
+                        }
+                    }
+                }
+                OAHttpHelper.getInstance().post(new Runnable() {
+                    @Override
+                    public void run() {
+                        setData2Adapter(dataList);
+                    }
+                });
+            }
+        });
+    }
+
+    private void setData2Adapter(List<Purchase> dataList) {
+        mAdapter = new PurchaseDetailsAdapter(ct, varStatus, dataList);
+        mAdapter.setOnReplyLisenter(new PurchaseDetailsAdapter.OnReplyLisenter() {
+            @Override
+            public void reply(List<Purchase> purchases) {
+                LogUtil.prinlnLongMsg("gongpengming","json="+JSON.toJSONString(purchases));
+            }
+        });
+        mRecyclerView.setAdapter(mAdapter);
+
+    }
+
+    @Override
+    public void onSuccess(int what, String message, Tags tag) throws Exception {
+
+    }
+
+    @Override
+    public void onFailure(int what, String message, Tags tag) throws Exception {
+
+    }
+}

+ 218 - 0
app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/adapter/PurchaseDetailsAdapter.java

@@ -0,0 +1,218 @@
+package com.uas.appworks.OA.platform.adapter;
+
+import android.app.Activity;
+import android.content.Context;
+import android.support.v7.widget.RecyclerView;
+import android.text.Editable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import com.common.LogUtil;
+import com.common.data.CalendarUtil;
+import com.common.data.DateFormatUtil;
+import com.common.data.ListUtils;
+import com.common.data.StringUtil;
+import com.common.system.DisplayUtil;
+import com.core.utils.time.wheel.DateTimePicker;
+import com.core.widget.listener.EditChangeListener;
+import com.uas.appworks.OA.platform.model.Purchase;
+import com.uas.appworks.R;
+
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * Created by Bitlike on 2018/1/16.
+ */
+
+public class PurchaseDetailsAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
+    private Context context;
+    private List<Purchase> purchases;
+    private LayoutInflater mInflater;
+    private String status;
+
+    public PurchaseDetailsAdapter(Context context, String status, List<Purchase> purchases) {
+        this.context = context;
+        this.purchases = purchases;
+        this.status = status;
+        mInflater = LayoutInflater.from(context);
+    }
+
+    @Override
+    public int getItemViewType(int position) {
+        return position;
+    }
+
+    @Override
+    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+        return viewType == (getItemCount() - 1) ? new BtnViewHolder(parent) : new ViewHolder(parent);
+    }
+
+    @Override
+    public int getItemCount() {
+        return ListUtils.getSize(purchases) + 1;
+    }
+
+
+    class BtnViewHolder extends RecyclerView.ViewHolder {
+        Button replyBtn;
+
+        public BtnViewHolder(ViewGroup viewGroup) {
+            this(mInflater.inflate(R.layout.item_btn, viewGroup, false));
+        }
+
+        public BtnViewHolder(View itemView) {
+            super(itemView);
+            replyBtn = itemView.findViewById(R.id.replyBtn);
+        }
+    }
+
+    class ViewHolder extends RecyclerView.ViewHolder {
+        TextView captionTV, valueTv;
+        EditText valueEt;
+        View line;
+
+        public ViewHolder(ViewGroup viewGroup) {
+            this(mInflater.inflate(R.layout.item_purchase, viewGroup, false));
+        }
+
+        public ViewHolder(View itemView) {
+            super(itemView);
+            captionTV = itemView.findViewById(R.id.captionTV);
+            valueTv = itemView.findViewById(R.id.valueTv);
+            valueEt = itemView.findViewById(R.id.valueEt);
+            line = itemView.findViewById(R.id.line);
+        }
+    }
+
+
+    @Override
+    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
+        if (holder instanceof ViewHolder && position < ListUtils.getSize(purchases)) {
+            onBindViewHolder((ViewHolder) holder, position);
+        } else if (holder instanceof BtnViewHolder) {
+            onBindViewHolder((BtnViewHolder) holder);
+        }
+    }
+
+    private void onBindViewHolder(BtnViewHolder holder) {
+        boolean canReply = (status != null && !status.equals("已结案"));
+        holder.replyBtn.setFocusable(canReply);
+        holder.replyBtn.setClickable(canReply);
+        holder.replyBtn.setPressed(!canReply);
+        int padd = DisplayUtil.dip2px(context, 10);
+        if (canReply) {
+            holder.replyBtn.setBackgroundResource(R.drawable.bg_bule_btn);
+            holder.replyBtn.setOnClickListener(onClickListener);
+
+        } else {
+            holder.replyBtn.setBackgroundResource(R.drawable.bg_orange_btn_pass);
+        }
+        holder.replyBtn.setPadding(padd, padd, padd, padd);
+    }
+
+    private void onBindViewHolder(ViewHolder holder, int position) {
+        Purchase purchase = purchases.get(position);
+        holder.captionTV.setText(purchase.getCaption());
+
+        if (purchase.isNeedInput()) {
+            holder.valueEt.setBackgroundResource(R.drawable.edit_hint_right_angle);
+            holder.valueEt.setClickable(true);
+            if (purchase.getType().equals("date")) {
+                holder.valueTv.setText(purchase.getValues());
+                holder.valueTv.setBackgroundResource(R.drawable.edit_hint_right_angle);
+                holder.valueEt.setVisibility(View.GONE);
+                holder.valueTv.setVisibility(View.VISIBLE);
+                holder.valueTv.setTag(position);
+                holder.valueTv.setOnClickListener(onClickListener);
+            } else {
+                holder.valueEt.setText(purchase.getValues());
+                holder.valueTv.setVisibility(View.GONE);
+                holder.valueEt.setVisibility(View.VISIBLE);
+                holder.valueEt.setFocusable(true);
+                holder.valueEt.addTextChangedListener(new TextChangListener(holder, position));
+            }
+        } else {
+            holder.valueTv.setText(StringUtil.isEmpty(purchase.getValues()) ? "无" : purchase.getValues());
+            holder.valueTv.setBackgroundDrawable(null);
+            holder.valueEt.setVisibility(View.GONE);
+            holder.valueTv.setVisibility(View.VISIBLE);
+        }
+        holder.line.setVisibility((position > 0 && purchases.get(position - 1).getId() != purchase.getId()) ? View.VISIBLE : View.GONE);
+//        holder.line.setVisibility(View.VISIBLE);
+    }
+
+    private View.OnClickListener onClickListener = new View.OnClickListener() {
+        @Override
+        public void onClick(View v) {
+            if (v.getId() == R.id.valueTv && v.getTag() != null && v.getTag() instanceof Integer) {
+                int position = (int) v.getTag();
+                showDateSelect(position);
+            } else if (v.getId() == R.id.replyBtn) {
+                if (onReplyLisenter != null) {
+                    onReplyLisenter.reply(purchases);
+                }
+            }
+        }
+    };
+
+    private void showDateSelect(final int position) {
+        DateTimePicker picker = new DateTimePicker((Activity) context, DateTimePicker.YEAR_MONTH_DAY);
+        picker.setRange(2000, 2030);
+        int year, month, day;
+        Date time = null;
+        if (ListUtils.getSize(purchases) > position && !StringUtil.isEmpty(purchases.get(position).getValues())) {
+            time = DateFormatUtil.str2date(purchases.get(position).getValues(), DateFormatUtil.YMD);
+        }
+        year = CalendarUtil.getYear(time);
+        month = CalendarUtil.getMonth(time);
+        day = CalendarUtil.getDay(time);
+        picker.setSelectedItem(year, month, day);
+        picker.setOnDateTimePickListener(new DateTimePicker.OnYearMonthDayTimePickListener() {
+            @Override
+            public void onDateTimePicked(String year, String month, String day, String hour, String minute) {
+                if (ListUtils.getSize(purchases) > position) {
+                    purchases.get(position).setValues(year + "-" + month + "-" + day);
+                    notifyItemChanged(position);
+                }
+            }
+        });
+        picker.show();
+    }
+
+    private class TextChangListener extends EditChangeListener {
+        ViewHolder hodler;
+        private int position;
+
+        public TextChangListener(ViewHolder hodler, int position) {
+            this.hodler = hodler;
+            this.position = position;
+        }
+
+        @Override
+        public void afterTextChanged(Editable s) {
+            if (this.position >= 0 && ListUtils.getSize(purchases) > this.position) {
+                if (this.hodler.valueEt != null && this.hodler.valueEt.getVisibility() == View.VISIBLE) {
+                    LogUtil.i("s=" + s.toString());
+                    LogUtil.i("position=" + this.position);
+                    purchases.get(this.position).setValues(s == null ? "" : s.toString());
+                }
+            }
+        }
+    }
+
+    private OnReplyLisenter onReplyLisenter;
+
+    public void setOnReplyLisenter(OnReplyLisenter onReplyLisenter) {
+        this.onReplyLisenter = onReplyLisenter;
+    }
+
+    public interface OnReplyLisenter {
+        void reply(List<Purchase> purchases);
+    }
+}

+ 85 - 0
app_modular/appworks/src/main/java/com/uas/appworks/OA/platform/model/Purchase.java

@@ -0,0 +1,85 @@
+package com.uas.appworks.OA.platform.model;
+
+/**
+ * Created by Bitlike on 2018/1/16.
+ */
+
+public class Purchase {
+    private int position;
+    private int id;
+    private String field;
+    private String caption;
+    private String values;
+    private String type;
+    private boolean needInput;
+
+    public Purchase(int position) {
+        this.position = position;
+        this.id = 0;
+        this.field = "";
+        this.values = "无";
+        this.caption = "";
+        this.type = "";
+        this.needInput = false;
+    }
+
+    public Purchase() {
+        this(0);
+    }
+
+    public String getCaption() {
+        return caption;
+    }
+
+    public void setCaption(String caption) {
+        this.caption = caption;
+    }
+
+    public int getPosition() {
+        return position;
+    }
+
+    public void setPosition(int position) {
+        this.position = position;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getField() {
+        return field;
+    }
+
+    public void setField(String field) {
+        this.field = field;
+    }
+
+    public String getValues() {
+        return values;
+    }
+
+    public void setValues(String values) {
+        this.values = values;
+    }
+
+    public String getType() {
+        return type;
+    }
+
+    public void setType(String type) {
+        this.type = type;
+    }
+
+    public boolean isNeedInput() {
+        return needInput;
+    }
+
+    public void setNeedInput(boolean needInput) {
+        this.needInput = needInput;
+    }
+}

+ 10 - 0
app_modular/appworks/src/main/java/com/uas/appworks/adapter/B2BQuotePriceAdapter.java

@@ -0,0 +1,10 @@
+package com.uas.appworks.adapter;
+
+/**
+ * @author RaoMeng
+ * @describe
+ * @date 2018/1/16 20:35
+ */
+
+public class B2BQuotePriceAdapter {
+}

+ 0 - 0
app_modular/appworks/src/main/java/com/uas/appworks/fragment/B2BBusinessListFragment1.java → app_modular/appworks/src/main/java/com/uas/appworks/fragment/B2BBusinessListFragment.java


+ 10 - 0
app_modular/appworks/src/main/java/com/uas/appworks/model/bean/B2BInquiryDetailBean.java

@@ -0,0 +1,10 @@
+package com.uas.appworks.model.bean;
+
+/**
+ * @author RaoMeng
+ * @describe
+ * @date 2018/1/18 18:13
+ */
+
+public class B2BInquiryDetailBean {
+}

+ 10 - 0
app_modular/appworks/src/main/java/com/uas/appworks/model/bean/B2BQuotePriceBean.java

@@ -0,0 +1,10 @@
+package com.uas.appworks.model.bean;
+
+/**
+ * @author RaoMeng
+ * @describe
+ * @date 2018/1/16 20:44
+ */
+
+public class B2BQuotePriceBean {
+}

+ 8 - 0
app_modular/appworks/src/main/res/drawable/selector_b2b_list_item_bg.xml

@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@color/me_menu_item_press" android:state_checked="true"/>
+    <item android:drawable="@color/me_menu_item_press" android:state_pressed="true"/>
+    <item android:drawable="@color/me_menu_item_press" android:state_selected="true"/>
+
+    <item android:drawable="@color/me_menu_item_normal"/>
+</selector>

+ 4 - 0
app_modular/appworks/src/main/res/drawable/shape_b2b_detail_edittext.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+
+</selector>

+ 13 - 0
app_modular/appworks/src/main/res/layout/activity_purchase_details.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/base_bg">
+
+    <android.support.v7.widget.RecyclerView
+        android:id="@+id/mRecyclerView"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent" />
+
+
+</RelativeLayout>

+ 18 - 0
app_modular/appworks/src/main/res/layout/item_btn.xml

@@ -0,0 +1,18 @@
+<?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="wrap_content">
+    <Button
+        android:id="@+id/replyBtn"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="20dp"
+        android:layout_marginRight="20dp"
+        android:layout_marginBottom="20dp"
+        android:layout_marginTop="20dp"
+        android:background="@drawable/bg_bule_btn"
+        android:padding="10dp"
+        android:text="@string/task_reply"
+        android:textColor="@color/white"
+        android:textSize="@dimen/text_main" />
+</RelativeLayout>

+ 16 - 0
app_modular/appworks/src/main/res/layout/item_ls_purchase.xml

@@ -0,0 +1,16 @@
+<?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="wrap_content"
+    android:focusableInTouchMode="true"
+    android:paddingBottom="@dimen/padding"
+    android:paddingLeft="@dimen/paddingApp">
+
+    <com.core.widget.MyListView
+        android:id="@+id/dataListView"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:dividerHeight="0dp"
+        android:focusableInTouchMode="false" />
+
+</RelativeLayout>

+ 55 - 0
app_modular/appworks/src/main/res/layout/item_purchase.xml

@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+    <View
+        android:id="@+id/line"
+        android:layout_marginTop="@dimen/padding"
+        android:layout_marginBottom="@dimen/padding"
+        android:layout_width="match_parent"
+        android:background="@color/item_line"
+        android:layout_height="@dimen/line"/>
+
+    <LinearLayout
+        style="@style/approvalStyle"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingLeft="@dimen/paddingApp">
+
+        <TextView
+            android:id="@+id/captionTV"
+            style="@style/approvalItemStyle"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_marginRight="10dp"
+            android:layout_weight="1" />
+
+        <FrameLayout
+            android:id="@+id/valuesFl"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="3">
+
+            <EditText
+                android:id="@+id/valueEt"
+                style="@style/approvalItemStyle"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:background="@drawable/edit_hint_right_angle"
+                android:hint="@string/common_input2"
+                android:textColor="@color/text_main" />
+
+            <TextView
+                android:id="@+id/valueTv"
+                style="@style/approvalItemStyle"
+                android:layout_width="match_parent"
+                android:background="@drawable/edit_hint_right_angle"
+                android:gravity="center|left"
+                android:hint="@string/common_select1"
+                android:textColor="@color/text_main"
+                android:visibility="gone" />
+        </FrameLayout>
+    </LinearLayout>
+
+</LinearLayout>

+ 0 - 0
app_modular/appworks/src/main/res/layout/layout_list_b2b_detail.xml → app_modular/appworks/src/main/res/layout/layout_list_b2b_detail_edit.xml


+ 29 - 0
app_modular/appworks/src/main/res/layout/layout_list_b2b_detail_text.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginLeft="6dp"
+    android:gravity="center_vertical"
+    android:orientation="horizontal"
+    android:padding="6dp">
+
+    <TextView
+        android:id="@+id/list_b2b_detail_caption_tv"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:text="@string/str_product_name"
+        android:textSize="14sp" />
+
+    <TextView
+        android:id="@+id/list_b2b_detail_value_tv"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="4dp"
+        android:layout_weight="3"
+        android:textColor="@color/black"
+        android:textSize="14sp"
+        tools:text="2018-01-21" />
+</LinearLayout>

+ 29 - 0
app_modular/appworks/src/main/res/layout/layout_list_b2b_white_detail_text.xml

@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:layout_marginLeft="6dp"
+    android:gravity="center_vertical"
+    android:orientation="horizontal"
+    android:padding="6dp">
+
+    <TextView
+        android:id="@+id/list_b2b_detail_text_caption_tv"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:text="@string/str_product_name"
+        android:textSize="14sp" />
+
+    <TextView
+        android:id="@+id/list_b2b_detail_text_value_tv"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="4dp"
+        android:layout_weight="3"
+        android:textColor="@color/black"
+        android:textSize="14sp"
+        tools:text="2018-01-21" />
+</LinearLayout>

+ 67 - 0
app_modular/appworks/src/main/res/layout/layout_list_subsection_quotation.xml

@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              xmlns:whatever="http://schemas.android.com/apk/res-auto"
+              android:layout_width="match_parent"
+              android:layout_height="wrap_content"
+              android:layout_marginLeft="12dp"
+              android:layout_marginRight="12dp"
+              android:orientation="vertical"
+    >
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center_vertical"
+        android:orientation="horizontal">
+
+        <View
+            style="@style/expense_table_v_1dp" />
+
+        <TextView
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="2"
+            android:paddingLeft="10dp"
+            android:textColor="@color/text_main" />
+
+        <View
+            style="@style/expense_table_v_1dp" />
+
+        <TextView
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:gravity="right"
+            android:paddingLeft="10dp"
+            android:text=">="
+            android:textColor="@color/text_main" />
+
+        <EditText
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="3"
+            android:background="@null"
+            android:paddingLeft="10dp"
+            android:textColor="@color/text_main"
+            android:textSize="14sp" />
+
+        <View
+            style="@style/expense_table_v_1dp" />
+
+        <ImageView
+            android:id="@+id/details_delete_im"
+            android:layout_width="0dp"
+            android:layout_height="20dp"
+            android:layout_gravity="center_vertical"
+            android:layout_weight="1"
+            android:paddingLeft="10dp"
+            android:src="@drawable/delete" />
+
+        <View
+            style="@style/expense_table_v_1dp"
+            />
+    </LinearLayout>
+
+    <View
+        style="@style/expense_table_h_1dp" />
+</LinearLayout>