notebook_detail.dart 6.39 KB
import 'package:common_utils/common_utils.dart';
import 'package:flutter/cupertino.dart';
import 'package:json_annotation/json_annotation.dart';
import 'package:one_key/models/table.dart';
import 'package:one_key/provider/user_model.dart';
import 'package:one_key/utils/utils.dart';
import 'package:provider/provider.dart';
import 'dart:convert';
import "table.dart";
import 'package:one_key/models/table.dart' as t;
part 'notebook_detail.g.dart';

@JsonSerializable()
class NotebookDetail {
  NotebookDetail();

  NotebookDetail.def(BuildContext context){
    id="-1";
    pnum="6";
    rname="";
    sex="1";
    phone="";
    cusdem="";
    type="0";
    ddate=(DateTime.now().millisecondsSinceEpoch/1000).floor().toString();
    ddate_solt=defDdateSolt(context);
    is_set_ddate="0";
    tables=[];
  }

  NotebookDetail.fromTableManager(String ddateStr,String ddatesolt,t.Table table){
    id="-1";
    pnum="6";
    rname="";
    sex="1";
    phone="";
    cusdem="";
    type="0";
    ddate=ddateStr;
    ddate_solt=ddatesolt;
    is_set_ddate="1";
    tables=[table];
  }

  String defDdateSolt(BuildContext context){
    int millsNow=DateTime.now().millisecondsSinceEpoch;
    UserModel userModel=Provider.of<UserModel>(context,listen: false);
    String morning=userModel.user.morning==""?"00:00-00:00":userModel.user.morning;
    String noon=userModel.user.noon==""?"00:00-00:00":userModel.user.noon;
    String night=userModel.user.night==""?"00:00-00:00":userModel.user.night;
    String endMorning=morning.split("-")[1];
    String endNoon=noon.split("-")[1];
    String endNight=night.split("-")[1];
    int endMorningMills=DateUtil.getDateMsByTimeStr(DateUtil.formatDate(DateTime.now()).replaceRange(11,19, "$endMorning:00"));
    int endNoonMills=DateUtil.getDateMsByTimeStr(DateUtil.formatDate(DateTime.now()).replaceRange(11,19, "$endNoon:00"));
    int endNightMills=DateUtil.getDateMsByTimeStr(DateUtil.formatDate(DateTime.now()).replaceRange(11,19, "$endNight:00"));
    if(millsNow<=endMorningMills){
      return "1";
    }else if(millsNow<=endNoonMills){
      return "2";
    }else if(millsNow<=endNightMills){
      return "3";
    }
  }


  String id;
  String abolition;
  String tableinfo;
  String pnum;
  String rname;
  String sex;
  String phone;
  String cusdem;
  String cusman; //客户经理
  String ddate;
  String is_set_ddate;
  String ddate_solt;
  String status = "0"; //订单状态 0:待确认,1:已定座,2:确认到店,3:用餐完成,4:取消预订,5:安排包间,6拒绝订单
  String action;
  String type; //0 内部订单 1 在线预订
  String note_name;
  String channel;
  String cdate;
  List<t.Table> demands; //需求桌位
  List<t.Table> tables; //预订桌位
  Cancel cancel;

  String get statuImgAssets {
    switch (status) {
      case "0":
        return "assets/status_undeal.png";
      case "1":
      case "5":
        return "assets/statu_booked.png";
      case "2":
        return "assets/statu_reached.png";
      case "3":
        return "assets/statu_finished.png";
      case "4":
        return "assets/statu_canceled.png";
      case "6":
        return "assets/statu_refuse.png";
    }
  }

  String get demandStr{
    String demand="";
    for(t.Table table in demands){
      demand+=table.name+",";
    }
    return demand.substring(0,demand.length-1);
  }

  String get ddateMd {
    DateTime dateTime =
        DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
    String md = Utils.addZeroNumber(dateTime.month) +
        "月" +
        Utils.addZeroNumber(dateTime.day) +
        "日";
    switch (ddate_solt) {
      case "1":
        md += " 早餐";
        break;
      case "2":
        md += " 午餐";
        break;
      case "3":
        md += " 晚餐";
        break;
    }
    return md;
  }

  String get ddateHm {
    if (type == "0" || (type == "1" && is_set_ddate == "1")) {
      DateTime dateTime =
          DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
      String Hm = Utils.addZeroNumber(dateTime.hour) +
          ":" +
          Utils.addZeroNumber(dateTime.minute);
      return Hm;
    } else {
      return "";
    }
  }

  String get ddateStr {
    String ddateStr;
    if (type == "1" && is_set_ddate == "0") {
      //在线预订,没有设置到店时间
      switch (ddate_solt) {
        case "1":
          ddateStr = "早餐";
          break;
        case "2":
          ddateStr = "午餐";
          break;
        case "3":
          ddateStr = "晚餐";
          break;
        default:
          ddateStr = "";
          break;
      }
    } else {
      DateTime dateTime =
          DateTime.fromMillisecondsSinceEpoch(int.parse(ddate) * 1000);
      ddateStr = Utils.addZeroNumber(dateTime.hour) +
          ":" +
          Utils.addZeroNumber(dateTime.minute);
    }
    return ddateStr;
  }

  String get rnameStr {
    if (rname.isEmpty) return "";
    switch (sex) {
      case "1": //先生
        return rname + "先生";
      case "2": //女士
        return rname + "女士";
      case "3": //公司
        return rname + "公司";
    }
  }

  String get tableinfoStr {
    return tables[0].name +
        "\n" +
        (tables.length >= 2 ? ('等' + tables.length.toString() + '桌') : '');
  }

  factory NotebookDetail.fromJson(Map<String, dynamic> json) =>
      _$NotebookDetailFromJson(json);
  Map<String, dynamic> toJson() => _$NotebookDetailToJson(this);

  @override
  String toString() {
    return 'NotebookDetail{id: $id, abolition: $abolition, tableinfo: $tableinfo, pnum: $pnum, rname: $rname, sex: $sex, phone: $phone, cusdem: $cusdem, cusman: $cusman, ddate: $ddate, is_set_ddate: $is_set_ddate, ddate_solt: $ddate_solt, status: $status, action: $action, type: $type, note_name: $note_name, channel: $channel, cdate: $cdate, demands: $demands, tables: $tables, cancel: $cancel}';
  }


}

@JsonSerializable()
class Cancel {
  Cancel();

  String uname;
  String desc;
  String cdate;

  String get cdateStr {
    DateTime dateTime =
        DateTime.fromMillisecondsSinceEpoch(int.parse(cdate) * 1000);
    return dateTime.year.toString() +
        "/" +
        Utils.addZeroNumber(dateTime.month) +
        "/" +
        Utils.addZeroNumber(dateTime.day) +
        " " +
        Utils.addZeroNumber(dateTime.hour) +
        ":" +
        Utils.addZeroNumber(dateTime.minute);
  }

  factory Cancel.fromJson(Map<String, dynamic> json) => _$CancelFromJson(json);
  Map<String, dynamic> toJson() => _$CancelToJson(this);
}