notebook_model.dart 8.71 KB
import 'package:flutter/material.dart';
import 'package:one_key/constant/constant.dart';
import 'package:one_key/constant/error.dart';
import 'package:one_key/constant/state.dart';
import 'package:one_key/models/notebook.dart';
import 'package:one_key/net/base_resp.dart';
import 'package:one_key/net/dio_util.dart';
import 'package:one_key/net/http_url.dart';
import 'package:one_key/provider/table_manager_model.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/utils/utils.dart';
import 'package:provider/provider.dart';

import '../models/get_board_model.dart';

class NoteBookModel extends ChangeNotifier {
  List<Notebook> notebooks = []; //订单列表

  String totalmorning = ""; //一天统计
  String totalnoon = ""; //一天统计
  String totalnight = ""; //一天统计

  PageState pageState = PageState.Loading;

  bool isSimple = true;

  //获取已预订订单
  Future<List<Notebook>> getReserveList(
      BuildContext context, Map<String, String> params,
      {bool needLoading = false, bool showLoading = true}) async {
    if (needLoading) {
      pageState = PageState.Loading;
      showLoading = false;
      notifyListeners();
    }
    // pageState = PageState.Loading;
    // notifyListeners();
    BaseResp<List> baseResp = await DioUtil()
        .request<List>(context, Method.get, HttpUrl.get_reserve_list,
            data: params, showLoading: needLoading ? false : showLoading)
        .catchError((error) {
      print(error.toString());
      if (error is MyError) {
        switch (error.type) {
          case 1:
            pageState = PageState.ConnectivityError;
            break;
          case 2:
            pageState = PageState.ConnectivityTimeOut;
            break;
          default:
            pageState = PageState.ConnectivityError;
            break;
        }
      }
      notifyListeners();
    });
    if (baseResp == null) return null;
    notebooks = [];
    if (baseResp.code == Constant.status_success) {
      notebooks = baseResp.data.map<Notebook>((value) {
        return Notebook.fromJson(value);
      }).toList();
      // notebooks.removeWhere((element) => element.id == null);
      if (notebooks.isEmpty) {
        pageState = PageState.Empty;
      } else {
        if (notebooks.length > 0) {
          if (isSimple) {
            for (Notebook item in notebooks) {
              item.issimple = true;
            }
          } else {
            for (Notebook item in notebooks) {
              item.issimple = false;
            }
          }
        }
        pageState = PageState.Success;
      }
    } else {
      Utils.showToast(baseResp.msg ?? "");
    }
    notifyListeners();
    return notebooks;
  }

  //获取已预订订单
  Future<List<Notebook>> getReserveListSort(
      BuildContext context, Map<String, String> params,
      {bool needLoading = false, bool showLoading = true}) async {
    if (needLoading) {
      pageState = PageState.Loading;
      showLoading = false;
      notifyListeners();
    }

    BaseResp<List> baseResp = await DioUtil()
        .request<List>(context, Method.get, HttpUrl.get_reserve_list,
            data: params, showLoading: needLoading ? false : showLoading)
        .catchError((error) {
      print(error.toString());
      if (error is MyError) {
        switch (error.type) {
          case 1:
            pageState = PageState.ConnectivityError;
            break;
          case 2:
            pageState = PageState.ConnectivityTimeOut;
            break;
          default:
            pageState = PageState.ConnectivityError;
            break;
        }
      }
      notifyListeners();
    });
    if (baseResp == null) return null;
    notebooks = [];
    if (baseResp.code == Constant.status_success) {
      notebooks = baseResp.data.map<Notebook>((value) {
        return Notebook.fromJson(value);
      }).toList();
      // notebooks.removeWhere((element) => element.id == null);
      if (notebooks.isEmpty) {
        pageState = PageState.Empty;
      } else {
        TableManagerModel tableManagerModel =
            Provider.of<TableManagerModel>(context, listen: false);

        await tableManagerModel.getTableList(context);
        List<Notebook> temp = []; //其余订单排序
        List<Notebook> tempNo = []; //区域或者桌子被删除的订单排序
        List<Notebook> tempLast = []; //3、4、6订单放在最后
        print(notebooks);
        notebooks.forEach((notebook) {
          if (notebook.tableinfoList.length > 0) {
            if (notebook.status != '3' &&
                notebook.status != '4' &&
                notebook.status != '6') {
              //区域ID存在
              bool tempArea = tableManagerModel.tableOuterList.any(
                  (element) => element.rid == notebook.tableinfoList[0].rid);

              //桌子id存在
              List tables = tableManagerModel.tableOuterList
                  .where(
                      (element) => element.rid == notebook.tableinfoList[0].rid)
                  .toList();
              bool tempTable = false;
              if (tables != null && tables.length > 0) {
                tempTable = tables[0].list.any(
                    (element) => element.id == notebook.tableinfoList[0].id);
              }

              if (tempArea && tempTable) {
                tableManagerModel.tableOuterList.forEach((elementAll) {
                  //订单第一个桌子的区域存在
                  if (notebook.tableinfoList[0].rid == elementAll.rid) {
                    //桌子id存在
                    bool tempTable = elementAll.list.any((element) =>
                        element.id == notebook.tableinfoList[0].id);
                    if (tempTable) {
                      elementAll.list.forEach((element) {
                        if (notebook.tableinfoList[0].id == element.id) {
//桌子ID
                          element.notebook = notebook;
//
                        }
                      });
                    } else {
                      //订单第一个桌子不存在
                      tempNo.add(notebook);
                    }
                  }
                });
              } else {
                //订单第一个桌子的区域不存在
                tempNo.add(notebook);
              }
            } else {
              tempLast.add(notebook);
            }
          }
        });

        for (int i = 0; i < tableManagerModel.tableOuterList.length; i++) {
          for (int j = 0;
              j < tableManagerModel.tableOuterList[i].list.length;
              j++) {
            if (tableManagerModel.tableOuterList[i].list[j].notebook != null) {
              temp.add(tableManagerModel.tableOuterList[i].list[j].notebook);
            }
          }
        }

        print(temp);
        print(notebooks);

        notebooks = temp.toList();

        notebooks.addAll(tempNo);
        notebooks.addAll(tempLast);

        // tableManagerModel.tableOuterList //桌子
        // tableManagerModel.areaSunModelList //区域

        if (notebooks.length > 0) {
          if (isSimple) {
            for (Notebook item in notebooks) {
              item.issimple = true;
            }
          } else {
            for (Notebook item in notebooks) {
              item.issimple = false;
            }
          }
        }

        pageState = PageState.Success;
      }
    } else {
      Utils.showToast(baseResp.msg ?? "");
    }

    notifyListeners();
    return notebooks;
  }

  simpleState() {
    if (notebooks.length > 0) {
      if (isSimple) {
        for (Notebook item in notebooks) {
          item.issimple = true;
        }
      } else {
        for (Notebook item in notebooks) {
          item.issimple = false;
        }
      }
    }
  }

  //获取订单统计数目
  getReserveCountDay(BuildContext context, Map<String, String> params) async {
    BaseResp<Map<String, dynamic>> baseResp = await DioUtil()
        .request<Map<String, dynamic>>(
            context, Method.get, HttpUrl.reserve_count_day,
            data: params, showLoading: false)
        .catchError((error) {
      print(error.toString());
    });
    if (baseResp != null && baseResp.code == Constant.status_success) {
      int morning = int.parse(baseResp.data["morning"].toString());
      int noon = int.parse(baseResp.data["noon"].toString());
      int night = int.parse(baseResp.data["night"].toString());
      UserModel userModel = Provider.of<UserModel>(context, listen: false);
      // total = "已订" + (morning + noon + night).toString();
      if (userModel.user.morning.isNotEmpty) {
        totalmorning = "($morning)";
      }
      if (userModel.user.noon.isNotEmpty) {
        totalnoon = "($noon)";
      }
      if (userModel.user.night.isNotEmpty) {
        totalnight = "($night)";
      }
      notifyListeners();
    }
  }
}