controller.dart 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. import 'package:fis_jsonrpc/rpc.dart';
  2. import 'package:get/get.dart';
  3. import 'package:image_picker/image_picker.dart';
  4. import 'package:vitalapp/architecture/defines.dart';
  5. import 'package:vitalapp/architecture/storage/storage.dart';
  6. import 'package:vitalapp/architecture/utils/prompt_box.dart';
  7. import 'package:vitalapp/managers/interfaces/contract.dart';
  8. import 'package:vitalapp/managers/interfaces/contract_template.dart';
  9. import 'package:vitalapp/managers/interfaces/patient.dart';
  10. import 'package:vitalapp/managers/interfaces/service_pack.dart';
  11. import 'package:vitalapp/pages/controllers/crowd_labels.dart';
  12. import 'package:vitalapp/rpc.dart';
  13. import 'package:vitalapp/store/store.dart';
  14. import 'state.dart';
  15. class ServicePackageContractController extends FControllerBase {
  16. final state = ServicePackageContractState();
  17. final _patientManager = Get.find<IPatientManager>();
  18. final _servicePackManager = Get.find<IServicePackManager>();
  19. final _contractManager = Get.find<IContractManager>();
  20. final _contractTemplateManager = Get.find<IContractTemplateManager>();
  21. List<LabelDTO> normalOptions = [];
  22. PatientDTO patient = PatientDTO();
  23. String templateCode = '';
  24. @override
  25. void onInit() {
  26. // final p = Get.parameters;
  27. // state.patientCode = p["patientCode"]!;
  28. state.patientCode = Store.user.currentSelectPatientInfo?.code ?? '';
  29. // patientName = Store.user.currentSelectPatientInfo?.patientName ?? '';
  30. super.onInit();
  31. }
  32. @override
  33. void onReady() {
  34. super.onReady();
  35. _loadData();
  36. _loadContractTemplate();
  37. }
  38. Future<void> _loadContractTemplate() async {
  39. final contractTemplateList =
  40. await _contractTemplateManager.getContractTemplatePageAsync();
  41. templateCode = contractTemplateList?.first.code ?? '';
  42. }
  43. Future<void> _loadData() async {
  44. final dto = await _patientManager.getDetail(state.patientCode);
  45. /// server 暂时没根据人群获取服务包列表这边先用全部服务包
  46. final result = await _servicePackManager.getServicePackList(
  47. ServicePackPageRequest(
  48. pageIndex: 1,
  49. pageSize: 20,
  50. ),
  51. );
  52. normalOptions = Get.find<CrowdLabelsController>().state.normalOptions;
  53. state.servicePackageItems = result?.pageData ?? [];
  54. final getServiceItemResult = await _servicePackManager.getServiceItemList(
  55. GetServiceItemPageRequest(
  56. pageIndex: 1,
  57. pageSize: 100,
  58. ),
  59. );
  60. state.serviceItems = getServiceItemResult?.pageData ?? [];
  61. if (dto != null) {
  62. dto.birthday = dto.birthday!.toLocal();
  63. state.updateDto(dto);
  64. update();
  65. patient = dto;
  66. state.phone = dto.phone ?? '';
  67. }
  68. }
  69. String setNormalLabels(List<String> normalValueList) {
  70. List<String> normalLabels = [];
  71. for (LabelDTO i in normalOptions) {
  72. if (normalValueList.contains(i.code)) {
  73. normalLabels.add(i.labelName ?? '');
  74. }
  75. }
  76. String labels = normalLabels.join('、');
  77. if (labels.isEmpty) {
  78. return '暂无';
  79. }
  80. return labels;
  81. }
  82. Future<void> createContractRecord() async {
  83. await _contractManager.createContractRecordAsync(
  84. CreateContractRecordRequest(
  85. contractedPatient: patient.code,
  86. contractedTime: DateTime.now(),
  87. contractState: ContractStateEnum.Refused,
  88. reason: state.reasonRefusal,
  89. serviceStartDate: DateTime.parse(state.serviceStartDate.toString()),
  90. serviceEndDate: DateTime.parse(state.serviceStartDate.toString())
  91. .add(Duration(days: 365 * int.parse(state.serviceTime.toString()))),
  92. // contractedFileUrl: state.templateContent,
  93. servicePacks: state.selectedServicePackageCode.split('、'),
  94. photos: ["data:image/png;base64,${state.userImage ?? ''}"],
  95. notes: state.notes,
  96. ),
  97. );
  98. }
  99. bool verifyData() {
  100. // todo:人像采集
  101. if (state.userImage == null || state.userImage!.isEmpty) {
  102. PromptBox.toast('未进行人像拍照');
  103. return false;
  104. }
  105. if (state.selectedServicePackageCode.isEmpty) {
  106. PromptBox.toast('未选择服务包');
  107. return false;
  108. }
  109. if (state.teamLeaderName.isEmpty) {
  110. PromptBox.toast('未填写团队负责人');
  111. return false;
  112. }
  113. if (state.designatedDoctorName.isEmpty) {
  114. PromptBox.toast('未填写签约医生');
  115. return false;
  116. }
  117. if (state.designatedDoctorPhone.isEmpty) {
  118. PromptBox.toast('未填写医生电话');
  119. return false;
  120. }
  121. if (state.guidingDoctorName.isEmpty) {
  122. PromptBox.toast('未填写指导医生');
  123. return false;
  124. }
  125. return true;
  126. }
  127. Future<void> submitContract() async {
  128. if (state.isDenySbaVisa &&
  129. (state.reasonRefusal == null || state.reasonRefusal!.isEmpty)) {
  130. PromptBox.toast('未选择拒签原因');
  131. return;
  132. }
  133. await createContractRecord();
  134. Get.back();
  135. }
  136. List<ServiceItemDTO> getServiceItemsName(List<String> serviceItems) {
  137. List<ServiceItemDTO> serviceItemNames = [];
  138. for (var element in state.serviceItems) {
  139. if (serviceItems.contains(element.code)) {
  140. serviceItemNames.add(element);
  141. }
  142. }
  143. if (serviceItemNames.isEmpty) {
  144. return [];
  145. }
  146. return serviceItemNames.reversed.toList();
  147. }
  148. void processingPortraits() async {
  149. XFile? image = await ImagePicker().pickImage(source: ImageSource.camera);
  150. if (image == null) {
  151. return;
  152. }
  153. Store.app.busy = true;
  154. final url = await rpc.storage.upload(image);
  155. state.userImage = url;
  156. Store.app.busy = false;
  157. }
  158. // 切换选择的服务包
  159. void changeServicePackage(ServicePackDTO servicePackDTO) {
  160. List<ServicePackDTO> selectedServicePackage = state.selectedServicePackage;
  161. if (state.selectedServicePackage.contains(servicePackDTO)) {
  162. selectedServicePackage.remove(servicePackDTO);
  163. } else {
  164. selectedServicePackage.add(servicePackDTO);
  165. }
  166. state.selectedServicePackage = selectedServicePackage;
  167. setSelectedServicePackages();
  168. }
  169. void setSelectedServicePackages() {
  170. List<String> selectedServicePackageNameList = [];
  171. List<String> selectedServicePackageCodeList = [];
  172. for (var element in state.selectedServicePackage) {
  173. selectedServicePackageNameList.add(element.name ?? "");
  174. selectedServicePackageCodeList.add(element.code ?? "");
  175. }
  176. state.selectedServicePackageName = selectedServicePackageNameList.join('、');
  177. state.selectedServicePackageCode = selectedServicePackageCodeList.join('、');
  178. }
  179. }