outing_log_model.dart 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. class OutingLogModel {
  2. final String id;
  3. final String visitNo;
  4. final String salespersonId;
  5. final String salespersonName;
  6. final String deptId;
  7. final String deptName;
  8. final String customerId;
  9. final String customerName;
  10. final String contactId;
  11. final String contactName;
  12. final String contactPhone;
  13. final String contactPosition;
  14. final DateTime visitDate;
  15. final DateTime visitStartTime;
  16. final DateTime visitEndTime;
  17. final String visitType;
  18. final String visitPurpose;
  19. final String visitLocation;
  20. final String visitAddressDetail;
  21. final double longitude;
  22. final double latitude;
  23. final String signInPhoto;
  24. final String signOutPhoto;
  25. final List<String> visitPhotos;
  26. final String participants;
  27. final String visitSummary;
  28. final String visitResult;
  29. final String customerFeedback;
  30. final String competitorInfo;
  31. final DateTime nextVisitTime;
  32. final String nextVisitContent;
  33. final String checkInStatus;
  34. final int distanceDeviation;
  35. final String materials;
  36. final String status;
  37. final List<String> attachments;
  38. final DateTime createTime;
  39. final DateTime updateTime;
  40. const OutingLogModel({
  41. required this.id,
  42. required this.visitNo,
  43. required this.salespersonId,
  44. required this.salespersonName,
  45. required this.deptId,
  46. required this.deptName,
  47. this.customerId = '',
  48. required this.customerName,
  49. this.contactId = '',
  50. this.contactName = '',
  51. this.contactPhone = '',
  52. this.contactPosition = '',
  53. required this.visitDate,
  54. required this.visitStartTime,
  55. required this.visitEndTime,
  56. required this.visitType,
  57. required this.visitPurpose,
  58. required this.visitLocation,
  59. this.visitAddressDetail = '',
  60. this.longitude = 0.0,
  61. this.latitude = 0.0,
  62. this.signInPhoto = '',
  63. this.signOutPhoto = '',
  64. this.visitPhotos = const [],
  65. this.participants = '',
  66. required this.visitSummary,
  67. this.visitResult = '',
  68. this.customerFeedback = '',
  69. this.competitorInfo = '',
  70. required this.nextVisitTime,
  71. this.nextVisitContent = '',
  72. this.checkInStatus = '正常',
  73. this.distanceDeviation = 0,
  74. this.materials = '',
  75. this.status = '已完成',
  76. this.attachments = const [],
  77. required this.createTime,
  78. required this.updateTime,
  79. });
  80. factory OutingLogModel.fromJson(Map<String, dynamic> json) {
  81. return OutingLogModel(
  82. id: json['id'] as String,
  83. visitNo: json['visitNo'] as String? ?? '',
  84. salespersonId: json['salespersonId'] as String? ?? '',
  85. salespersonName: json['salespersonName'] as String? ?? '',
  86. deptId: json['deptId'] as String? ?? '',
  87. deptName: json['deptName'] as String? ?? '',
  88. customerId: json['customerId'] as String? ?? '',
  89. customerName: json['customerName'] as String? ?? '',
  90. contactId: json['contactId'] as String? ?? '',
  91. contactName: json['contactName'] as String? ?? '',
  92. contactPhone: json['contactPhone'] as String? ?? '',
  93. contactPosition: json['contactPosition'] as String? ?? '',
  94. visitDate: DateTime.parse(json['visitDate'] as String),
  95. visitStartTime: DateTime.parse(json['visitStartTime'] as String),
  96. visitEndTime: DateTime.parse(json['visitEndTime'] as String),
  97. visitType: json['visitType'] as String? ?? '常规拜访',
  98. visitPurpose: json['visitPurpose'] as String? ?? '',
  99. visitLocation: json['visitLocation'] as String? ?? '',
  100. visitAddressDetail: json['visitAddressDetail'] as String? ?? '',
  101. longitude: (json['longitude'] as num?)?.toDouble() ?? 0.0,
  102. latitude: (json['latitude'] as num?)?.toDouble() ?? 0.0,
  103. signInPhoto: json['signInPhoto'] as String? ?? '',
  104. signOutPhoto: json['signOutPhoto'] as String? ?? '',
  105. visitPhotos:
  106. (json['visitPhotos'] as List<dynamic>?)
  107. ?.map((e) => e as String)
  108. .toList() ??
  109. [],
  110. participants: json['participants'] as String? ?? '',
  111. visitSummary: json['visitSummary'] as String? ?? '',
  112. visitResult: json['visitResult'] as String? ?? '',
  113. customerFeedback: json['customerFeedback'] as String? ?? '',
  114. competitorInfo: json['competitorInfo'] as String? ?? '',
  115. nextVisitTime: DateTime.parse(json['nextVisitTime'] as String),
  116. nextVisitContent: json['nextVisitContent'] as String? ?? '',
  117. checkInStatus: json['checkInStatus'] as String? ?? '正常',
  118. distanceDeviation: json['distanceDeviation'] as int? ?? 0,
  119. materials: json['materials'] as String? ?? '',
  120. status: json['status'] as String? ?? '已完成',
  121. attachments:
  122. (json['attachments'] as List<dynamic>?)
  123. ?.map((e) => e as String)
  124. .toList() ??
  125. [],
  126. createTime: DateTime.parse(json['createTime'] as String),
  127. updateTime: DateTime.parse(json['updateTime'] as String),
  128. );
  129. }
  130. Map<String, dynamic> toJson() => {
  131. 'id': id,
  132. 'visitNo': visitNo,
  133. 'salespersonId': salespersonId,
  134. 'salespersonName': salespersonName,
  135. 'deptId': deptId,
  136. 'deptName': deptName,
  137. 'customerId': customerId,
  138. 'customerName': customerName,
  139. 'contactId': contactId,
  140. 'contactName': contactName,
  141. 'contactPhone': contactPhone,
  142. 'contactPosition': contactPosition,
  143. 'visitDate': visitDate.toIso8601String(),
  144. 'visitStartTime': visitStartTime.toIso8601String(),
  145. 'visitEndTime': visitEndTime.toIso8601String(),
  146. 'visitType': visitType,
  147. 'visitPurpose': visitPurpose,
  148. 'visitLocation': visitLocation,
  149. 'visitAddressDetail': visitAddressDetail,
  150. 'longitude': longitude,
  151. 'latitude': latitude,
  152. 'signInPhoto': signInPhoto,
  153. 'signOutPhoto': signOutPhoto,
  154. 'visitPhotos': visitPhotos,
  155. 'participants': participants,
  156. 'visitSummary': visitSummary,
  157. 'visitResult': visitResult,
  158. 'customerFeedback': customerFeedback,
  159. 'competitorInfo': competitorInfo,
  160. 'nextVisitTime': nextVisitTime.toIso8601String(),
  161. 'nextVisitContent': nextVisitContent,
  162. 'checkInStatus': checkInStatus,
  163. 'distanceDeviation': distanceDeviation,
  164. 'materials': materials,
  165. 'status': status,
  166. 'attachments': attachments,
  167. 'createTime': createTime.toIso8601String(),
  168. 'updateTime': updateTime.toIso8601String(),
  169. };
  170. }