From e34da6485b152508bbfa9fd88d9983d9a9e4a021 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Wed, 22 Jul 2020 11:44:52 +0300 Subject: [PATCH 01/13] Doctor Free Slots implemented --- assets/json/freeSlots.json | 6588 ++++++----------- lib/config/config.dart | 9 +- lib/config/localized_values.dart | 5 +- .../Appointments/DoctorListResponse.dart | 168 + lib/models/Appointments/DoctorProfile.dart | 176 + .../InsertAppointmentRequest.dart | 20 + lib/models/Appointments/timeSlot.dart | 10 + lib/pages/BookAppointment/BookConfirm.dart | 94 +- lib/pages/BookAppointment/BookingOptions.dart | 6 +- lib/pages/BookAppointment/DoctorProfile.dart | 79 +- lib/pages/BookAppointment/SearchResults.dart | 45 +- .../components/DocAvailableAppointments.dart | 228 +- .../BookAppointment/components/DocInfo.dart | 24 +- .../components/SearchByClinic.dart | 33 +- .../components/SearchByDoctor.dart | 28 +- .../BookAppointment/widgets/DoctorView.dart | 74 +- lib/pages/ToDoList/ToDo.dart | 7 +- .../appointment_services/GetDoctorsList.dart | 128 +- lib/uitl/translations_delegate_base.dart | 6 + lib/widgets/others/app_scaffold_widget.dart | 10 +- 20 files changed, 3158 insertions(+), 4580 deletions(-) create mode 100644 lib/models/Appointments/DoctorListResponse.dart create mode 100644 lib/models/Appointments/DoctorProfile.dart create mode 100644 lib/models/Appointments/InsertAppointmentRequest.dart create mode 100644 lib/models/Appointments/timeSlot.dart diff --git a/assets/json/freeSlots.json b/assets/json/freeSlots.json index f7dfadc0..c8f2fee1 100644 --- a/assets/json/freeSlots.json +++ b/assets/json/freeSlots.json @@ -1,4414 +1,2182 @@ { "FreeTimeSlots": [ - "/Date(1594708200000+0300)/", - "/Date(1594709100000+0300)/", - "/Date(1594710000000+0300)/", - "/Date(1594710900000+0300)/", - "/Date(1594711800000+0300)/", - "/Date(1594712700000+0300)/", - "/Date(1594713600000+0300)/", - "/Date(1594718100000+0300)/", - "/Date(1594719000000+0300)/", - "/Date(1594719900000+0300)/", - "/Date(1594720800000+0300)/", - "/Date(1594722600000+0300)/", - "/Date(1594723500000+0300)/", - "/Date(1594724400000+0300)/", - "/Date(1594725300000+0300)/", - "/Date(1594727100000+0300)/", - "/Date(1594728000000+0300)/", - "/Date(1594728900000+0300)/", - "/Date(1594729800000+0300)/", - "/Date(1594730700000+0300)/", - "/Date(1594731600000+0300)/", - "/Date(1594732500000+0300)/", - "/Date(1594733400000+0300)/", - "/Date(1594791000000+0300)/", - "/Date(1594791900000+0300)/", - "/Date(1594792800000+0300)/", - "/Date(1594793700000+0300)/", - "/Date(1594794600000+0300)/", - "/Date(1594795500000+0300)/", - "/Date(1594796400000+0300)/", - "/Date(1594797300000+0300)/", - "/Date(1594798200000+0300)/", - "/Date(1594799100000+0300)/", - "/Date(1594800000000+0300)/", - "/Date(1594800900000+0300)/", - "/Date(1594801800000+0300)/", - "/Date(1594802700000+0300)/", - "/Date(1594803600000+0300)/", - "/Date(1594804500000+0300)/", - "/Date(1594805400000+0300)/", - "/Date(1594806300000+0300)/", - "/Date(1594807200000+0300)/", - "/Date(1594808100000+0300)/", - "/Date(1594809000000+0300)/", - "/Date(1594809900000+0300)/", - "/Date(1594810800000+0300)/", - "/Date(1594811700000+0300)/", - "/Date(1594812600000+0300)/", - "/Date(1594813500000+0300)/", - "/Date(1594814400000+0300)/", - "/Date(1594815300000+0300)/", - "/Date(1594816200000+0300)/", - "/Date(1594817100000+0300)/", - "/Date(1594818000000+0300)/", - "/Date(1594818900000+0300)/", - "/Date(1594819800000+0300)/", - "/Date(1594820700000+0300)/", - "/Date(1594878300000+0300)/", - "/Date(1594879200000+0300)/", - "/Date(1594880100000+0300)/", - "/Date(1594881000000+0300)/", - "/Date(1594881900000+0300)/", - "/Date(1594882800000+0300)/", - "/Date(1594883700000+0300)/", - "/Date(1594884600000+0300)/", - "/Date(1594885500000+0300)/", - "/Date(1594886400000+0300)/", - "/Date(1594887300000+0300)/", - "/Date(1594888200000+0300)/", - "/Date(1594889100000+0300)/", - "/Date(1594890000000+0300)/", - "/Date(1594890900000+0300)/", - "/Date(1594891800000+0300)/", - "/Date(1594892700000+0300)/", - "/Date(1594893600000+0300)/", - "/Date(1594894500000+0300)/", - "/Date(1594980900000+0300)/", - "/Date(1594981800000+0300)/", - "/Date(1594982700000+0300)/", - "/Date(1594983600000+0300)/", - "/Date(1594984500000+0300)/", - "/Date(1594986300000+0300)/", - "/Date(1594987200000+0300)/", - "/Date(1594988100000+0300)/", - "/Date(1594989000000+0300)/", - "/Date(1594989900000+0300)/", - "/Date(1594990800000+0300)/", - "/Date(1594991700000+0300)/", - "/Date(1594992600000+0300)/", - "/Date(1594993500000+0300)/", - "/Date(1594996200000+0300)/", - "/Date(1594997100000+0300)/", - "/Date(1594998000000+0300)/", - "/Date(1594998900000+0300)/", - "/Date(1594999800000+0300)/", - "/Date(1595000700000+0300)/", - "/Date(1595050200000+0300)/", - "/Date(1595051100000+0300)/", - "/Date(1595052000000+0300)/", - "/Date(1595052900000+0300)/", - "/Date(1595053800000+0300)/", - "/Date(1595054700000+0300)/", - "/Date(1595056500000+0300)/", - "/Date(1595057400000+0300)/", - "/Date(1595058300000+0300)/", - "/Date(1595059200000+0300)/", - "/Date(1595060100000+0300)/", - "/Date(1595061000000+0300)/", - "/Date(1595061900000+0300)/", - "/Date(1595062800000+0300)/", - "/Date(1595063700000+0300)/", - "/Date(1595064600000+0300)/", - "/Date(1595065500000+0300)/", - "/Date(1595066400000+0300)/", - "/Date(1595067300000+0300)/", - "/Date(1595068200000+0300)/", - "/Date(1595069100000+0300)/", - "/Date(1595070000000+0300)/", - "/Date(1595070900000+0300)/", - "/Date(1595071800000+0300)/", - "/Date(1595072700000+0300)/", - "/Date(1595073600000+0300)/", - "/Date(1595074500000+0300)/", - "/Date(1595075400000+0300)/", - "/Date(1595076300000+0300)/", - "/Date(1595077200000+0300)/", - "/Date(1595078100000+0300)/", - "/Date(1595079000000+0300)/", - "/Date(1595079900000+0300)/", - "/Date(1595136600000+0300)/", - "/Date(1595137500000+0300)/", - "/Date(1595138400000+0300)/", - "/Date(1595139300000+0300)/", - "/Date(1595140200000+0300)/", - "/Date(1595141100000+0300)/", - "/Date(1595142000000+0300)/", - "/Date(1595142900000+0300)/", - "/Date(1595143800000+0300)/", - "/Date(1595144700000+0300)/", - "/Date(1595145600000+0300)/", - "/Date(1595146500000+0300)/", - "/Date(1595147400000+0300)/", - "/Date(1595148300000+0300)/", - "/Date(1595149200000+0300)/", - "/Date(1595150100000+0300)/", - "/Date(1595151000000+0300)/", - "/Date(1595151900000+0300)/", - "/Date(1595152800000+0300)/", - "/Date(1595153700000+0300)/", - "/Date(1595154600000+0300)/", - "/Date(1595155500000+0300)/", - "/Date(1595156400000+0300)/", - "/Date(1595157300000+0300)/", - "/Date(1595158200000+0300)/", - "/Date(1595159100000+0300)/", - "/Date(1595160000000+0300)/", - "/Date(1595160900000+0300)/", - "/Date(1595161800000+0300)/", - "/Date(1595162700000+0300)/", - "/Date(1595163600000+0300)/", - "/Date(1595164500000+0300)/", - "/Date(1595165400000+0300)/", - "/Date(1595166300000+0300)/", - "/Date(1595223000000+0300)/", - "/Date(1595223900000+0300)/", - "/Date(1595224800000+0300)/", - "/Date(1595225700000+0300)/", - "/Date(1595226600000+0300)/", - "/Date(1595227500000+0300)/", - "/Date(1595228400000+0300)/", - "/Date(1595229300000+0300)/", - "/Date(1595230200000+0300)/", - "/Date(1595231100000+0300)/", - "/Date(1595232000000+0300)/", - "/Date(1595232900000+0300)/", - "/Date(1595233800000+0300)/", - "/Date(1595234700000+0300)/", - "/Date(1595235600000+0300)/", - "/Date(1595236500000+0300)/", - "/Date(1595237400000+0300)/", - "/Date(1595238300000+0300)/", - "/Date(1595239200000+0300)/", - "/Date(1595240100000+0300)/", - "/Date(1595241000000+0300)/", - "/Date(1595241900000+0300)/", - "/Date(1595242800000+0300)/", - "/Date(1595243700000+0300)/", - "/Date(1595244600000+0300)/", - "/Date(1595245500000+0300)/", - "/Date(1595246400000+0300)/", - "/Date(1595247300000+0300)/", - "/Date(1595248200000+0300)/", - "/Date(1595249100000+0300)/", - "/Date(1595250000000+0300)/", - "/Date(1595250900000+0300)/", - "/Date(1595251800000+0300)/", - "/Date(1595252700000+0300)/", - "/Date(1595309400000+0300)/", - "/Date(1595310300000+0300)/", - "/Date(1595311200000+0300)/", - "/Date(1595312100000+0300)/", - "/Date(1595313000000+0300)/", - "/Date(1595313900000+0300)/", - "/Date(1595314800000+0300)/", - "/Date(1595315700000+0300)/", - "/Date(1595316600000+0300)/", - "/Date(1595317500000+0300)/", - "/Date(1595318400000+0300)/", - "/Date(1595319300000+0300)/", - "/Date(1595320200000+0300)/", - "/Date(1595321100000+0300)/", - "/Date(1595322000000+0300)/", - "/Date(1595322900000+0300)/", - "/Date(1595323800000+0300)/", - "/Date(1595324700000+0300)/", - "/Date(1595325600000+0300)/", - "/Date(1595326500000+0300)/", - "/Date(1595327400000+0300)/", - "/Date(1595328300000+0300)/", - "/Date(1595329200000+0300)/", - "/Date(1595330100000+0300)/", - "/Date(1595331000000+0300)/", - "/Date(1595331900000+0300)/", - "/Date(1595332800000+0300)/", - "/Date(1595333700000+0300)/", - "/Date(1595334600000+0300)/", - "/Date(1595335500000+0300)/", - "/Date(1595336400000+0300)/", - "/Date(1595337300000+0300)/", - "/Date(1595338200000+0300)/", - "/Date(1595339100000+0300)/", - "/Date(1595395800000+0300)/", - "/Date(1595396700000+0300)/", - "/Date(1595397600000+0300)/", - "/Date(1595398500000+0300)/", - "/Date(1595399400000+0300)/", - "/Date(1595400300000+0300)/", - "/Date(1595401200000+0300)/", - "/Date(1595402100000+0300)/", - "/Date(1595403000000+0300)/", - "/Date(1595403900000+0300)/", - "/Date(1595404800000+0300)/", - "/Date(1595405700000+0300)/", - "/Date(1595406600000+0300)/", - "/Date(1595407500000+0300)/", - "/Date(1595408400000+0300)/", - "/Date(1595409300000+0300)/", - "/Date(1595410200000+0300)/", - "/Date(1595411100000+0300)/", - "/Date(1595412000000+0300)/", - "/Date(1595412900000+0300)/", - "/Date(1595413800000+0300)/", - "/Date(1595414700000+0300)/", - "/Date(1595415600000+0300)/", - "/Date(1595416500000+0300)/", - "/Date(1595417400000+0300)/", - "/Date(1595418300000+0300)/", - "/Date(1595419200000+0300)/", - "/Date(1595420100000+0300)/", - "/Date(1595421000000+0300)/", - "/Date(1595421900000+0300)/", - "/Date(1595422800000+0300)/", - "/Date(1595423700000+0300)/", - "/Date(1595424600000+0300)/", - "/Date(1595425500000+0300)/", - "/Date(1595482200000+0300)/", - "/Date(1595483100000+0300)/", - "/Date(1595484000000+0300)/", - "/Date(1595484900000+0300)/", - "/Date(1595485800000+0300)/", - "/Date(1595486700000+0300)/", - "/Date(1595487600000+0300)/", - "/Date(1595488500000+0300)/", - "/Date(1595489400000+0300)/", - "/Date(1595490300000+0300)/", - "/Date(1595491200000+0300)/", - "/Date(1595492100000+0300)/", - "/Date(1595493000000+0300)/", - "/Date(1595493900000+0300)/", - "/Date(1595494800000+0300)/", - "/Date(1595495700000+0300)/", - "/Date(1595496600000+0300)/", - "/Date(1595497500000+0300)/", - "/Date(1595499300000+0300)/", - "/Date(1595655000000+0300)/", - "/Date(1595655900000+0300)/", - "/Date(1595656800000+0300)/", - "/Date(1595657700000+0300)/", - "/Date(1595658600000+0300)/", - "/Date(1595659500000+0300)/", - "/Date(1595660400000+0300)/", - "/Date(1595661300000+0300)/", - "/Date(1595662200000+0300)/", - "/Date(1595663100000+0300)/", - "/Date(1595664000000+0300)/", - "/Date(1595664900000+0300)/", - "/Date(1595665800000+0300)/", - "/Date(1595666700000+0300)/", - "/Date(1595667600000+0300)/", - "/Date(1595668500000+0300)/", - "/Date(1595669400000+0300)/", - "/Date(1595670300000+0300)/", - "/Date(1595671200000+0300)/", - "/Date(1595672100000+0300)/", - "/Date(1595673000000+0300)/", - "/Date(1595673900000+0300)/", - "/Date(1595674800000+0300)/", - "/Date(1595675700000+0300)/", - "/Date(1595676600000+0300)/", - "/Date(1595677500000+0300)/", - "/Date(1595678400000+0300)/", - "/Date(1595679300000+0300)/", - "/Date(1595680200000+0300)/", - "/Date(1595681100000+0300)/", - "/Date(1595682000000+0300)/", - "/Date(1595682900000+0300)/", - "/Date(1595683800000+0300)/", - "/Date(1595684700000+0300)/", - "/Date(1595741400000+0300)/", - "/Date(1595742300000+0300)/", - "/Date(1595743200000+0300)/", - "/Date(1595744100000+0300)/", - "/Date(1595745000000+0300)/", - "/Date(1595745900000+0300)/", - "/Date(1595746800000+0300)/", - "/Date(1595747700000+0300)/", - "/Date(1595748600000+0300)/", - "/Date(1595749500000+0300)/", - "/Date(1595750400000+0300)/", - "/Date(1595751300000+0300)/", - "/Date(1595752200000+0300)/", - "/Date(1595753100000+0300)/", - "/Date(1595754000000+0300)/", - "/Date(1595754900000+0300)/", - "/Date(1595755800000+0300)/", - "/Date(1595756700000+0300)/", - "/Date(1595757600000+0300)/", - "/Date(1595758500000+0300)/", - "/Date(1595759400000+0300)/", - "/Date(1595760300000+0300)/", - "/Date(1595761200000+0300)/", - "/Date(1595762100000+0300)/", - "/Date(1595763000000+0300)/", - "/Date(1595763900000+0300)/", - "/Date(1595764800000+0300)/", - "/Date(1595765700000+0300)/", - "/Date(1595766600000+0300)/", - "/Date(1595767500000+0300)/", - "/Date(1595768400000+0300)/", - "/Date(1595769300000+0300)/", - "/Date(1595770200000+0300)/", - "/Date(1595771100000+0300)/", - "/Date(1595827800000+0300)/", - "/Date(1595828700000+0300)/", - "/Date(1595829600000+0300)/", - "/Date(1595830500000+0300)/", - "/Date(1595831400000+0300)/", - "/Date(1595832300000+0300)/", - "/Date(1595833200000+0300)/", - "/Date(1595834100000+0300)/", - "/Date(1595835000000+0300)/", - "/Date(1595835900000+0300)/", - "/Date(1595836800000+0300)/", - "/Date(1595837700000+0300)/", - "/Date(1595838600000+0300)/", - "/Date(1595839500000+0300)/", - "/Date(1595840400000+0300)/", - "/Date(1595841300000+0300)/", - "/Date(1595842200000+0300)/", - "/Date(1595843100000+0300)/", - "/Date(1595844000000+0300)/", - "/Date(1595844900000+0300)/", - "/Date(1595845800000+0300)/", - "/Date(1595846700000+0300)/", - "/Date(1595847600000+0300)/", - "/Date(1595848500000+0300)/", - "/Date(1595849400000+0300)/", - "/Date(1595850300000+0300)/", - "/Date(1595851200000+0300)/", - "/Date(1595852100000+0300)/", - "/Date(1595853000000+0300)/", - "/Date(1595853900000+0300)/", - "/Date(1595854800000+0300)/", - "/Date(1595855700000+0300)/", - "/Date(1595856600000+0300)/", - "/Date(1595857500000+0300)/", - "/Date(1595914200000+0300)/", - "/Date(1595915100000+0300)/", - "/Date(1595916000000+0300)/", - "/Date(1595916900000+0300)/", - "/Date(1595917800000+0300)/", - "/Date(1595918700000+0300)/", - "/Date(1595919600000+0300)/", - "/Date(1595920500000+0300)/", - "/Date(1595921400000+0300)/", - "/Date(1595922300000+0300)/", - "/Date(1595923200000+0300)/", - "/Date(1595924100000+0300)/", - "/Date(1595925000000+0300)/", - "/Date(1595925900000+0300)/", - "/Date(1595926800000+0300)/", - "/Date(1595927700000+0300)/", - "/Date(1595928600000+0300)/", - "/Date(1595929500000+0300)/", - "/Date(1595930400000+0300)/", - "/Date(1595931300000+0300)/", - "/Date(1595932200000+0300)/", - "/Date(1595933100000+0300)/", - "/Date(1595934000000+0300)/", - "/Date(1595934900000+0300)/", - "/Date(1595935800000+0300)/", - "/Date(1595936700000+0300)/", - "/Date(1595937600000+0300)/", - "/Date(1595938500000+0300)/", - "/Date(1595939400000+0300)/", - "/Date(1595940300000+0300)/", - "/Date(1595941200000+0300)/", - "/Date(1595942100000+0300)/", - "/Date(1595943000000+0300)/", - "/Date(1595943900000+0300)/", - "/Date(1596864600000+0300)/", - "/Date(1596865500000+0300)/", - "/Date(1596866400000+0300)/", - "/Date(1596867300000+0300)/", - "/Date(1596868200000+0300)/", - "/Date(1596869100000+0300)/", - "/Date(1596870000000+0300)/", - "/Date(1596870900000+0300)/", - "/Date(1596871800000+0300)/", - "/Date(1596872700000+0300)/", - "/Date(1596873600000+0300)/", - "/Date(1596874500000+0300)/", - "/Date(1596875400000+0300)/", - "/Date(1596876300000+0300)/", - "/Date(1596877200000+0300)/", - "/Date(1596878100000+0300)/", - "/Date(1596879000000+0300)/", - "/Date(1596879900000+0300)/", - "/Date(1596880800000+0300)/", - "/Date(1596881700000+0300)/", - "/Date(1596882600000+0300)/", - "/Date(1596883500000+0300)/", - "/Date(1596884400000+0300)/", - "/Date(1596885300000+0300)/", - "/Date(1596886200000+0300)/", - "/Date(1596887100000+0300)/", - "/Date(1596888000000+0300)/", - "/Date(1596888900000+0300)/", - "/Date(1596889800000+0300)/", - "/Date(1596890700000+0300)/", - "/Date(1596891600000+0300)/", - "/Date(1596892500000+0300)/", - "/Date(1596893400000+0300)/", - "/Date(1596894300000+0300)/", - "/Date(1596951000000+0300)/", - "/Date(1596951900000+0300)/", - "/Date(1596952800000+0300)/", - "/Date(1596953700000+0300)/", - "/Date(1596954600000+0300)/", - "/Date(1596955500000+0300)/", - "/Date(1596956400000+0300)/", - "/Date(1596957300000+0300)/", - "/Date(1596958200000+0300)/", - "/Date(1596959100000+0300)/", - "/Date(1596960000000+0300)/", - "/Date(1596960900000+0300)/", - "/Date(1596961800000+0300)/", - "/Date(1596962700000+0300)/", - "/Date(1596963600000+0300)/", - "/Date(1596964500000+0300)/", - "/Date(1596965400000+0300)/", - "/Date(1596966300000+0300)/", - "/Date(1596967200000+0300)/", - "/Date(1596968100000+0300)/", - "/Date(1596969000000+0300)/", - "/Date(1596969900000+0300)/", - "/Date(1596970800000+0300)/", - "/Date(1596971700000+0300)/", - "/Date(1596972600000+0300)/", - "/Date(1596973500000+0300)/", - "/Date(1596974400000+0300)/", - "/Date(1596975300000+0300)/", - "/Date(1596976200000+0300)/", - "/Date(1596977100000+0300)/", - "/Date(1596978000000+0300)/", - "/Date(1596978900000+0300)/", - "/Date(1596979800000+0300)/", - "/Date(1596980700000+0300)/", - "/Date(1597037400000+0300)/", - "/Date(1597038300000+0300)/", - "/Date(1597039200000+0300)/", - "/Date(1597040100000+0300)/", - "/Date(1597041000000+0300)/", - "/Date(1597041900000+0300)/", - "/Date(1597042800000+0300)/", - "/Date(1597043700000+0300)/", - "/Date(1597044600000+0300)/", - "/Date(1597045500000+0300)/", - "/Date(1597046400000+0300)/", - "/Date(1597047300000+0300)/", - "/Date(1597048200000+0300)/", - "/Date(1597049100000+0300)/", - "/Date(1597050000000+0300)/", - "/Date(1597050900000+0300)/", - "/Date(1597051800000+0300)/", - "/Date(1597052700000+0300)/", - "/Date(1597053600000+0300)/", - "/Date(1597054500000+0300)/", - "/Date(1597055400000+0300)/", - "/Date(1597056300000+0300)/", - "/Date(1597057200000+0300)/", - "/Date(1597058100000+0300)/", - "/Date(1597059000000+0300)/", - "/Date(1597059900000+0300)/", - "/Date(1597060800000+0300)/", - "/Date(1597061700000+0300)/", - "/Date(1597062600000+0300)/", - "/Date(1597063500000+0300)/", - "/Date(1597064400000+0300)/", - "/Date(1597065300000+0300)/", - "/Date(1597066200000+0300)/", - "/Date(1597067100000+0300)/", - "/Date(1597123800000+0300)/", - "/Date(1597124700000+0300)/", - "/Date(1597125600000+0300)/", - "/Date(1597126500000+0300)/", - "/Date(1597127400000+0300)/", - "/Date(1597128300000+0300)/", - "/Date(1597129200000+0300)/", - "/Date(1597130100000+0300)/", - "/Date(1597131000000+0300)/", - "/Date(1597131900000+0300)/", - "/Date(1597132800000+0300)/", - "/Date(1597133700000+0300)/", - "/Date(1597134600000+0300)/", - "/Date(1597135500000+0300)/", - "/Date(1597136400000+0300)/", - "/Date(1597137300000+0300)/", - "/Date(1597138200000+0300)/", - "/Date(1597139100000+0300)/", - "/Date(1597140000000+0300)/", - "/Date(1597140900000+0300)/", - "/Date(1597141800000+0300)/", - "/Date(1597142700000+0300)/", - "/Date(1597143600000+0300)/", - "/Date(1597144500000+0300)/", - "/Date(1597145400000+0300)/", - "/Date(1597146300000+0300)/", - "/Date(1597147200000+0300)/", - "/Date(1597148100000+0300)/", - "/Date(1597149000000+0300)/", - "/Date(1597149900000+0300)/", - "/Date(1597150800000+0300)/", - "/Date(1597151700000+0300)/", - "/Date(1597152600000+0300)/", - "/Date(1597153500000+0300)/", - "/Date(1597210200000+0300)/", - "/Date(1597211100000+0300)/", - "/Date(1597212000000+0300)/", - "/Date(1597212900000+0300)/", - "/Date(1597213800000+0300)/", - "/Date(1597214700000+0300)/", - "/Date(1597215600000+0300)/", - "/Date(1597216500000+0300)/", - "/Date(1597217400000+0300)/", - "/Date(1597218300000+0300)/", - "/Date(1597219200000+0300)/", - "/Date(1597220100000+0300)/", - "/Date(1597221000000+0300)/", - "/Date(1597221900000+0300)/", - "/Date(1597222800000+0300)/", - "/Date(1597223700000+0300)/", - "/Date(1597224600000+0300)/", - "/Date(1597225500000+0300)/", - "/Date(1597226400000+0300)/", - "/Date(1597227300000+0300)/", - "/Date(1597228200000+0300)/", - "/Date(1597229100000+0300)/", - "/Date(1597230000000+0300)/", - "/Date(1597230900000+0300)/", - "/Date(1597231800000+0300)/", - "/Date(1597232700000+0300)/", - "/Date(1597233600000+0300)/", - "/Date(1597234500000+0300)/", - "/Date(1597235400000+0300)/", - "/Date(1597236300000+0300)/", - "/Date(1597237200000+0300)/", - "/Date(1597238100000+0300)/", - "/Date(1597239000000+0300)/", - "/Date(1597239900000+0300)/", - "/Date(1597296600000+0300)/", - "/Date(1597297500000+0300)/", - "/Date(1597298400000+0300)/", - "/Date(1597299300000+0300)/", - "/Date(1597300200000+0300)/", - "/Date(1597301100000+0300)/", - "/Date(1597302000000+0300)/", - "/Date(1597302900000+0300)/", - "/Date(1597303800000+0300)/", - "/Date(1597304700000+0300)/", - "/Date(1597305600000+0300)/", - "/Date(1597306500000+0300)/", - "/Date(1597307400000+0300)/", - "/Date(1597308300000+0300)/", - "/Date(1597309200000+0300)/", - "/Date(1597310100000+0300)/", - "/Date(1597311000000+0300)/", - "/Date(1597311900000+0300)/", - "/Date(1597312800000+0300)/", - "/Date(1597313700000+0300)/", - "/Date(1597469400000+0300)/", - "/Date(1597470300000+0300)/", - "/Date(1597471200000+0300)/", - "/Date(1597472100000+0300)/", - "/Date(1597473000000+0300)/", - "/Date(1597473900000+0300)/", - "/Date(1597474800000+0300)/", - "/Date(1597475700000+0300)/", - "/Date(1597476600000+0300)/", - "/Date(1597477500000+0300)/", - "/Date(1597478400000+0300)/", - "/Date(1597479300000+0300)/", - "/Date(1597480200000+0300)/", - "/Date(1597481100000+0300)/", - "/Date(1597482000000+0300)/", - "/Date(1597482900000+0300)/", - "/Date(1597483800000+0300)/", - "/Date(1597484700000+0300)/", - "/Date(1597485600000+0300)/", - "/Date(1597486500000+0300)/", - "/Date(1597487400000+0300)/", - "/Date(1597488300000+0300)/", - "/Date(1597489200000+0300)/", - "/Date(1597490100000+0300)/", - "/Date(1597491000000+0300)/", - "/Date(1597491900000+0300)/", - "/Date(1597492800000+0300)/", - "/Date(1597493700000+0300)/", - "/Date(1597494600000+0300)/", - "/Date(1597495500000+0300)/", - "/Date(1597496400000+0300)/", - "/Date(1597497300000+0300)/", - "/Date(1597498200000+0300)/", - "/Date(1597499100000+0300)/", - "/Date(1597555800000+0300)/", - "/Date(1597556700000+0300)/", - "/Date(1597557600000+0300)/", - "/Date(1597558500000+0300)/", - "/Date(1597559400000+0300)/", - "/Date(1597560300000+0300)/", - "/Date(1597561200000+0300)/", - "/Date(1597562100000+0300)/", - "/Date(1597563000000+0300)/", - "/Date(1597563900000+0300)/", - "/Date(1597564800000+0300)/", - "/Date(1597565700000+0300)/", - "/Date(1597566600000+0300)/", - "/Date(1597567500000+0300)/", - "/Date(1597568400000+0300)/", - "/Date(1597569300000+0300)/", - "/Date(1597570200000+0300)/", - "/Date(1597571100000+0300)/", - "/Date(1597572000000+0300)/", - "/Date(1597572900000+0300)/", - "/Date(1597573800000+0300)/", - "/Date(1597574700000+0300)/", - "/Date(1597575600000+0300)/", - "/Date(1597576500000+0300)/", - "/Date(1597577400000+0300)/", - "/Date(1597578300000+0300)/", - "/Date(1597579200000+0300)/", - "/Date(1597580100000+0300)/", - "/Date(1597581000000+0300)/", - "/Date(1597581900000+0300)/", - "/Date(1597582800000+0300)/", - "/Date(1597583700000+0300)/", - "/Date(1597584600000+0300)/", - "/Date(1597585500000+0300)/", - "/Date(1597642200000+0300)/", - "/Date(1597643100000+0300)/", - "/Date(1597644000000+0300)/", - "/Date(1597644900000+0300)/", - "/Date(1597645800000+0300)/", - "/Date(1597646700000+0300)/", - "/Date(1597647600000+0300)/", - "/Date(1597648500000+0300)/", - "/Date(1597649400000+0300)/", - "/Date(1597650300000+0300)/", - "/Date(1597651200000+0300)/", - "/Date(1597652100000+0300)/", - "/Date(1597653000000+0300)/", - "/Date(1597653900000+0300)/", - "/Date(1597654800000+0300)/", - "/Date(1597655700000+0300)/", - "/Date(1597656600000+0300)/", - "/Date(1597657500000+0300)/", - "/Date(1597658400000+0300)/", - "/Date(1597659300000+0300)/", - "/Date(1597660200000+0300)/", - "/Date(1597661100000+0300)/", - "/Date(1597662000000+0300)/", - "/Date(1597662900000+0300)/", - "/Date(1597663800000+0300)/", - "/Date(1597664700000+0300)/", - "/Date(1597665600000+0300)/", - "/Date(1597666500000+0300)/", - "/Date(1597667400000+0300)/", - "/Date(1597668300000+0300)/", - "/Date(1597669200000+0300)/", - "/Date(1597670100000+0300)/", - "/Date(1597671000000+0300)/", - "/Date(1597671900000+0300)/", - "/Date(1597728600000+0300)/", - "/Date(1597729500000+0300)/", - "/Date(1597730400000+0300)/", - "/Date(1597731300000+0300)/", - "/Date(1597732200000+0300)/", - "/Date(1597733100000+0300)/", - "/Date(1597734000000+0300)/", - "/Date(1597734900000+0300)/", - "/Date(1597735800000+0300)/", - "/Date(1597736700000+0300)/", - "/Date(1597737600000+0300)/", - "/Date(1597738500000+0300)/", - "/Date(1597739400000+0300)/", - "/Date(1597740300000+0300)/", - "/Date(1597741200000+0300)/", - "/Date(1597742100000+0300)/", - "/Date(1597743000000+0300)/", - "/Date(1597743900000+0300)/", - "/Date(1597744800000+0300)/", - "/Date(1597745700000+0300)/", - "/Date(1597746600000+0300)/", - "/Date(1597747500000+0300)/", - "/Date(1597748400000+0300)/", - "/Date(1597749300000+0300)/", - "/Date(1597750200000+0300)/", - "/Date(1597751100000+0300)/", - "/Date(1597752000000+0300)/", - "/Date(1597752900000+0300)/", - "/Date(1597753800000+0300)/", - "/Date(1597754700000+0300)/", - "/Date(1597755600000+0300)/", - "/Date(1597756500000+0300)/", - "/Date(1597757400000+0300)/", - "/Date(1597758300000+0300)/", - "/Date(1597815000000+0300)/", - "/Date(1597815900000+0300)/", - "/Date(1597816800000+0300)/", - "/Date(1597817700000+0300)/", - "/Date(1597818600000+0300)/", - "/Date(1597819500000+0300)/", - "/Date(1597820400000+0300)/", - "/Date(1597821300000+0300)/", - "/Date(1597822200000+0300)/", - "/Date(1597823100000+0300)/", - "/Date(1597824000000+0300)/", - "/Date(1597824900000+0300)/", - "/Date(1597825800000+0300)/", - "/Date(1597826700000+0300)/", - "/Date(1597827600000+0300)/", - "/Date(1597828500000+0300)/", - "/Date(1597829400000+0300)/", - "/Date(1597830300000+0300)/", - "/Date(1597831200000+0300)/", - "/Date(1597832100000+0300)/", - "/Date(1597833000000+0300)/", - "/Date(1597833900000+0300)/", - "/Date(1597834800000+0300)/", - "/Date(1597835700000+0300)/", - "/Date(1597836600000+0300)/", - "/Date(1597837500000+0300)/", - "/Date(1597838400000+0300)/", - "/Date(1597839300000+0300)/", - "/Date(1597840200000+0300)/", - "/Date(1597841100000+0300)/", - "/Date(1597842000000+0300)/", - "/Date(1597842900000+0300)/", - "/Date(1597843800000+0300)/", - "/Date(1597844700000+0300)/", - "/Date(1597901400000+0300)/", - "/Date(1597902300000+0300)/", - "/Date(1597903200000+0300)/", - "/Date(1597904100000+0300)/", - "/Date(1597905000000+0300)/", - "/Date(1597905900000+0300)/", - "/Date(1597906800000+0300)/", - "/Date(1597907700000+0300)/", - "/Date(1597908600000+0300)/", - "/Date(1597909500000+0300)/", - "/Date(1597910400000+0300)/", - "/Date(1597911300000+0300)/", - "/Date(1597912200000+0300)/", - "/Date(1597913100000+0300)/", - "/Date(1597914000000+0300)/", - "/Date(1597914900000+0300)/", - "/Date(1597915800000+0300)/", - "/Date(1597916700000+0300)/", - "/Date(1597917600000+0300)/", - "/Date(1597918500000+0300)/", - "/Date(1598074200000+0300)/", - "/Date(1598075100000+0300)/", - "/Date(1598076000000+0300)/", - "/Date(1598076900000+0300)/", - "/Date(1598077800000+0300)/", - "/Date(1598078700000+0300)/", - "/Date(1598079600000+0300)/", - "/Date(1598080500000+0300)/", - "/Date(1598081400000+0300)/", - "/Date(1598082300000+0300)/", - "/Date(1598083200000+0300)/", - "/Date(1598084100000+0300)/", - "/Date(1598085000000+0300)/", - "/Date(1598085900000+0300)/", - "/Date(1598086800000+0300)/", - "/Date(1598087700000+0300)/", - "/Date(1598088600000+0300)/", - "/Date(1598089500000+0300)/", - "/Date(1598090400000+0300)/", - "/Date(1598091300000+0300)/", - "/Date(1598092200000+0300)/", - "/Date(1598093100000+0300)/", - "/Date(1598094000000+0300)/", - "/Date(1598094900000+0300)/", - "/Date(1598095800000+0300)/", - "/Date(1598096700000+0300)/", - "/Date(1598097600000+0300)/", - "/Date(1598098500000+0300)/", - "/Date(1598099400000+0300)/", - "/Date(1598100300000+0300)/", - "/Date(1598101200000+0300)/", - "/Date(1598102100000+0300)/", - "/Date(1598103000000+0300)/", - "/Date(1598103900000+0300)/", - "/Date(1598160600000+0300)/", - "/Date(1598161500000+0300)/", - "/Date(1598162400000+0300)/", - "/Date(1598163300000+0300)/", - "/Date(1598164200000+0300)/", - "/Date(1598165100000+0300)/", - "/Date(1598166000000+0300)/", - "/Date(1598166900000+0300)/", - "/Date(1598167800000+0300)/", - "/Date(1598168700000+0300)/", - "/Date(1598169600000+0300)/", - "/Date(1598170500000+0300)/", - "/Date(1598171400000+0300)/", - "/Date(1598172300000+0300)/", - "/Date(1598173200000+0300)/", - "/Date(1598174100000+0300)/", - "/Date(1598175000000+0300)/", - "/Date(1598175900000+0300)/", - "/Date(1598176800000+0300)/", - "/Date(1598177700000+0300)/", - "/Date(1598178600000+0300)/", - "/Date(1598179500000+0300)/", - "/Date(1598180400000+0300)/", - "/Date(1598181300000+0300)/", - "/Date(1598182200000+0300)/", - "/Date(1598183100000+0300)/", - "/Date(1598184000000+0300)/", - "/Date(1598184900000+0300)/", - "/Date(1598185800000+0300)/", - "/Date(1598186700000+0300)/", - "/Date(1598187600000+0300)/", - "/Date(1598188500000+0300)/", - "/Date(1598189400000+0300)/", - "/Date(1598190300000+0300)/", - "/Date(1598247000000+0300)/", - "/Date(1598247900000+0300)/", - "/Date(1598248800000+0300)/", - "/Date(1598249700000+0300)/", - "/Date(1598250600000+0300)/", - "/Date(1598251500000+0300)/", - "/Date(1598252400000+0300)/", - "/Date(1598253300000+0300)/", - "/Date(1598254200000+0300)/", - "/Date(1598255100000+0300)/", - "/Date(1598256000000+0300)/", - "/Date(1598256900000+0300)/", - "/Date(1598257800000+0300)/", - "/Date(1598258700000+0300)/", - "/Date(1598259600000+0300)/", - "/Date(1598260500000+0300)/", - "/Date(1598261400000+0300)/", - "/Date(1598262300000+0300)/", - "/Date(1598263200000+0300)/", - "/Date(1598264100000+0300)/", - "/Date(1598265000000+0300)/", - "/Date(1598265900000+0300)/", - "/Date(1598266800000+0300)/", - "/Date(1598267700000+0300)/", - "/Date(1598268600000+0300)/", - "/Date(1598269500000+0300)/", - "/Date(1598270400000+0300)/", - "/Date(1598271300000+0300)/", - "/Date(1598272200000+0300)/", - "/Date(1598273100000+0300)/", - "/Date(1598274000000+0300)/", - "/Date(1598274900000+0300)/", - "/Date(1598275800000+0300)/", - "/Date(1598276700000+0300)/", - "/Date(1598333400000+0300)/", - "/Date(1598334300000+0300)/", - "/Date(1598335200000+0300)/", - "/Date(1598336100000+0300)/", - "/Date(1598337000000+0300)/", - "/Date(1598337900000+0300)/", - "/Date(1598338800000+0300)/", - "/Date(1598339700000+0300)/", - "/Date(1598340600000+0300)/", - "/Date(1598341500000+0300)/", - "/Date(1598342400000+0300)/", - "/Date(1598343300000+0300)/", - "/Date(1598344200000+0300)/", - "/Date(1598345100000+0300)/", - "/Date(1598346000000+0300)/", - "/Date(1598346900000+0300)/", - "/Date(1598347800000+0300)/", - "/Date(1598348700000+0300)/", - "/Date(1598349600000+0300)/", - "/Date(1598350500000+0300)/", - "/Date(1598351400000+0300)/", - "/Date(1598352300000+0300)/", - "/Date(1598353200000+0300)/", - "/Date(1598354100000+0300)/", - "/Date(1598355000000+0300)/", - "/Date(1598355900000+0300)/", - "/Date(1598356800000+0300)/", - "/Date(1598357700000+0300)/", - "/Date(1598358600000+0300)/", - "/Date(1598359500000+0300)/", - "/Date(1598360400000+0300)/", - "/Date(1598361300000+0300)/", - "/Date(1598362200000+0300)/", - "/Date(1598363100000+0300)/", - "/Date(1598419800000+0300)/", - "/Date(1598420700000+0300)/", - "/Date(1598421600000+0300)/", - "/Date(1598422500000+0300)/", - "/Date(1598423400000+0300)/", - "/Date(1598424300000+0300)/", - "/Date(1598425200000+0300)/", - "/Date(1598426100000+0300)/", - "/Date(1598427000000+0300)/", - "/Date(1598427900000+0300)/", - "/Date(1598428800000+0300)/", - "/Date(1598429700000+0300)/", - "/Date(1598430600000+0300)/", - "/Date(1598431500000+0300)/", - "/Date(1598432400000+0300)/", - "/Date(1598433300000+0300)/", - "/Date(1598434200000+0300)/", - "/Date(1598435100000+0300)/", - "/Date(1598436000000+0300)/", - "/Date(1598436900000+0300)/", - "/Date(1598437800000+0300)/", - "/Date(1598438700000+0300)/", - "/Date(1598439600000+0300)/", - "/Date(1598440500000+0300)/", - "/Date(1598441400000+0300)/", - "/Date(1598442300000+0300)/", - "/Date(1598443200000+0300)/", - "/Date(1598444100000+0300)/", - "/Date(1598445000000+0300)/", - "/Date(1598445900000+0300)/", - "/Date(1598446800000+0300)/", - "/Date(1598447700000+0300)/", - "/Date(1598448600000+0300)/", - "/Date(1598449500000+0300)/", - "/Date(1598506200000+0300)/", - "/Date(1598507100000+0300)/", - "/Date(1598508000000+0300)/", - "/Date(1598508900000+0300)/", - "/Date(1598509800000+0300)/", - "/Date(1598510700000+0300)/", - "/Date(1598511600000+0300)/", - "/Date(1598512500000+0300)/", - "/Date(1598513400000+0300)/", - "/Date(1598514300000+0300)/", - "/Date(1598515200000+0300)/", - "/Date(1598516100000+0300)/", - "/Date(1598517000000+0300)/", - "/Date(1598517900000+0300)/", - "/Date(1598518800000+0300)/", - "/Date(1598519700000+0300)/", - "/Date(1598520600000+0300)/", - "/Date(1598521500000+0300)/", - "/Date(1598522400000+0300)/", - "/Date(1598523300000+0300)/", - "/Date(1598679000000+0300)/", - "/Date(1598679900000+0300)/", - "/Date(1598680800000+0300)/", - "/Date(1598681700000+0300)/", - "/Date(1598682600000+0300)/", - "/Date(1598683500000+0300)/", - "/Date(1598684400000+0300)/", - "/Date(1598685300000+0300)/", - "/Date(1598686200000+0300)/", - "/Date(1598687100000+0300)/", - "/Date(1598688000000+0300)/", - "/Date(1598688900000+0300)/", - "/Date(1598689800000+0300)/", - "/Date(1598690700000+0300)/", - "/Date(1598691600000+0300)/", - "/Date(1598692500000+0300)/", - "/Date(1598693400000+0300)/", - "/Date(1598694300000+0300)/", - "/Date(1598695200000+0300)/", - "/Date(1598696100000+0300)/", - "/Date(1598697000000+0300)/", - "/Date(1598697900000+0300)/", - "/Date(1598698800000+0300)/", - "/Date(1598699700000+0300)/", - "/Date(1598700600000+0300)/", - "/Date(1598701500000+0300)/", - "/Date(1598702400000+0300)/", - "/Date(1598703300000+0300)/", - "/Date(1598704200000+0300)/", - "/Date(1598705100000+0300)/", - "/Date(1598706000000+0300)/", - "/Date(1598706900000+0300)/", - "/Date(1598707800000+0300)/", - "/Date(1598708700000+0300)/", - "/Date(1598765400000+0300)/", - "/Date(1598766300000+0300)/", - "/Date(1598767200000+0300)/", - "/Date(1598768100000+0300)/", - "/Date(1598769000000+0300)/", - "/Date(1598769900000+0300)/", - "/Date(1598770800000+0300)/", - "/Date(1598771700000+0300)/", - "/Date(1598772600000+0300)/", - "/Date(1598773500000+0300)/", - "/Date(1598774400000+0300)/", - "/Date(1598775300000+0300)/", - "/Date(1598776200000+0300)/", - "/Date(1598777100000+0300)/", - "/Date(1598778000000+0300)/", - "/Date(1598778900000+0300)/", - "/Date(1598779800000+0300)/", - "/Date(1598780700000+0300)/", - "/Date(1598781600000+0300)/", - "/Date(1598782500000+0300)/", - "/Date(1598783400000+0300)/", - "/Date(1598784300000+0300)/", - "/Date(1598785200000+0300)/", - "/Date(1598786100000+0300)/", - "/Date(1598787000000+0300)/", - "/Date(1598787900000+0300)/", - "/Date(1598788800000+0300)/", - "/Date(1598789700000+0300)/", - "/Date(1598790600000+0300)/", - "/Date(1598791500000+0300)/", - "/Date(1598792400000+0300)/", - "/Date(1598793300000+0300)/", - "/Date(1598794200000+0300)/", - "/Date(1598795100000+0300)/", - "/Date(1598851800000+0300)/", - "/Date(1598852700000+0300)/", - "/Date(1598853600000+0300)/", - "/Date(1598854500000+0300)/", - "/Date(1598855400000+0300)/", - "/Date(1598856300000+0300)/", - "/Date(1598857200000+0300)/", - "/Date(1598858100000+0300)/", - "/Date(1598859000000+0300)/", - "/Date(1598859900000+0300)/", - "/Date(1598860800000+0300)/", - "/Date(1598861700000+0300)/", - "/Date(1598862600000+0300)/", - "/Date(1598863500000+0300)/", - "/Date(1598864400000+0300)/", - "/Date(1598865300000+0300)/", - "/Date(1598866200000+0300)/", - "/Date(1598867100000+0300)/", - "/Date(1598868000000+0300)/", - "/Date(1598868900000+0300)/", - "/Date(1598869800000+0300)/", - "/Date(1598870700000+0300)/", - "/Date(1598871600000+0300)/", - "/Date(1598872500000+0300)/", - "/Date(1598873400000+0300)/", - "/Date(1598874300000+0300)/", - "/Date(1598875200000+0300)/", - "/Date(1598876100000+0300)/", - "/Date(1598877000000+0300)/", - "/Date(1598877900000+0300)/", - "/Date(1598878800000+0300)/", - "/Date(1598879700000+0300)/", - "/Date(1598880600000+0300)/", - "/Date(1598881500000+0300)/", - "/Date(1598938200000+0300)/", - "/Date(1598939100000+0300)/", - "/Date(1598940000000+0300)/", - "/Date(1598940900000+0300)/", - "/Date(1598941800000+0300)/", - "/Date(1598942700000+0300)/", - "/Date(1598943600000+0300)/", - "/Date(1598944500000+0300)/", - "/Date(1598945400000+0300)/", - "/Date(1598946300000+0300)/", - "/Date(1598947200000+0300)/", - "/Date(1598948100000+0300)/", - "/Date(1598949000000+0300)/", - "/Date(1598949900000+0300)/", - "/Date(1598950800000+0300)/", - "/Date(1598951700000+0300)/", - "/Date(1598952600000+0300)/", - "/Date(1598953500000+0300)/", - "/Date(1598954400000+0300)/", - "/Date(1598955300000+0300)/", - "/Date(1598956200000+0300)/", - "/Date(1598957100000+0300)/", - "/Date(1598958000000+0300)/", - "/Date(1598958900000+0300)/", - "/Date(1598959800000+0300)/", - "/Date(1598960700000+0300)/", - "/Date(1598961600000+0300)/", - "/Date(1598962500000+0300)/", - "/Date(1598963400000+0300)/", - "/Date(1598964300000+0300)/", - "/Date(1598965200000+0300)/", - "/Date(1598966100000+0300)/", - "/Date(1598967000000+0300)/", - "/Date(1598967900000+0300)/", - "/Date(1599024600000+0300)/", - "/Date(1599025500000+0300)/", - "/Date(1599026400000+0300)/", - "/Date(1599027300000+0300)/", - "/Date(1599028200000+0300)/", - "/Date(1599029100000+0300)/", - "/Date(1599030000000+0300)/", - "/Date(1599030900000+0300)/", - "/Date(1599031800000+0300)/", - "/Date(1599032700000+0300)/", - "/Date(1599033600000+0300)/", - "/Date(1599034500000+0300)/", - "/Date(1599035400000+0300)/", - "/Date(1599036300000+0300)/", - "/Date(1599037200000+0300)/", - "/Date(1599038100000+0300)/", - "/Date(1599039000000+0300)/", - "/Date(1599039900000+0300)/", - "/Date(1599040800000+0300)/", - "/Date(1599041700000+0300)/", - "/Date(1599042600000+0300)/", - "/Date(1599043500000+0300)/", - "/Date(1599044400000+0300)/", - "/Date(1599045300000+0300)/", - "/Date(1599046200000+0300)/", - "/Date(1599047100000+0300)/", - "/Date(1599048000000+0300)/", - "/Date(1599048900000+0300)/", - "/Date(1599049800000+0300)/", - "/Date(1599050700000+0300)/", - "/Date(1599051600000+0300)/", - "/Date(1599052500000+0300)/", - "/Date(1599053400000+0300)/", - "/Date(1599054300000+0300)/", - "/Date(1599111000000+0300)/", - "/Date(1599111900000+0300)/", - "/Date(1599112800000+0300)/", - "/Date(1599113700000+0300)/", - "/Date(1599114600000+0300)/", - "/Date(1599115500000+0300)/", - "/Date(1599116400000+0300)/", - "/Date(1599117300000+0300)/", - "/Date(1599118200000+0300)/", - "/Date(1599119100000+0300)/", - "/Date(1599120000000+0300)/", - "/Date(1599120900000+0300)/", - "/Date(1599121800000+0300)/", - "/Date(1599122700000+0300)/", - "/Date(1599123600000+0300)/", - "/Date(1599124500000+0300)/", - "/Date(1599125400000+0300)/", - "/Date(1599126300000+0300)/", - "/Date(1599127200000+0300)/", - "/Date(1599128100000+0300)/", - "/Date(1599283800000+0300)/", - "/Date(1599284700000+0300)/", - "/Date(1599285600000+0300)/", - "/Date(1599286500000+0300)/", - "/Date(1599287400000+0300)/", - "/Date(1599288300000+0300)/", - "/Date(1599289200000+0300)/", - "/Date(1599290100000+0300)/", - "/Date(1599291000000+0300)/", - "/Date(1599291900000+0300)/", - "/Date(1599292800000+0300)/", - "/Date(1599293700000+0300)/", - "/Date(1599294600000+0300)/", - "/Date(1599295500000+0300)/", - "/Date(1599296400000+0300)/", - "/Date(1599297300000+0300)/", - "/Date(1599298200000+0300)/", - "/Date(1599299100000+0300)/", - "/Date(1599300000000+0300)/", - "/Date(1599300900000+0300)/", - "/Date(1599301800000+0300)/", - "/Date(1599302700000+0300)/", - "/Date(1599303600000+0300)/", - "/Date(1599304500000+0300)/", - "/Date(1599305400000+0300)/", - "/Date(1599306300000+0300)/", - "/Date(1599307200000+0300)/", - "/Date(1599308100000+0300)/", - "/Date(1599309000000+0300)/", - "/Date(1599309900000+0300)/", - "/Date(1599310800000+0300)/", - "/Date(1599311700000+0300)/", - "/Date(1599312600000+0300)/", - "/Date(1599313500000+0300)/", - "/Date(1599370200000+0300)/", - "/Date(1599371100000+0300)/", - "/Date(1599372000000+0300)/", - "/Date(1599372900000+0300)/", - "/Date(1599373800000+0300)/", - "/Date(1599374700000+0300)/", - "/Date(1599375600000+0300)/", - "/Date(1599376500000+0300)/", - "/Date(1599377400000+0300)/", - "/Date(1599378300000+0300)/", - "/Date(1599379200000+0300)/", - "/Date(1599380100000+0300)/", - "/Date(1599381000000+0300)/", - "/Date(1599381900000+0300)/", - "/Date(1599382800000+0300)/", - "/Date(1599383700000+0300)/", - "/Date(1599384600000+0300)/", - "/Date(1599385500000+0300)/", - "/Date(1599386400000+0300)/", - "/Date(1599387300000+0300)/", - "/Date(1599388200000+0300)/", - "/Date(1599389100000+0300)/", - "/Date(1599390000000+0300)/", - "/Date(1599390900000+0300)/", - "/Date(1599391800000+0300)/", - "/Date(1599392700000+0300)/", - "/Date(1599393600000+0300)/", - "/Date(1599394500000+0300)/", - "/Date(1599395400000+0300)/", - "/Date(1599396300000+0300)/", - "/Date(1599397200000+0300)/", - "/Date(1599398100000+0300)/", - "/Date(1599399000000+0300)/", - "/Date(1599399900000+0300)/", - "/Date(1599456600000+0300)/", - "/Date(1599457500000+0300)/", - "/Date(1599458400000+0300)/", - "/Date(1599459300000+0300)/", - "/Date(1599460200000+0300)/", - "/Date(1599461100000+0300)/", - "/Date(1599462000000+0300)/", - "/Date(1599462900000+0300)/", - "/Date(1599463800000+0300)/", - "/Date(1599464700000+0300)/", - "/Date(1599465600000+0300)/", - "/Date(1599466500000+0300)/", - "/Date(1599467400000+0300)/", - "/Date(1599468300000+0300)/", - "/Date(1599469200000+0300)/", - "/Date(1599470100000+0300)/", - "/Date(1599471000000+0300)/", - "/Date(1599471900000+0300)/", - "/Date(1599472800000+0300)/", - "/Date(1599473700000+0300)/", - "/Date(1599474600000+0300)/", - "/Date(1599475500000+0300)/", - "/Date(1599476400000+0300)/", - "/Date(1599477300000+0300)/", - "/Date(1599478200000+0300)/", - "/Date(1599479100000+0300)/", - "/Date(1599480000000+0300)/", - "/Date(1599480900000+0300)/", - "/Date(1599481800000+0300)/", - "/Date(1599482700000+0300)/", - "/Date(1599483600000+0300)/", - "/Date(1599484500000+0300)/", - "/Date(1599485400000+0300)/", - "/Date(1599486300000+0300)/", - "/Date(1599543000000+0300)/", - "/Date(1599543900000+0300)/", - "/Date(1599544800000+0300)/", - "/Date(1599545700000+0300)/", - "/Date(1599546600000+0300)/", - "/Date(1599547500000+0300)/", - "/Date(1599548400000+0300)/", - "/Date(1599549300000+0300)/", - "/Date(1599550200000+0300)/", - "/Date(1599551100000+0300)/", - "/Date(1599552000000+0300)/", - "/Date(1599552900000+0300)/", - "/Date(1599553800000+0300)/", - "/Date(1599554700000+0300)/", - "/Date(1599555600000+0300)/", - "/Date(1599556500000+0300)/", - "/Date(1599557400000+0300)/", - "/Date(1599558300000+0300)/", - "/Date(1599559200000+0300)/", - "/Date(1599560100000+0300)/", - "/Date(1599561000000+0300)/", - "/Date(1599561900000+0300)/", - "/Date(1599562800000+0300)/", - "/Date(1599563700000+0300)/", - "/Date(1599564600000+0300)/", - "/Date(1599565500000+0300)/", - "/Date(1599566400000+0300)/", - "/Date(1599567300000+0300)/", - "/Date(1599568200000+0300)/", - "/Date(1599569100000+0300)/", - "/Date(1599570000000+0300)/", - "/Date(1599570900000+0300)/", - "/Date(1599571800000+0300)/", - "/Date(1599572700000+0300)/", - "/Date(1599629400000+0300)/", - "/Date(1599630300000+0300)/", - "/Date(1599631200000+0300)/", - "/Date(1599632100000+0300)/", - "/Date(1599633000000+0300)/", - "/Date(1599633900000+0300)/", - "/Date(1599634800000+0300)/", - "/Date(1599635700000+0300)/", - "/Date(1599636600000+0300)/", - "/Date(1599637500000+0300)/", - "/Date(1599638400000+0300)/", - "/Date(1599639300000+0300)/", - "/Date(1599640200000+0300)/", - "/Date(1599641100000+0300)/", - "/Date(1599642000000+0300)/", - "/Date(1599642900000+0300)/", - "/Date(1599643800000+0300)/", - "/Date(1599644700000+0300)/", - "/Date(1599645600000+0300)/", - "/Date(1599646500000+0300)/", - "/Date(1599647400000+0300)/", - "/Date(1599648300000+0300)/", - "/Date(1599649200000+0300)/", - "/Date(1599650100000+0300)/", - "/Date(1599651000000+0300)/", - "/Date(1599651900000+0300)/", - "/Date(1599652800000+0300)/", - "/Date(1599653700000+0300)/", - "/Date(1599654600000+0300)/", - "/Date(1599655500000+0300)/", - "/Date(1599656400000+0300)/", - "/Date(1599657300000+0300)/", - "/Date(1599658200000+0300)/", - "/Date(1599659100000+0300)/", - "/Date(1599715800000+0300)/", - "/Date(1599716700000+0300)/", - "/Date(1599717600000+0300)/", - "/Date(1599718500000+0300)/", - "/Date(1599719400000+0300)/", - "/Date(1599720300000+0300)/", - "/Date(1599721200000+0300)/", - "/Date(1599722100000+0300)/", - "/Date(1599723000000+0300)/", - "/Date(1599723900000+0300)/", - "/Date(1599724800000+0300)/", - "/Date(1599725700000+0300)/", - "/Date(1599726600000+0300)/", - "/Date(1599727500000+0300)/", - "/Date(1599728400000+0300)/", - "/Date(1599729300000+0300)/", - "/Date(1599730200000+0300)/", - "/Date(1599731100000+0300)/", - "/Date(1599732000000+0300)/", - "/Date(1599732900000+0300)/", - "/Date(1599888600000+0300)/", - "/Date(1599889500000+0300)/", - "/Date(1599890400000+0300)/", - "/Date(1599891300000+0300)/", - "/Date(1599892200000+0300)/", - "/Date(1599893100000+0300)/", - "/Date(1599894000000+0300)/", - "/Date(1599894900000+0300)/", - "/Date(1599895800000+0300)/", - "/Date(1599896700000+0300)/", - "/Date(1599897600000+0300)/", - "/Date(1599898500000+0300)/", - "/Date(1599899400000+0300)/", - "/Date(1599900300000+0300)/", - "/Date(1599901200000+0300)/", - "/Date(1599902100000+0300)/", - "/Date(1599903000000+0300)/", - "/Date(1599903900000+0300)/", - "/Date(1599904800000+0300)/", - "/Date(1599905700000+0300)/", - "/Date(1599906600000+0300)/", - "/Date(1599907500000+0300)/", - "/Date(1599908400000+0300)/", - "/Date(1599909300000+0300)/", - "/Date(1599910200000+0300)/", - "/Date(1599911100000+0300)/", - "/Date(1599912000000+0300)/", - "/Date(1599912900000+0300)/", - "/Date(1599913800000+0300)/", - "/Date(1599914700000+0300)/", - "/Date(1599915600000+0300)/", - "/Date(1599916500000+0300)/", - "/Date(1599917400000+0300)/", - "/Date(1599918300000+0300)/", - "/Date(1599975000000+0300)/", - "/Date(1599975900000+0300)/", - "/Date(1599976800000+0300)/", - "/Date(1599977700000+0300)/", - "/Date(1599978600000+0300)/", - "/Date(1599979500000+0300)/", - "/Date(1599980400000+0300)/", - "/Date(1599981300000+0300)/", - "/Date(1599982200000+0300)/", - "/Date(1599983100000+0300)/", - "/Date(1599984000000+0300)/", - "/Date(1599984900000+0300)/", - "/Date(1599985800000+0300)/", - "/Date(1599986700000+0300)/", - "/Date(1599987600000+0300)/", - "/Date(1599988500000+0300)/", - "/Date(1599989400000+0300)/", - "/Date(1599990300000+0300)/", - "/Date(1599991200000+0300)/", - "/Date(1599992100000+0300)/", - "/Date(1599993000000+0300)/", - "/Date(1599993900000+0300)/", - "/Date(1599994800000+0300)/", - "/Date(1599995700000+0300)/", - "/Date(1599996600000+0300)/", - "/Date(1599997500000+0300)/", - "/Date(1599998400000+0300)/", - "/Date(1599999300000+0300)/", - "/Date(1600000200000+0300)/", - "/Date(1600001100000+0300)/", - "/Date(1600002000000+0300)/", - "/Date(1600002900000+0300)/", - "/Date(1600003800000+0300)/", - "/Date(1600004700000+0300)/", - "/Date(1600061400000+0300)/", - "/Date(1600062300000+0300)/", - "/Date(1600063200000+0300)/", - "/Date(1600064100000+0300)/", - "/Date(1600065000000+0300)/", - "/Date(1600065900000+0300)/", - "/Date(1600066800000+0300)/", - "/Date(1600067700000+0300)/", - "/Date(1600068600000+0300)/", - "/Date(1600069500000+0300)/", - "/Date(1600070400000+0300)/", - "/Date(1600071300000+0300)/", - "/Date(1600072200000+0300)/", - "/Date(1600073100000+0300)/", - "/Date(1600074000000+0300)/", - "/Date(1600074900000+0300)/", - "/Date(1600075800000+0300)/", - "/Date(1600076700000+0300)/", - "/Date(1600077600000+0300)/", - "/Date(1600078500000+0300)/", - "/Date(1600079400000+0300)/", - "/Date(1600080300000+0300)/", - "/Date(1600081200000+0300)/", - "/Date(1600082100000+0300)/", - "/Date(1600083000000+0300)/", - "/Date(1600083900000+0300)/", - "/Date(1600084800000+0300)/", - "/Date(1600085700000+0300)/", - "/Date(1600086600000+0300)/", - "/Date(1600087500000+0300)/", - "/Date(1600088400000+0300)/", - "/Date(1600089300000+0300)/", - "/Date(1600090200000+0300)/", - "/Date(1600091100000+0300)/", - "/Date(1600147800000+0300)/", - "/Date(1600148700000+0300)/", - "/Date(1600149600000+0300)/", - "/Date(1600150500000+0300)/", - "/Date(1600151400000+0300)/", - "/Date(1600152300000+0300)/", - "/Date(1600153200000+0300)/", - "/Date(1600154100000+0300)/", - "/Date(1600155000000+0300)/", - "/Date(1600155900000+0300)/", - "/Date(1600156800000+0300)/", - "/Date(1600157700000+0300)/", - "/Date(1600158600000+0300)/", - "/Date(1600159500000+0300)/", - "/Date(1600160400000+0300)/", - "/Date(1600161300000+0300)/", - "/Date(1600162200000+0300)/", - "/Date(1600163100000+0300)/", - "/Date(1600164000000+0300)/", - "/Date(1600164900000+0300)/", - "/Date(1600165800000+0300)/", - "/Date(1600166700000+0300)/", - "/Date(1600167600000+0300)/", - "/Date(1600168500000+0300)/", - "/Date(1600169400000+0300)/", - "/Date(1600170300000+0300)/", - "/Date(1600171200000+0300)/", - "/Date(1600172100000+0300)/", - "/Date(1600173000000+0300)/", - "/Date(1600173900000+0300)/", - "/Date(1600174800000+0300)/", - "/Date(1600175700000+0300)/", - "/Date(1600176600000+0300)/", - "/Date(1600177500000+0300)/", - "/Date(1600234200000+0300)/", - "/Date(1600235100000+0300)/", - "/Date(1600236000000+0300)/", - "/Date(1600236900000+0300)/", - "/Date(1600237800000+0300)/", - "/Date(1600238700000+0300)/", - "/Date(1600239600000+0300)/", - "/Date(1600240500000+0300)/", - "/Date(1600241400000+0300)/", - "/Date(1600242300000+0300)/", - "/Date(1600243200000+0300)/", - "/Date(1600244100000+0300)/", - "/Date(1600245000000+0300)/", - "/Date(1600245900000+0300)/", - "/Date(1600246800000+0300)/", - "/Date(1600247700000+0300)/", - "/Date(1600248600000+0300)/", - "/Date(1600249500000+0300)/", - "/Date(1600250400000+0300)/", - "/Date(1600251300000+0300)/", - "/Date(1600252200000+0300)/", - "/Date(1600253100000+0300)/", - "/Date(1600254000000+0300)/", - "/Date(1600254900000+0300)/", - "/Date(1600255800000+0300)/", - "/Date(1600256700000+0300)/", - "/Date(1600257600000+0300)/", - "/Date(1600258500000+0300)/", - "/Date(1600259400000+0300)/", - "/Date(1600260300000+0300)/", - "/Date(1600261200000+0300)/", - "/Date(1600262100000+0300)/", - "/Date(1600263000000+0300)/", - "/Date(1600263900000+0300)/", - "/Date(1600320600000+0300)/", - "/Date(1600321500000+0300)/", - "/Date(1600322400000+0300)/", - "/Date(1600323300000+0300)/", - "/Date(1600324200000+0300)/", - "/Date(1600325100000+0300)/", - "/Date(1600326000000+0300)/", - "/Date(1600326900000+0300)/", - "/Date(1600327800000+0300)/", - "/Date(1600328700000+0300)/", - "/Date(1600329600000+0300)/", - "/Date(1600330500000+0300)/", - "/Date(1600331400000+0300)/", - "/Date(1600332300000+0300)/", - "/Date(1600333200000+0300)/", - "/Date(1600334100000+0300)/", - "/Date(1600335000000+0300)/", - "/Date(1600335900000+0300)/", - "/Date(1600336800000+0300)/", - "/Date(1600337700000+0300)/", - "/Date(1600493400000+0300)/", - "/Date(1600494300000+0300)/", - "/Date(1600495200000+0300)/", - "/Date(1600496100000+0300)/", - "/Date(1600497000000+0300)/", - "/Date(1600497900000+0300)/", - "/Date(1600498800000+0300)/", - "/Date(1600499700000+0300)/", - "/Date(1600500600000+0300)/", - "/Date(1600501500000+0300)/", - "/Date(1600502400000+0300)/", - "/Date(1600503300000+0300)/", - "/Date(1600504200000+0300)/", - "/Date(1600505100000+0300)/", - "/Date(1600506000000+0300)/", - "/Date(1600506900000+0300)/", - "/Date(1600507800000+0300)/", - "/Date(1600508700000+0300)/", - "/Date(1600509600000+0300)/", - "/Date(1600510500000+0300)/", - "/Date(1600511400000+0300)/", - "/Date(1600512300000+0300)/", - "/Date(1600513200000+0300)/", - "/Date(1600514100000+0300)/", - "/Date(1600515000000+0300)/", - "/Date(1600515900000+0300)/", - "/Date(1600516800000+0300)/", - "/Date(1600517700000+0300)/", - "/Date(1600518600000+0300)/", - "/Date(1600519500000+0300)/", - "/Date(1600520400000+0300)/", - "/Date(1600521300000+0300)/", - "/Date(1600522200000+0300)/", - "/Date(1600523100000+0300)/", - "/Date(1600579800000+0300)/", - "/Date(1600580700000+0300)/", - "/Date(1600581600000+0300)/", - "/Date(1600582500000+0300)/", - "/Date(1600583400000+0300)/", - "/Date(1600584300000+0300)/", - "/Date(1600585200000+0300)/", - "/Date(1600586100000+0300)/", - "/Date(1600587000000+0300)/", - "/Date(1600587900000+0300)/", - "/Date(1600588800000+0300)/", - "/Date(1600589700000+0300)/", - "/Date(1600590600000+0300)/", - "/Date(1600591500000+0300)/", - "/Date(1600592400000+0300)/", - "/Date(1600593300000+0300)/", - "/Date(1600594200000+0300)/", - "/Date(1600595100000+0300)/", - "/Date(1600596000000+0300)/", - "/Date(1600596900000+0300)/", - "/Date(1600597800000+0300)/", - "/Date(1600598700000+0300)/", - "/Date(1600599600000+0300)/", - "/Date(1600600500000+0300)/", - "/Date(1600601400000+0300)/", - "/Date(1600602300000+0300)/", - "/Date(1600603200000+0300)/", - "/Date(1600604100000+0300)/", - "/Date(1600605000000+0300)/", - "/Date(1600605900000+0300)/", - "/Date(1600606800000+0300)/", - "/Date(1600607700000+0300)/", - "/Date(1600608600000+0300)/", - "/Date(1600609500000+0300)/", - "/Date(1600666200000+0300)/", - "/Date(1600667100000+0300)/", - "/Date(1600668000000+0300)/", - "/Date(1600668900000+0300)/", - "/Date(1600669800000+0300)/", - "/Date(1600670700000+0300)/", - "/Date(1600671600000+0300)/", - "/Date(1600672500000+0300)/", - "/Date(1600673400000+0300)/", - "/Date(1600674300000+0300)/", - "/Date(1600675200000+0300)/", - "/Date(1600676100000+0300)/", - "/Date(1600677000000+0300)/", - "/Date(1600677900000+0300)/", - "/Date(1600678800000+0300)/", - "/Date(1600679700000+0300)/", - "/Date(1600680600000+0300)/", - "/Date(1600681500000+0300)/", - "/Date(1600682400000+0300)/", - "/Date(1600683300000+0300)/", - "/Date(1600684200000+0300)/", - "/Date(1600685100000+0300)/", - "/Date(1600686000000+0300)/", - "/Date(1600686900000+0300)/", - "/Date(1600687800000+0300)/", - "/Date(1600688700000+0300)/", - "/Date(1600689600000+0300)/", - "/Date(1600690500000+0300)/", - "/Date(1600691400000+0300)/", - "/Date(1600692300000+0300)/", - "/Date(1600693200000+0300)/", - "/Date(1600694100000+0300)/", - "/Date(1600695000000+0300)/", - "/Date(1600695900000+0300)/", - "/Date(1600752600000+0300)/", - "/Date(1600753500000+0300)/", - "/Date(1600754400000+0300)/", - "/Date(1600755300000+0300)/", - "/Date(1600756200000+0300)/", - "/Date(1600757100000+0300)/", - "/Date(1600758000000+0300)/", - "/Date(1600758900000+0300)/", - "/Date(1600759800000+0300)/", - "/Date(1600760700000+0300)/", - "/Date(1600761600000+0300)/", - "/Date(1600762500000+0300)/", - "/Date(1600763400000+0300)/", - "/Date(1600764300000+0300)/", - "/Date(1600765200000+0300)/", - "/Date(1600766100000+0300)/", - "/Date(1600767000000+0300)/", - "/Date(1600767900000+0300)/", - "/Date(1600768800000+0300)/", - "/Date(1600769700000+0300)/", - "/Date(1600770600000+0300)/", - "/Date(1600771500000+0300)/", - "/Date(1600772400000+0300)/", - "/Date(1600773300000+0300)/", - "/Date(1600774200000+0300)/", - "/Date(1600775100000+0300)/", - "/Date(1600776000000+0300)/", - "/Date(1600776900000+0300)/", - "/Date(1600777800000+0300)/", - "/Date(1600778700000+0300)/", - "/Date(1600779600000+0300)/", - "/Date(1600780500000+0300)/", - "/Date(1600781400000+0300)/", - "/Date(1600782300000+0300)/", - "/Date(1600839000000+0300)/", - "/Date(1600839900000+0300)/", - "/Date(1600840800000+0300)/", - "/Date(1600841700000+0300)/", - "/Date(1600842600000+0300)/", - "/Date(1600843500000+0300)/", - "/Date(1600844400000+0300)/", - "/Date(1600845300000+0300)/", - "/Date(1600846200000+0300)/", - "/Date(1600847100000+0300)/", - "/Date(1600848000000+0300)/", - "/Date(1600848900000+0300)/", - "/Date(1600849800000+0300)/", - "/Date(1600850700000+0300)/", - "/Date(1600851600000+0300)/", - "/Date(1600852500000+0300)/", - "/Date(1600853400000+0300)/", - "/Date(1600854300000+0300)/", - "/Date(1600855200000+0300)/", - "/Date(1600856100000+0300)/", - "/Date(1600857000000+0300)/", - "/Date(1600857900000+0300)/", - "/Date(1600858800000+0300)/", - "/Date(1600859700000+0300)/", - "/Date(1600860600000+0300)/", - "/Date(1600861500000+0300)/", - "/Date(1600862400000+0300)/", - "/Date(1600863300000+0300)/", - "/Date(1600864200000+0300)/", - "/Date(1600865100000+0300)/", - "/Date(1600866000000+0300)/", - "/Date(1600866900000+0300)/", - "/Date(1600867800000+0300)/", - "/Date(1600868700000+0300)/", - "/Date(1600925400000+0300)/", - "/Date(1600926300000+0300)/", - "/Date(1600927200000+0300)/", - "/Date(1600928100000+0300)/", - "/Date(1600929000000+0300)/", - "/Date(1600929900000+0300)/", - "/Date(1600930800000+0300)/", - "/Date(1600931700000+0300)/", - "/Date(1600932600000+0300)/", - "/Date(1600933500000+0300)/", - "/Date(1600934400000+0300)/", - "/Date(1600935300000+0300)/", - "/Date(1600936200000+0300)/", - "/Date(1600937100000+0300)/", - "/Date(1600938000000+0300)/", - "/Date(1600938900000+0300)/", - "/Date(1600939800000+0300)/", - "/Date(1600940700000+0300)/", - "/Date(1600941600000+0300)/", - "/Date(1600942500000+0300)/", - "/Date(1601098200000+0300)/", - "/Date(1601099100000+0300)/", - "/Date(1601100000000+0300)/", - "/Date(1601100900000+0300)/", - "/Date(1601101800000+0300)/", - "/Date(1601102700000+0300)/", - "/Date(1601103600000+0300)/", - "/Date(1601104500000+0300)/", - "/Date(1601105400000+0300)/", - "/Date(1601106300000+0300)/", - "/Date(1601107200000+0300)/", - "/Date(1601108100000+0300)/", - "/Date(1601109000000+0300)/", - "/Date(1601109900000+0300)/", - "/Date(1601110800000+0300)/", - "/Date(1601111700000+0300)/", - "/Date(1601112600000+0300)/", - "/Date(1601113500000+0300)/", - "/Date(1601114400000+0300)/", - "/Date(1601115300000+0300)/", - "/Date(1601116200000+0300)/", - "/Date(1601117100000+0300)/", - "/Date(1601118000000+0300)/", - "/Date(1601118900000+0300)/", - "/Date(1601119800000+0300)/", - "/Date(1601120700000+0300)/", - "/Date(1601121600000+0300)/", - "/Date(1601122500000+0300)/", - "/Date(1601123400000+0300)/", - "/Date(1601124300000+0300)/", - "/Date(1601125200000+0300)/", - "/Date(1601126100000+0300)/", - "/Date(1601127000000+0300)/", - "/Date(1601127900000+0300)/", - "/Date(1601184600000+0300)/", - "/Date(1601185500000+0300)/", - "/Date(1601186400000+0300)/", - "/Date(1601187300000+0300)/", - "/Date(1601188200000+0300)/", - "/Date(1601189100000+0300)/", - "/Date(1601190000000+0300)/", - "/Date(1601190900000+0300)/", - "/Date(1601191800000+0300)/", - "/Date(1601192700000+0300)/", - "/Date(1601193600000+0300)/", - "/Date(1601194500000+0300)/", - "/Date(1601195400000+0300)/", - "/Date(1601196300000+0300)/", - "/Date(1601197200000+0300)/", - "/Date(1601198100000+0300)/", - "/Date(1601199000000+0300)/", - "/Date(1601199900000+0300)/", - "/Date(1601200800000+0300)/", - "/Date(1601201700000+0300)/", - "/Date(1601202600000+0300)/", - "/Date(1601203500000+0300)/", - "/Date(1601204400000+0300)/", - "/Date(1601205300000+0300)/", - "/Date(1601206200000+0300)/", - "/Date(1601207100000+0300)/", - "/Date(1601208000000+0300)/", - "/Date(1601208900000+0300)/", - "/Date(1601209800000+0300)/", - "/Date(1601210700000+0300)/", - "/Date(1601211600000+0300)/", - "/Date(1601212500000+0300)/", - "/Date(1601213400000+0300)/", - "/Date(1601214300000+0300)/", - "/Date(1601271000000+0300)/", - "/Date(1601271900000+0300)/", - "/Date(1601272800000+0300)/", - "/Date(1601273700000+0300)/", - "/Date(1601274600000+0300)/", - "/Date(1601275500000+0300)/", - "/Date(1601276400000+0300)/", - "/Date(1601277300000+0300)/", - "/Date(1601278200000+0300)/", - "/Date(1601279100000+0300)/", - "/Date(1601280000000+0300)/", - "/Date(1601280900000+0300)/", - "/Date(1601281800000+0300)/", - "/Date(1601282700000+0300)/", - "/Date(1601283600000+0300)/", - "/Date(1601284500000+0300)/", - "/Date(1601285400000+0300)/", - "/Date(1601286300000+0300)/", - "/Date(1601287200000+0300)/", - "/Date(1601288100000+0300)/", - "/Date(1601289000000+0300)/", - "/Date(1601289900000+0300)/", - "/Date(1601290800000+0300)/", - "/Date(1601291700000+0300)/", - "/Date(1601292600000+0300)/", - "/Date(1601293500000+0300)/", - "/Date(1601294400000+0300)/", - "/Date(1601295300000+0300)/", - "/Date(1601296200000+0300)/", - "/Date(1601297100000+0300)/", - "/Date(1601298000000+0300)/", - "/Date(1601298900000+0300)/", - "/Date(1601299800000+0300)/", - "/Date(1601300700000+0300)/", - "/Date(1601357400000+0300)/", - "/Date(1601358300000+0300)/", - "/Date(1601359200000+0300)/", - "/Date(1601360100000+0300)/", - "/Date(1601361000000+0300)/", - "/Date(1601361900000+0300)/", - "/Date(1601362800000+0300)/", - "/Date(1601363700000+0300)/", - "/Date(1601364600000+0300)/", - "/Date(1601365500000+0300)/", - "/Date(1601366400000+0300)/", - "/Date(1601367300000+0300)/", - "/Date(1601368200000+0300)/", - "/Date(1601369100000+0300)/", - "/Date(1601370000000+0300)/", - "/Date(1601370900000+0300)/", - "/Date(1601371800000+0300)/", - "/Date(1601372700000+0300)/", - "/Date(1601373600000+0300)/", - "/Date(1601374500000+0300)/", - "/Date(1601375400000+0300)/", - "/Date(1601376300000+0300)/", - "/Date(1601377200000+0300)/", - "/Date(1601378100000+0300)/", - "/Date(1601379000000+0300)/", - "/Date(1601379900000+0300)/", - "/Date(1601380800000+0300)/", - "/Date(1601381700000+0300)/", - "/Date(1601382600000+0300)/", - "/Date(1601383500000+0300)/", - "/Date(1601384400000+0300)/", - "/Date(1601385300000+0300)/", - "/Date(1601386200000+0300)/", - "/Date(1601387100000+0300)/", - "/Date(1601443800000+0300)/", - "/Date(1601444700000+0300)/", - "/Date(1601445600000+0300)/", - "/Date(1601446500000+0300)/", - "/Date(1601447400000+0300)/", - "/Date(1601448300000+0300)/", - "/Date(1601449200000+0300)/", - "/Date(1601450100000+0300)/", - "/Date(1601451000000+0300)/", - "/Date(1601451900000+0300)/", - "/Date(1601452800000+0300)/", - "/Date(1601453700000+0300)/", - "/Date(1601454600000+0300)/", - "/Date(1601455500000+0300)/", - "/Date(1601456400000+0300)/", - "/Date(1601457300000+0300)/", - "/Date(1601458200000+0300)/", - "/Date(1601459100000+0300)/", - "/Date(1601460000000+0300)/", - "/Date(1601460900000+0300)/", - "/Date(1601461800000+0300)/", - "/Date(1601462700000+0300)/", - "/Date(1601463600000+0300)/", - "/Date(1601464500000+0300)/", - "/Date(1601465400000+0300)/", - "/Date(1601466300000+0300)/", - "/Date(1601467200000+0300)/", - "/Date(1601468100000+0300)/", - "/Date(1601469000000+0300)/", - "/Date(1601469900000+0300)/", - "/Date(1601470800000+0300)/", - "/Date(1601471700000+0300)/", - "/Date(1601472600000+0300)/", - "/Date(1601473500000+0300)/", - "/Date(1601530200000+0300)/", - "/Date(1601531100000+0300)/", - "/Date(1601532000000+0300)/", - "/Date(1601532900000+0300)/", - "/Date(1601533800000+0300)/", - "/Date(1601534700000+0300)/", - "/Date(1601535600000+0300)/", - "/Date(1601536500000+0300)/", - "/Date(1601537400000+0300)/", - "/Date(1601538300000+0300)/", - "/Date(1601539200000+0300)/", - "/Date(1601540100000+0300)/", - "/Date(1601541000000+0300)/", - "/Date(1601541900000+0300)/", - "/Date(1601542800000+0300)/", - "/Date(1601543700000+0300)/", - "/Date(1601544600000+0300)/", - "/Date(1601545500000+0300)/", - "/Date(1601546400000+0300)/", - "/Date(1601547300000+0300)/", - "/Date(1601703000000+0300)/", - "/Date(1601703900000+0300)/", - "/Date(1601704800000+0300)/", - "/Date(1601705700000+0300)/", - "/Date(1601706600000+0300)/", - "/Date(1601707500000+0300)/", - "/Date(1601708400000+0300)/", - "/Date(1601709300000+0300)/", - "/Date(1601710200000+0300)/", - "/Date(1601711100000+0300)/", - "/Date(1601712000000+0300)/", - "/Date(1601712900000+0300)/", - "/Date(1601713800000+0300)/", - "/Date(1601714700000+0300)/", - "/Date(1601715600000+0300)/", - "/Date(1601716500000+0300)/", - "/Date(1601717400000+0300)/", - "/Date(1601718300000+0300)/", - "/Date(1601719200000+0300)/", - "/Date(1601720100000+0300)/", - "/Date(1601721000000+0300)/", - "/Date(1601721900000+0300)/", - "/Date(1601722800000+0300)/", - "/Date(1601723700000+0300)/", - "/Date(1601724600000+0300)/", - "/Date(1601725500000+0300)/", - "/Date(1601726400000+0300)/", - "/Date(1601727300000+0300)/", - "/Date(1601728200000+0300)/", - "/Date(1601729100000+0300)/", - "/Date(1601730000000+0300)/", - "/Date(1601730900000+0300)/", - "/Date(1601731800000+0300)/", - "/Date(1601732700000+0300)/", - "/Date(1601789400000+0300)/", - "/Date(1601790300000+0300)/", - "/Date(1601791200000+0300)/", - "/Date(1601792100000+0300)/", - "/Date(1601793000000+0300)/", - "/Date(1601793900000+0300)/", - "/Date(1601794800000+0300)/", - "/Date(1601795700000+0300)/", - "/Date(1601796600000+0300)/", - "/Date(1601797500000+0300)/", - "/Date(1601798400000+0300)/", - "/Date(1601799300000+0300)/", - "/Date(1601800200000+0300)/", - "/Date(1601801100000+0300)/", - "/Date(1601802000000+0300)/", - "/Date(1601802900000+0300)/", - "/Date(1601803800000+0300)/", - "/Date(1601804700000+0300)/", - "/Date(1601805600000+0300)/", - "/Date(1601806500000+0300)/", - "/Date(1601807400000+0300)/", - "/Date(1601808300000+0300)/", - "/Date(1601809200000+0300)/", - "/Date(1601810100000+0300)/", - "/Date(1601811000000+0300)/", - "/Date(1601811900000+0300)/", - "/Date(1601812800000+0300)/", - "/Date(1601813700000+0300)/", - "/Date(1601814600000+0300)/", - "/Date(1601815500000+0300)/", - "/Date(1601816400000+0300)/", - "/Date(1601817300000+0300)/", - "/Date(1601818200000+0300)/", - "/Date(1601819100000+0300)/", - "/Date(1601875800000+0300)/", - "/Date(1601876700000+0300)/", - "/Date(1601877600000+0300)/", - "/Date(1601878500000+0300)/", - "/Date(1601879400000+0300)/", - "/Date(1601880300000+0300)/", - "/Date(1601881200000+0300)/", - "/Date(1601882100000+0300)/", - "/Date(1601883000000+0300)/", - "/Date(1601883900000+0300)/", - "/Date(1601884800000+0300)/", - "/Date(1601885700000+0300)/", - "/Date(1601886600000+0300)/", - "/Date(1601887500000+0300)/", - "/Date(1601888400000+0300)/", - "/Date(1601889300000+0300)/", - "/Date(1601890200000+0300)/", - "/Date(1601891100000+0300)/", - "/Date(1601892000000+0300)/", - "/Date(1601892900000+0300)/", - "/Date(1601893800000+0300)/", - "/Date(1601894700000+0300)/", - "/Date(1601895600000+0300)/", - "/Date(1601896500000+0300)/", - "/Date(1601897400000+0300)/", - "/Date(1601898300000+0300)/", - "/Date(1601899200000+0300)/", - "/Date(1601900100000+0300)/", - "/Date(1601901000000+0300)/", - "/Date(1601901900000+0300)/", - "/Date(1601902800000+0300)/", - "/Date(1601903700000+0300)/", - "/Date(1601904600000+0300)/", - "/Date(1601905500000+0300)/", - "/Date(1601962200000+0300)/", - "/Date(1601963100000+0300)/", - "/Date(1601964000000+0300)/", - "/Date(1601964900000+0300)/", - "/Date(1601965800000+0300)/", - "/Date(1601966700000+0300)/", - "/Date(1601967600000+0300)/", - "/Date(1601968500000+0300)/", - "/Date(1601969400000+0300)/", - "/Date(1601970300000+0300)/", - "/Date(1601971200000+0300)/", - "/Date(1601972100000+0300)/", - "/Date(1601973000000+0300)/", - "/Date(1601973900000+0300)/", - "/Date(1601974800000+0300)/", - "/Date(1601975700000+0300)/", - "/Date(1601976600000+0300)/", - "/Date(1601977500000+0300)/", - "/Date(1601978400000+0300)/", - "/Date(1601979300000+0300)/", - "/Date(1601980200000+0300)/", - "/Date(1601981100000+0300)/", - "/Date(1601982000000+0300)/", - "/Date(1601982900000+0300)/", - "/Date(1601983800000+0300)/", - "/Date(1601984700000+0300)/", - "/Date(1601985600000+0300)/", - "/Date(1601986500000+0300)/", - "/Date(1601987400000+0300)/", - "/Date(1601988300000+0300)/", - "/Date(1601989200000+0300)/", - "/Date(1601990100000+0300)/", - "/Date(1601991000000+0300)/", - "/Date(1601991900000+0300)/", - "/Date(1602048600000+0300)/", - "/Date(1602049500000+0300)/", - "/Date(1602050400000+0300)/", - "/Date(1602051300000+0300)/", - "/Date(1602052200000+0300)/", - "/Date(1602053100000+0300)/", - "/Date(1602054000000+0300)/", - "/Date(1602054900000+0300)/", - "/Date(1602055800000+0300)/", - "/Date(1602056700000+0300)/", - "/Date(1602057600000+0300)/", - "/Date(1602058500000+0300)/", - "/Date(1602059400000+0300)/", - "/Date(1602060300000+0300)/", - "/Date(1602061200000+0300)/", - "/Date(1602062100000+0300)/", - "/Date(1602063000000+0300)/", - "/Date(1602063900000+0300)/", - "/Date(1602064800000+0300)/", - "/Date(1602065700000+0300)/", - "/Date(1602066600000+0300)/", - "/Date(1602067500000+0300)/", - "/Date(1602068400000+0300)/", - "/Date(1602069300000+0300)/", - "/Date(1602070200000+0300)/", - "/Date(1602071100000+0300)/", - "/Date(1602072000000+0300)/", - "/Date(1602072900000+0300)/", - "/Date(1602073800000+0300)/", - "/Date(1602074700000+0300)/", - "/Date(1602075600000+0300)/", - "/Date(1602076500000+0300)/", - "/Date(1602077400000+0300)/", - "/Date(1602078300000+0300)/", - "/Date(1602135000000+0300)/", - "/Date(1602135900000+0300)/", - "/Date(1602136800000+0300)/", - "/Date(1602137700000+0300)/", - "/Date(1602138600000+0300)/", - "/Date(1602139500000+0300)/", - "/Date(1602140400000+0300)/", - "/Date(1602141300000+0300)/", - "/Date(1602142200000+0300)/", - "/Date(1602143100000+0300)/", - "/Date(1602144000000+0300)/", - "/Date(1602144900000+0300)/", - "/Date(1602145800000+0300)/", - "/Date(1602146700000+0300)/", - "/Date(1602147600000+0300)/", - "/Date(1602148500000+0300)/", - "/Date(1602149400000+0300)/", - "/Date(1602150300000+0300)/", - "/Date(1602151200000+0300)/", - "/Date(1602152100000+0300)/", - "/Date(1602307800000+0300)/", - "/Date(1602308700000+0300)/", - "/Date(1602309600000+0300)/", - "/Date(1602310500000+0300)/", - "/Date(1602311400000+0300)/", - "/Date(1602312300000+0300)/", - "/Date(1602313200000+0300)/", - "/Date(1602314100000+0300)/", - "/Date(1602315000000+0300)/", - "/Date(1602315900000+0300)/", - "/Date(1602316800000+0300)/", - "/Date(1602317700000+0300)/", - "/Date(1602318600000+0300)/", - "/Date(1602319500000+0300)/", - "/Date(1602320400000+0300)/", - "/Date(1602321300000+0300)/", - "/Date(1602322200000+0300)/", - "/Date(1602323100000+0300)/", - "/Date(1602324000000+0300)/", - "/Date(1602324900000+0300)/", - "/Date(1602325800000+0300)/", - "/Date(1602326700000+0300)/", - "/Date(1602327600000+0300)/", - "/Date(1602328500000+0300)/", - "/Date(1602329400000+0300)/", - "/Date(1602330300000+0300)/", - "/Date(1602331200000+0300)/", - "/Date(1602332100000+0300)/", - "/Date(1602333000000+0300)/", - "/Date(1602333900000+0300)/", - "/Date(1602334800000+0300)/", - "/Date(1602335700000+0300)/", - "/Date(1602336600000+0300)/", - "/Date(1602337500000+0300)/", - "/Date(1602394200000+0300)/", - "/Date(1602395100000+0300)/", - "/Date(1602396000000+0300)/", - "/Date(1602396900000+0300)/", - "/Date(1602397800000+0300)/", - "/Date(1602398700000+0300)/", - "/Date(1602399600000+0300)/", - "/Date(1602400500000+0300)/", - "/Date(1602401400000+0300)/", - "/Date(1602402300000+0300)/", - "/Date(1602403200000+0300)/", - "/Date(1602404100000+0300)/", - "/Date(1602405000000+0300)/", - "/Date(1602405900000+0300)/", - "/Date(1602406800000+0300)/", - "/Date(1602407700000+0300)/", - "/Date(1602408600000+0300)/", - "/Date(1602409500000+0300)/", - "/Date(1602410400000+0300)/", - "/Date(1602411300000+0300)/", - "/Date(1602412200000+0300)/", - "/Date(1602413100000+0300)/", - "/Date(1602414000000+0300)/", - "/Date(1602414900000+0300)/", - "/Date(1602415800000+0300)/", - "/Date(1602416700000+0300)/", - "/Date(1602417600000+0300)/", - "/Date(1602418500000+0300)/", - "/Date(1602419400000+0300)/", - "/Date(1602420300000+0300)/", - "/Date(1602421200000+0300)/", - "/Date(1602422100000+0300)/", - "/Date(1602423000000+0300)/", - "/Date(1602423900000+0300)/", - "/Date(1602480600000+0300)/", - "/Date(1602481500000+0300)/", - "/Date(1602482400000+0300)/", - "/Date(1602483300000+0300)/", - "/Date(1602484200000+0300)/", - "/Date(1602485100000+0300)/", - "/Date(1602486000000+0300)/", - "/Date(1602486900000+0300)/", - "/Date(1602487800000+0300)/", - "/Date(1602488700000+0300)/", - "/Date(1602489600000+0300)/", - "/Date(1602490500000+0300)/", - "/Date(1602491400000+0300)/", - "/Date(1602492300000+0300)/", - "/Date(1602493200000+0300)/", - "/Date(1602494100000+0300)/", - "/Date(1602495000000+0300)/", - "/Date(1602495900000+0300)/", - "/Date(1602496800000+0300)/", - "/Date(1602497700000+0300)/", - "/Date(1602498600000+0300)/", - "/Date(1602499500000+0300)/", - "/Date(1602500400000+0300)/", - "/Date(1602501300000+0300)/", - "/Date(1602502200000+0300)/", - "/Date(1602503100000+0300)/", - "/Date(1602504000000+0300)/", - "/Date(1602504900000+0300)/", - "/Date(1602505800000+0300)/", - "/Date(1602506700000+0300)/", - "/Date(1602507600000+0300)/", - "/Date(1602508500000+0300)/", - "/Date(1602509400000+0300)/", - "/Date(1602510300000+0300)/", - "/Date(1602567000000+0300)/", - "/Date(1602567900000+0300)/", - "/Date(1602568800000+0300)/", - "/Date(1602569700000+0300)/", - "/Date(1602570600000+0300)/", - "/Date(1602571500000+0300)/", - "/Date(1602572400000+0300)/", - "/Date(1602573300000+0300)/", - "/Date(1602574200000+0300)/", - "/Date(1602575100000+0300)/", - "/Date(1602576000000+0300)/", - "/Date(1602576900000+0300)/", - "/Date(1602577800000+0300)/", - "/Date(1602578700000+0300)/", - "/Date(1602579600000+0300)/", - "/Date(1602580500000+0300)/", - "/Date(1602581400000+0300)/", - "/Date(1602582300000+0300)/", - "/Date(1602583200000+0300)/", - "/Date(1602584100000+0300)/", - "/Date(1602585000000+0300)/", - "/Date(1602585900000+0300)/", - "/Date(1602586800000+0300)/", - "/Date(1602587700000+0300)/", - "/Date(1602588600000+0300)/", - "/Date(1602589500000+0300)/", - "/Date(1602590400000+0300)/", - "/Date(1602591300000+0300)/", - "/Date(1602592200000+0300)/", - "/Date(1602593100000+0300)/", - "/Date(1602594000000+0300)/", - "/Date(1602594900000+0300)/", - "/Date(1602595800000+0300)/", - "/Date(1602596700000+0300)/", - "/Date(1602653400000+0300)/", - "/Date(1602654300000+0300)/", - "/Date(1602655200000+0300)/", - "/Date(1602656100000+0300)/", - "/Date(1602657000000+0300)/", - "/Date(1602657900000+0300)/", - "/Date(1602658800000+0300)/", - "/Date(1602659700000+0300)/", - "/Date(1602660600000+0300)/", - "/Date(1602661500000+0300)/", - "/Date(1602662400000+0300)/", - "/Date(1602663300000+0300)/", - "/Date(1602664200000+0300)/", - "/Date(1602665100000+0300)/", - "/Date(1602666000000+0300)/", - "/Date(1602666900000+0300)/", - "/Date(1602667800000+0300)/", - "/Date(1602668700000+0300)/", - "/Date(1602669600000+0300)/", - "/Date(1602670500000+0300)/", - "/Date(1602671400000+0300)/", - "/Date(1602672300000+0300)/", - "/Date(1602673200000+0300)/", - "/Date(1602674100000+0300)/", - "/Date(1602675000000+0300)/", - "/Date(1602675900000+0300)/", - "/Date(1602676800000+0300)/", - "/Date(1602677700000+0300)/", - "/Date(1602678600000+0300)/", - "/Date(1602679500000+0300)/", - "/Date(1602680400000+0300)/", - "/Date(1602681300000+0300)/", - "/Date(1602682200000+0300)/", - "/Date(1602683100000+0300)/", - "/Date(1602739800000+0300)/", - "/Date(1602740700000+0300)/", - "/Date(1602741600000+0300)/", - "/Date(1602742500000+0300)/", - "/Date(1602743400000+0300)/", - "/Date(1602744300000+0300)/", - "/Date(1602745200000+0300)/", - "/Date(1602746100000+0300)/", - "/Date(1602747000000+0300)/", - "/Date(1602747900000+0300)/", - "/Date(1602748800000+0300)/", - "/Date(1602749700000+0300)/", - "/Date(1602750600000+0300)/", - "/Date(1602751500000+0300)/", - "/Date(1602752400000+0300)/", - "/Date(1602753300000+0300)/", - "/Date(1602754200000+0300)/", - "/Date(1602755100000+0300)/", - "/Date(1602756000000+0300)/", - "/Date(1602756900000+0300)/", - "/Date(1602912600000+0300)/", - "/Date(1602913500000+0300)/", - "/Date(1602914400000+0300)/", - "/Date(1602915300000+0300)/", - "/Date(1602916200000+0300)/", - "/Date(1602917100000+0300)/", - "/Date(1602918000000+0300)/", - "/Date(1602918900000+0300)/", - "/Date(1602919800000+0300)/", - "/Date(1602920700000+0300)/", - "/Date(1602921600000+0300)/", - "/Date(1602922500000+0300)/", - "/Date(1602923400000+0300)/", - "/Date(1602924300000+0300)/", - "/Date(1602925200000+0300)/", - "/Date(1602926100000+0300)/", - "/Date(1602927000000+0300)/", - "/Date(1602927900000+0300)/", - "/Date(1602928800000+0300)/", - "/Date(1602929700000+0300)/", - "/Date(1602930600000+0300)/", - "/Date(1602931500000+0300)/", - "/Date(1602932400000+0300)/", - "/Date(1602933300000+0300)/", - "/Date(1602934200000+0300)/", - "/Date(1602935100000+0300)/", - "/Date(1602936000000+0300)/", - "/Date(1602936900000+0300)/", - "/Date(1602937800000+0300)/", - "/Date(1602938700000+0300)/", - "/Date(1602939600000+0300)/", - "/Date(1602940500000+0300)/", - "/Date(1602941400000+0300)/", - "/Date(1602942300000+0300)/", - "/Date(1602999000000+0300)/", - "/Date(1602999900000+0300)/", - "/Date(1603000800000+0300)/", - "/Date(1603001700000+0300)/", - "/Date(1603002600000+0300)/", - "/Date(1603003500000+0300)/", - "/Date(1603004400000+0300)/", - "/Date(1603005300000+0300)/", - "/Date(1603006200000+0300)/", - "/Date(1603007100000+0300)/", - "/Date(1603008000000+0300)/", - "/Date(1603008900000+0300)/", - "/Date(1603009800000+0300)/", - "/Date(1603010700000+0300)/", - "/Date(1603011600000+0300)/", - "/Date(1603012500000+0300)/", - "/Date(1603013400000+0300)/", - "/Date(1603014300000+0300)/", - "/Date(1603015200000+0300)/", - "/Date(1603016100000+0300)/", - "/Date(1603017000000+0300)/", - "/Date(1603017900000+0300)/", - "/Date(1603018800000+0300)/", - "/Date(1603019700000+0300)/", - "/Date(1603020600000+0300)/", - "/Date(1603021500000+0300)/", - "/Date(1603022400000+0300)/", - "/Date(1603023300000+0300)/", - "/Date(1603024200000+0300)/", - "/Date(1603025100000+0300)/", - "/Date(1603026000000+0300)/", - "/Date(1603026900000+0300)/", - "/Date(1603027800000+0300)/", - "/Date(1603028700000+0300)/", - "/Date(1603085400000+0300)/", - "/Date(1603086300000+0300)/", - "/Date(1603087200000+0300)/", - "/Date(1603088100000+0300)/", - "/Date(1603089000000+0300)/", - "/Date(1603089900000+0300)/", - "/Date(1603090800000+0300)/", - "/Date(1603091700000+0300)/", - "/Date(1603092600000+0300)/", - "/Date(1603093500000+0300)/", - "/Date(1603094400000+0300)/", - "/Date(1603095300000+0300)/", - "/Date(1603096200000+0300)/", - "/Date(1603097100000+0300)/", - "/Date(1603098000000+0300)/", - "/Date(1603098900000+0300)/", - "/Date(1603099800000+0300)/", - "/Date(1603100700000+0300)/", - "/Date(1603101600000+0300)/", - "/Date(1603102500000+0300)/", - "/Date(1603103400000+0300)/", - "/Date(1603104300000+0300)/", - "/Date(1603105200000+0300)/", - "/Date(1603106100000+0300)/", - "/Date(1603107000000+0300)/", - "/Date(1603107900000+0300)/", - "/Date(1603108800000+0300)/", - "/Date(1603109700000+0300)/", - "/Date(1603110600000+0300)/", - "/Date(1603111500000+0300)/", - "/Date(1603112400000+0300)/", - "/Date(1603113300000+0300)/", - "/Date(1603114200000+0300)/", - "/Date(1603115100000+0300)/", - "/Date(1603171800000+0300)/", - "/Date(1603172700000+0300)/", - "/Date(1603173600000+0300)/", - "/Date(1603174500000+0300)/", - "/Date(1603175400000+0300)/", - "/Date(1603176300000+0300)/", - "/Date(1603177200000+0300)/", - "/Date(1603178100000+0300)/", - "/Date(1603179000000+0300)/", - "/Date(1603179900000+0300)/", - "/Date(1603180800000+0300)/", - "/Date(1603181700000+0300)/", - "/Date(1603182600000+0300)/", - "/Date(1603183500000+0300)/", - "/Date(1603184400000+0300)/", - "/Date(1603185300000+0300)/", - "/Date(1603186200000+0300)/", - "/Date(1603187100000+0300)/", - "/Date(1603188000000+0300)/", - "/Date(1603188900000+0300)/", - "/Date(1603189800000+0300)/", - "/Date(1603190700000+0300)/", - "/Date(1603191600000+0300)/", - "/Date(1603192500000+0300)/", - "/Date(1603193400000+0300)/", - "/Date(1603194300000+0300)/", - "/Date(1603195200000+0300)/", - "/Date(1603196100000+0300)/", - "/Date(1603197000000+0300)/", - "/Date(1603197900000+0300)/", - "/Date(1603198800000+0300)/", - "/Date(1603199700000+0300)/", - "/Date(1603200600000+0300)/", - "/Date(1603201500000+0300)/", - "/Date(1603258200000+0300)/", - "/Date(1603259100000+0300)/", - "/Date(1603260000000+0300)/", - "/Date(1603260900000+0300)/", - "/Date(1603261800000+0300)/", - "/Date(1603262700000+0300)/", - "/Date(1603263600000+0300)/", - "/Date(1603264500000+0300)/", - "/Date(1603265400000+0300)/", - "/Date(1603266300000+0300)/", - "/Date(1603267200000+0300)/", - "/Date(1603268100000+0300)/", - "/Date(1603269000000+0300)/", - "/Date(1603269900000+0300)/", - "/Date(1603270800000+0300)/", - "/Date(1603271700000+0300)/", - "/Date(1603272600000+0300)/", - "/Date(1603273500000+0300)/", - "/Date(1603274400000+0300)/", - "/Date(1603275300000+0300)/", - "/Date(1603276200000+0300)/", - "/Date(1603277100000+0300)/", - "/Date(1603278000000+0300)/", - "/Date(1603278900000+0300)/", - "/Date(1603279800000+0300)/", - "/Date(1603280700000+0300)/", - "/Date(1603281600000+0300)/", - "/Date(1603282500000+0300)/", - "/Date(1603283400000+0300)/", - "/Date(1603284300000+0300)/", - "/Date(1603285200000+0300)/", - "/Date(1603286100000+0300)/", - "/Date(1603287000000+0300)/", - "/Date(1603287900000+0300)/", - "/Date(1603344600000+0300)/", - "/Date(1603345500000+0300)/", - "/Date(1603346400000+0300)/", - "/Date(1603347300000+0300)/", - "/Date(1603348200000+0300)/", - "/Date(1603349100000+0300)/", - "/Date(1603350000000+0300)/", - "/Date(1603350900000+0300)/", - "/Date(1603351800000+0300)/", - "/Date(1603352700000+0300)/", - "/Date(1603353600000+0300)/", - "/Date(1603354500000+0300)/", - "/Date(1603355400000+0300)/", - "/Date(1603356300000+0300)/", - "/Date(1603357200000+0300)/", - "/Date(1603358100000+0300)/", - "/Date(1603359000000+0300)/", - "/Date(1603359900000+0300)/", - "/Date(1603360800000+0300)/", - "/Date(1603361700000+0300)/", - "/Date(1603517400000+0300)/", - "/Date(1603518300000+0300)/", - "/Date(1603519200000+0300)/", - "/Date(1603520100000+0300)/", - "/Date(1603521000000+0300)/", - "/Date(1603521900000+0300)/", - "/Date(1603522800000+0300)/", - "/Date(1603523700000+0300)/", - "/Date(1603524600000+0300)/", - "/Date(1603525500000+0300)/", - "/Date(1603526400000+0300)/", - "/Date(1603527300000+0300)/", - "/Date(1603528200000+0300)/", - "/Date(1603529100000+0300)/", - "/Date(1603530000000+0300)/", - "/Date(1603530900000+0300)/", - "/Date(1603531800000+0300)/", - "/Date(1603532700000+0300)/", - "/Date(1603533600000+0300)/", - "/Date(1603534500000+0300)/", - "/Date(1603535400000+0300)/", - "/Date(1603536300000+0300)/", - "/Date(1603537200000+0300)/", - "/Date(1603538100000+0300)/", - "/Date(1603539000000+0300)/", - "/Date(1603539900000+0300)/", - "/Date(1603540800000+0300)/", - "/Date(1603541700000+0300)/", - "/Date(1603542600000+0300)/", - "/Date(1603543500000+0300)/", - "/Date(1603544400000+0300)/", - "/Date(1603545300000+0300)/", - "/Date(1603546200000+0300)/", - "/Date(1603547100000+0300)/", - "/Date(1603603800000+0300)/", - "/Date(1603604700000+0300)/", - "/Date(1603605600000+0300)/", - "/Date(1603606500000+0300)/", - "/Date(1603607400000+0300)/", - "/Date(1603608300000+0300)/", - "/Date(1603609200000+0300)/", - "/Date(1603610100000+0300)/", - "/Date(1603611000000+0300)/", - "/Date(1603611900000+0300)/", - "/Date(1603612800000+0300)/", - "/Date(1603613700000+0300)/", - "/Date(1603614600000+0300)/", - "/Date(1603615500000+0300)/", - "/Date(1603616400000+0300)/", - "/Date(1603617300000+0300)/", - "/Date(1603618200000+0300)/", - "/Date(1603619100000+0300)/", - "/Date(1603620000000+0300)/", - "/Date(1603620900000+0300)/", - "/Date(1603621800000+0300)/", - "/Date(1603622700000+0300)/", - "/Date(1603623600000+0300)/", - "/Date(1603624500000+0300)/", - "/Date(1603625400000+0300)/", - "/Date(1603626300000+0300)/", - "/Date(1603627200000+0300)/", - "/Date(1603628100000+0300)/", - "/Date(1603629000000+0300)/", - "/Date(1603629900000+0300)/", - "/Date(1603630800000+0300)/", - "/Date(1603631700000+0300)/", - "/Date(1603632600000+0300)/", - "/Date(1603633500000+0300)/", - "/Date(1603690200000+0300)/", - "/Date(1603691100000+0300)/", - "/Date(1603692000000+0300)/", - "/Date(1603692900000+0300)/", - "/Date(1603693800000+0300)/", - "/Date(1603694700000+0300)/", - "/Date(1603695600000+0300)/", - "/Date(1603696500000+0300)/", - "/Date(1603697400000+0300)/", - "/Date(1603698300000+0300)/", - "/Date(1603699200000+0300)/", - "/Date(1603700100000+0300)/", - "/Date(1603701000000+0300)/", - "/Date(1603701900000+0300)/", - "/Date(1603702800000+0300)/", - "/Date(1603703700000+0300)/", - "/Date(1603704600000+0300)/", - "/Date(1603705500000+0300)/", - "/Date(1603706400000+0300)/", - "/Date(1603707300000+0300)/", - "/Date(1603708200000+0300)/", - "/Date(1603709100000+0300)/", - "/Date(1603710000000+0300)/", - "/Date(1603710900000+0300)/", - "/Date(1603711800000+0300)/", - "/Date(1603712700000+0300)/", - "/Date(1603713600000+0300)/", - "/Date(1603714500000+0300)/", - "/Date(1603715400000+0300)/", - "/Date(1603716300000+0300)/", - "/Date(1603717200000+0300)/", - "/Date(1603718100000+0300)/", - "/Date(1603719000000+0300)/", - "/Date(1603719900000+0300)/", - "/Date(1603776600000+0300)/", - "/Date(1603777500000+0300)/", - "/Date(1603778400000+0300)/", - "/Date(1603779300000+0300)/", - "/Date(1603780200000+0300)/", - "/Date(1603781100000+0300)/", - "/Date(1603782000000+0300)/", - "/Date(1603782900000+0300)/", - "/Date(1603783800000+0300)/", - "/Date(1603784700000+0300)/", - "/Date(1603785600000+0300)/", - "/Date(1603786500000+0300)/", - "/Date(1603787400000+0300)/", - "/Date(1603788300000+0300)/", - "/Date(1603789200000+0300)/", - "/Date(1603790100000+0300)/", - "/Date(1603791000000+0300)/", - "/Date(1603791900000+0300)/", - "/Date(1603792800000+0300)/", - "/Date(1603793700000+0300)/", - "/Date(1603794600000+0300)/", - "/Date(1603795500000+0300)/", - "/Date(1603796400000+0300)/", - "/Date(1603797300000+0300)/", - "/Date(1603798200000+0300)/", - "/Date(1603799100000+0300)/", - "/Date(1603800000000+0300)/", - "/Date(1603800900000+0300)/", - "/Date(1603801800000+0300)/", - "/Date(1603802700000+0300)/", - "/Date(1603803600000+0300)/", - "/Date(1603804500000+0300)/", - "/Date(1603805400000+0300)/", - "/Date(1603806300000+0300)/", - "/Date(1603863000000+0300)/", - "/Date(1603863900000+0300)/", - "/Date(1603864800000+0300)/", - "/Date(1603865700000+0300)/", - "/Date(1603866600000+0300)/", - "/Date(1603867500000+0300)/", - "/Date(1603868400000+0300)/", - "/Date(1603869300000+0300)/", - "/Date(1603870200000+0300)/", - "/Date(1603871100000+0300)/", - "/Date(1603872000000+0300)/", - "/Date(1603872900000+0300)/", - "/Date(1603873800000+0300)/", - "/Date(1603874700000+0300)/", - "/Date(1603875600000+0300)/", - "/Date(1603876500000+0300)/", - "/Date(1603877400000+0300)/", - "/Date(1603878300000+0300)/", - "/Date(1603879200000+0300)/", - "/Date(1603880100000+0300)/", - "/Date(1603881000000+0300)/", - "/Date(1603881900000+0300)/", - "/Date(1603882800000+0300)/", - "/Date(1603883700000+0300)/", - "/Date(1603884600000+0300)/", - "/Date(1603885500000+0300)/", - "/Date(1603886400000+0300)/", - "/Date(1603887300000+0300)/", - "/Date(1603888200000+0300)/", - "/Date(1603889100000+0300)/", - "/Date(1603890000000+0300)/", - "/Date(1603890900000+0300)/", - "/Date(1603891800000+0300)/", - "/Date(1603892700000+0300)/", - "/Date(1603949400000+0300)/", - "/Date(1603950300000+0300)/", - "/Date(1603951200000+0300)/", - "/Date(1603952100000+0300)/", - "/Date(1603953000000+0300)/", - "/Date(1603953900000+0300)/", - "/Date(1603954800000+0300)/", - "/Date(1603955700000+0300)/", - "/Date(1603956600000+0300)/", - "/Date(1603957500000+0300)/", - "/Date(1603958400000+0300)/", - "/Date(1603959300000+0300)/", - "/Date(1603960200000+0300)/", - "/Date(1603961100000+0300)/", - "/Date(1603962000000+0300)/", - "/Date(1603962900000+0300)/", - "/Date(1603963800000+0300)/", - "/Date(1603964700000+0300)/", - "/Date(1603965600000+0300)/", - "/Date(1603966500000+0300)/", - "/Date(1604122200000+0300)/", - "/Date(1604123100000+0300)/", - "/Date(1604124000000+0300)/", - "/Date(1604124900000+0300)/", - "/Date(1604125800000+0300)/", - "/Date(1604126700000+0300)/", - "/Date(1604127600000+0300)/", - "/Date(1604128500000+0300)/", - "/Date(1604129400000+0300)/", - "/Date(1604130300000+0300)/", - "/Date(1604131200000+0300)/", - "/Date(1604132100000+0300)/", - "/Date(1604133000000+0300)/", - "/Date(1604133900000+0300)/", - "/Date(1604134800000+0300)/", - "/Date(1604135700000+0300)/", - "/Date(1604136600000+0300)/", - "/Date(1604137500000+0300)/", - "/Date(1604138400000+0300)/", - "/Date(1604139300000+0300)/", - "/Date(1604140200000+0300)/", - "/Date(1604141100000+0300)/", - "/Date(1604142000000+0300)/", - "/Date(1604142900000+0300)/", - "/Date(1604143800000+0300)/", - "/Date(1604144700000+0300)/", - "/Date(1604145600000+0300)/", - "/Date(1604146500000+0300)/", - "/Date(1604147400000+0300)/", - "/Date(1604148300000+0300)/", - "/Date(1604149200000+0300)/", - "/Date(1604150100000+0300)/", - "/Date(1604151000000+0300)/", - "/Date(1604151900000+0300)/", - "/Date(1604208600000+0300)/", - "/Date(1604209500000+0300)/", - "/Date(1604210400000+0300)/", - "/Date(1604211300000+0300)/", - "/Date(1604212200000+0300)/", - "/Date(1604213100000+0300)/", - "/Date(1604214000000+0300)/", - "/Date(1604214900000+0300)/", - "/Date(1604215800000+0300)/", - "/Date(1604216700000+0300)/", - "/Date(1604217600000+0300)/", - "/Date(1604218500000+0300)/", - "/Date(1604219400000+0300)/", - "/Date(1604220300000+0300)/", - "/Date(1604221200000+0300)/", - "/Date(1604222100000+0300)/", - "/Date(1604223000000+0300)/", - "/Date(1604223900000+0300)/", - "/Date(1604224800000+0300)/", - "/Date(1604225700000+0300)/", - "/Date(1604226600000+0300)/", - "/Date(1604227500000+0300)/", - "/Date(1604228400000+0300)/", - "/Date(1604229300000+0300)/", - "/Date(1604230200000+0300)/", - "/Date(1604231100000+0300)/", - "/Date(1604232000000+0300)/", - "/Date(1604232900000+0300)/", - "/Date(1604233800000+0300)/", - "/Date(1604234700000+0300)/", - "/Date(1604235600000+0300)/", - "/Date(1604236500000+0300)/", - "/Date(1604237400000+0300)/", - "/Date(1604238300000+0300)/", - "/Date(1604295000000+0300)/", - "/Date(1604295900000+0300)/", - "/Date(1604296800000+0300)/", - "/Date(1604297700000+0300)/", - "/Date(1604298600000+0300)/", - "/Date(1604299500000+0300)/", - "/Date(1604300400000+0300)/", - "/Date(1604301300000+0300)/", - "/Date(1604302200000+0300)/", - "/Date(1604303100000+0300)/", - "/Date(1604304000000+0300)/", - "/Date(1604304900000+0300)/", - "/Date(1604305800000+0300)/", - "/Date(1604306700000+0300)/", - "/Date(1604307600000+0300)/", - "/Date(1604308500000+0300)/", - "/Date(1604309400000+0300)/", - "/Date(1604310300000+0300)/", - "/Date(1604311200000+0300)/", - "/Date(1604312100000+0300)/", - "/Date(1604313000000+0300)/", - "/Date(1604313900000+0300)/", - "/Date(1604314800000+0300)/", - "/Date(1604315700000+0300)/", - "/Date(1604316600000+0300)/", - "/Date(1604317500000+0300)/", - "/Date(1604318400000+0300)/", - "/Date(1604319300000+0300)/", - "/Date(1604320200000+0300)/", - "/Date(1604321100000+0300)/", - "/Date(1604322000000+0300)/", - "/Date(1604322900000+0300)/", - "/Date(1604323800000+0300)/", - "/Date(1604324700000+0300)/", - "/Date(1604381400000+0300)/", - "/Date(1604382300000+0300)/", - "/Date(1604383200000+0300)/", - "/Date(1604384100000+0300)/", - "/Date(1604385000000+0300)/", - "/Date(1604385900000+0300)/", - "/Date(1604386800000+0300)/", - "/Date(1604387700000+0300)/", - "/Date(1604388600000+0300)/", - "/Date(1604389500000+0300)/", - "/Date(1604390400000+0300)/", - "/Date(1604391300000+0300)/", - "/Date(1604392200000+0300)/", - "/Date(1604393100000+0300)/", - "/Date(1604394000000+0300)/", - "/Date(1604394900000+0300)/", - "/Date(1604395800000+0300)/", - "/Date(1604396700000+0300)/", - "/Date(1604397600000+0300)/", - "/Date(1604398500000+0300)/", - "/Date(1604399400000+0300)/", - "/Date(1604400300000+0300)/", - "/Date(1604401200000+0300)/", - "/Date(1604402100000+0300)/", - "/Date(1604403000000+0300)/", - "/Date(1604403900000+0300)/", - "/Date(1604404800000+0300)/", - "/Date(1604405700000+0300)/", - "/Date(1604406600000+0300)/", - "/Date(1604407500000+0300)/", - "/Date(1604408400000+0300)/", - "/Date(1604409300000+0300)/", - "/Date(1604410200000+0300)/", - "/Date(1604411100000+0300)/", - "/Date(1604467800000+0300)/", - "/Date(1604468700000+0300)/", - "/Date(1604469600000+0300)/", - "/Date(1604470500000+0300)/", - "/Date(1604471400000+0300)/", - "/Date(1604472300000+0300)/", - "/Date(1604473200000+0300)/", - "/Date(1604474100000+0300)/", - "/Date(1604475000000+0300)/", - "/Date(1604475900000+0300)/", - "/Date(1604476800000+0300)/", - "/Date(1604477700000+0300)/", - "/Date(1604478600000+0300)/", - "/Date(1604479500000+0300)/", - "/Date(1604480400000+0300)/", - "/Date(1604481300000+0300)/", - "/Date(1604482200000+0300)/", - "/Date(1604483100000+0300)/", - "/Date(1604484000000+0300)/", - "/Date(1604484900000+0300)/", - "/Date(1604485800000+0300)/", - "/Date(1604486700000+0300)/", - "/Date(1604487600000+0300)/", - "/Date(1604488500000+0300)/", - "/Date(1604489400000+0300)/", - "/Date(1604490300000+0300)/", - "/Date(1604491200000+0300)/", - "/Date(1604492100000+0300)/", - "/Date(1604493000000+0300)/", - "/Date(1604493900000+0300)/", - "/Date(1604494800000+0300)/", - "/Date(1604495700000+0300)/", - "/Date(1604496600000+0300)/", - "/Date(1604497500000+0300)/", - "/Date(1604554200000+0300)/", - "/Date(1604555100000+0300)/", - "/Date(1604556000000+0300)/", - "/Date(1604556900000+0300)/", - "/Date(1604557800000+0300)/", - "/Date(1604558700000+0300)/", - "/Date(1604559600000+0300)/", - "/Date(1604560500000+0300)/", - "/Date(1604561400000+0300)/", - "/Date(1604562300000+0300)/", - "/Date(1604563200000+0300)/", - "/Date(1604564100000+0300)/", - "/Date(1604565000000+0300)/", - "/Date(1604565900000+0300)/", - "/Date(1604566800000+0300)/", - "/Date(1604567700000+0300)/", - "/Date(1604568600000+0300)/", - "/Date(1604569500000+0300)/", - "/Date(1604570400000+0300)/", - "/Date(1604571300000+0300)/", - "/Date(1604727000000+0300)/", - "/Date(1604727900000+0300)/", - "/Date(1604728800000+0300)/", - "/Date(1604729700000+0300)/", - "/Date(1604730600000+0300)/", - "/Date(1604731500000+0300)/", - "/Date(1604732400000+0300)/", - "/Date(1604733300000+0300)/", - "/Date(1604734200000+0300)/", - "/Date(1604735100000+0300)/", - "/Date(1604736000000+0300)/", - "/Date(1604736900000+0300)/", - "/Date(1604737800000+0300)/", - "/Date(1604738700000+0300)/", - "/Date(1604739600000+0300)/", - "/Date(1604740500000+0300)/", - "/Date(1604741400000+0300)/", - "/Date(1604742300000+0300)/", - "/Date(1604743200000+0300)/", - "/Date(1604744100000+0300)/", - "/Date(1604745000000+0300)/", - "/Date(1604745900000+0300)/", - "/Date(1604746800000+0300)/", - "/Date(1604747700000+0300)/", - "/Date(1604748600000+0300)/", - "/Date(1604749500000+0300)/", - "/Date(1604750400000+0300)/", - "/Date(1604751300000+0300)/", - "/Date(1604752200000+0300)/", - "/Date(1604753100000+0300)/", - "/Date(1604754000000+0300)/", - "/Date(1604754900000+0300)/", - "/Date(1604755800000+0300)/", - "/Date(1604756700000+0300)/", - "/Date(1604813400000+0300)/", - "/Date(1604814300000+0300)/", - "/Date(1604815200000+0300)/", - "/Date(1604816100000+0300)/", - "/Date(1604817000000+0300)/", - "/Date(1604817900000+0300)/", - "/Date(1604818800000+0300)/", - "/Date(1604819700000+0300)/", - "/Date(1604820600000+0300)/", - "/Date(1604821500000+0300)/", - "/Date(1604822400000+0300)/", - "/Date(1604823300000+0300)/", - "/Date(1604824200000+0300)/", - "/Date(1604825100000+0300)/", - "/Date(1604826000000+0300)/", - "/Date(1604826900000+0300)/", - "/Date(1604827800000+0300)/", - "/Date(1604828700000+0300)/", - "/Date(1604829600000+0300)/", - "/Date(1604830500000+0300)/", - "/Date(1604831400000+0300)/", - "/Date(1604832300000+0300)/", - "/Date(1604833200000+0300)/", - "/Date(1604834100000+0300)/", - "/Date(1604835000000+0300)/", - "/Date(1604835900000+0300)/", - "/Date(1604836800000+0300)/", - "/Date(1604837700000+0300)/", - "/Date(1604838600000+0300)/", - "/Date(1604839500000+0300)/", - "/Date(1604840400000+0300)/", - "/Date(1604841300000+0300)/", - "/Date(1604842200000+0300)/", - "/Date(1604843100000+0300)/", - "/Date(1604899800000+0300)/", - "/Date(1604900700000+0300)/", - "/Date(1604901600000+0300)/", - "/Date(1604902500000+0300)/", - "/Date(1604903400000+0300)/", - "/Date(1604904300000+0300)/", - "/Date(1604905200000+0300)/", - "/Date(1604906100000+0300)/", - "/Date(1604907000000+0300)/", - "/Date(1604907900000+0300)/", - "/Date(1604908800000+0300)/", - "/Date(1604909700000+0300)/", - "/Date(1604910600000+0300)/", - "/Date(1604911500000+0300)/", - "/Date(1604912400000+0300)/", - "/Date(1604913300000+0300)/", - "/Date(1604914200000+0300)/", - "/Date(1604915100000+0300)/", - "/Date(1604916000000+0300)/", - "/Date(1604916900000+0300)/", - "/Date(1604917800000+0300)/", - "/Date(1604918700000+0300)/", - "/Date(1604919600000+0300)/", - "/Date(1604920500000+0300)/", - "/Date(1604921400000+0300)/", - "/Date(1604922300000+0300)/", - "/Date(1604923200000+0300)/", - "/Date(1604924100000+0300)/", - "/Date(1604925000000+0300)/", - "/Date(1604925900000+0300)/", - "/Date(1604926800000+0300)/", - "/Date(1604927700000+0300)/", - "/Date(1604928600000+0300)/", - "/Date(1604929500000+0300)/", - "/Date(1604986200000+0300)/", - "/Date(1604987100000+0300)/", - "/Date(1604988000000+0300)/", - "/Date(1604988900000+0300)/", - "/Date(1604989800000+0300)/", - "/Date(1604990700000+0300)/", - "/Date(1604991600000+0300)/", - "/Date(1604992500000+0300)/", - "/Date(1604993400000+0300)/", - "/Date(1604994300000+0300)/", - "/Date(1604995200000+0300)/", - "/Date(1604996100000+0300)/", - "/Date(1604997000000+0300)/", - "/Date(1604997900000+0300)/", - "/Date(1604998800000+0300)/", - "/Date(1604999700000+0300)/", - "/Date(1605000600000+0300)/", - "/Date(1605001500000+0300)/", - "/Date(1605002400000+0300)/", - "/Date(1605003300000+0300)/", - "/Date(1605004200000+0300)/", - "/Date(1605005100000+0300)/", - "/Date(1605006000000+0300)/", - "/Date(1605006900000+0300)/", - "/Date(1605007800000+0300)/", - "/Date(1605008700000+0300)/", - "/Date(1605009600000+0300)/", - "/Date(1605010500000+0300)/", - "/Date(1605011400000+0300)/", - "/Date(1605012300000+0300)/", - "/Date(1605013200000+0300)/", - "/Date(1605014100000+0300)/", - "/Date(1605015000000+0300)/", - "/Date(1605015900000+0300)/", - "/Date(1605072600000+0300)/", - "/Date(1605073500000+0300)/", - "/Date(1605074400000+0300)/", - "/Date(1605075300000+0300)/", - "/Date(1605076200000+0300)/", - "/Date(1605077100000+0300)/", - "/Date(1605078000000+0300)/", - "/Date(1605078900000+0300)/", - "/Date(1605079800000+0300)/", - "/Date(1605080700000+0300)/", - "/Date(1605081600000+0300)/", - "/Date(1605082500000+0300)/", - "/Date(1605083400000+0300)/", - "/Date(1605084300000+0300)/", - "/Date(1605085200000+0300)/", - "/Date(1605086100000+0300)/", - "/Date(1605087000000+0300)/", - "/Date(1605087900000+0300)/", - "/Date(1605088800000+0300)/", - "/Date(1605089700000+0300)/", - "/Date(1605090600000+0300)/", - "/Date(1605091500000+0300)/", - "/Date(1605092400000+0300)/", - "/Date(1605093300000+0300)/", - "/Date(1605094200000+0300)/", - "/Date(1605095100000+0300)/", - "/Date(1605096000000+0300)/", - "/Date(1605096900000+0300)/", - "/Date(1605097800000+0300)/", - "/Date(1605098700000+0300)/", - "/Date(1605099600000+0300)/", - "/Date(1605100500000+0300)/", - "/Date(1605101400000+0300)/", - "/Date(1605102300000+0300)/", - "/Date(1605159000000+0300)/", - "/Date(1605159900000+0300)/", - "/Date(1605160800000+0300)/", - "/Date(1605161700000+0300)/", - "/Date(1605162600000+0300)/", - "/Date(1605163500000+0300)/", - "/Date(1605164400000+0300)/", - "/Date(1605165300000+0300)/", - "/Date(1605166200000+0300)/", - "/Date(1605167100000+0300)/", - "/Date(1605168000000+0300)/", - "/Date(1605168900000+0300)/", - "/Date(1605169800000+0300)/", - "/Date(1605170700000+0300)/", - "/Date(1605171600000+0300)/", - "/Date(1605172500000+0300)/", - "/Date(1605173400000+0300)/", - "/Date(1605174300000+0300)/", - "/Date(1605175200000+0300)/", - "/Date(1605176100000+0300)/", - "/Date(1605331800000+0300)/", - "/Date(1605332700000+0300)/", - "/Date(1605333600000+0300)/", - "/Date(1605334500000+0300)/", - "/Date(1605335400000+0300)/", - "/Date(1605336300000+0300)/", - "/Date(1605337200000+0300)/", - "/Date(1605338100000+0300)/", - "/Date(1605339000000+0300)/", - "/Date(1605339900000+0300)/", - "/Date(1605340800000+0300)/", - "/Date(1605341700000+0300)/", - "/Date(1605342600000+0300)/", - "/Date(1605343500000+0300)/", - "/Date(1605344400000+0300)/", - "/Date(1605345300000+0300)/", - "/Date(1605346200000+0300)/", - "/Date(1605347100000+0300)/", - "/Date(1605348000000+0300)/", - "/Date(1605348900000+0300)/", - "/Date(1605349800000+0300)/", - "/Date(1605350700000+0300)/", - "/Date(1605351600000+0300)/", - "/Date(1605352500000+0300)/", - "/Date(1605353400000+0300)/", - "/Date(1605354300000+0300)/", - "/Date(1605355200000+0300)/", - "/Date(1605356100000+0300)/", - "/Date(1605357000000+0300)/", - "/Date(1605357900000+0300)/", - "/Date(1605358800000+0300)/", - "/Date(1605359700000+0300)/", - "/Date(1605360600000+0300)/", - "/Date(1605361500000+0300)/", - "/Date(1605418200000+0300)/", - "/Date(1605419100000+0300)/", - "/Date(1605420000000+0300)/", - "/Date(1605420900000+0300)/", - "/Date(1605421800000+0300)/", - "/Date(1605422700000+0300)/", - "/Date(1605423600000+0300)/", - "/Date(1605424500000+0300)/", - "/Date(1605425400000+0300)/", - "/Date(1605426300000+0300)/", - "/Date(1605427200000+0300)/", - "/Date(1605428100000+0300)/", - "/Date(1605429000000+0300)/", - "/Date(1605429900000+0300)/", - "/Date(1605430800000+0300)/", - "/Date(1605431700000+0300)/", - "/Date(1605432600000+0300)/", - "/Date(1605433500000+0300)/", - "/Date(1605434400000+0300)/", - "/Date(1605435300000+0300)/", - "/Date(1605436200000+0300)/", - "/Date(1605437100000+0300)/", - "/Date(1605438000000+0300)/", - "/Date(1605438900000+0300)/", - "/Date(1605439800000+0300)/", - "/Date(1605440700000+0300)/", - "/Date(1605441600000+0300)/", - "/Date(1605442500000+0300)/", - "/Date(1605443400000+0300)/", - "/Date(1605444300000+0300)/", - "/Date(1605445200000+0300)/", - "/Date(1605446100000+0300)/", - "/Date(1605447000000+0300)/", - "/Date(1605447900000+0300)/", - "/Date(1605504600000+0300)/", - "/Date(1605505500000+0300)/", - "/Date(1605506400000+0300)/", - "/Date(1605507300000+0300)/", - "/Date(1605508200000+0300)/", - "/Date(1605509100000+0300)/", - "/Date(1605510000000+0300)/", - "/Date(1605510900000+0300)/", - "/Date(1605511800000+0300)/", - "/Date(1605512700000+0300)/", - "/Date(1605513600000+0300)/", - "/Date(1605514500000+0300)/", - "/Date(1605515400000+0300)/", - "/Date(1605516300000+0300)/", - "/Date(1605517200000+0300)/", - "/Date(1605518100000+0300)/", - "/Date(1605519000000+0300)/", - "/Date(1605519900000+0300)/", - "/Date(1605520800000+0300)/", - "/Date(1605521700000+0300)/", - "/Date(1605522600000+0300)/", - "/Date(1605523500000+0300)/", - "/Date(1605524400000+0300)/", - "/Date(1605525300000+0300)/", - "/Date(1605526200000+0300)/", - "/Date(1605527100000+0300)/", - "/Date(1605528000000+0300)/", - "/Date(1605528900000+0300)/", - "/Date(1605529800000+0300)/", - "/Date(1605530700000+0300)/", - "/Date(1605531600000+0300)/", - "/Date(1605532500000+0300)/", - "/Date(1605533400000+0300)/", - "/Date(1605534300000+0300)/", - "/Date(1605591000000+0300)/", - "/Date(1605591900000+0300)/", - "/Date(1605592800000+0300)/", - "/Date(1605593700000+0300)/", - "/Date(1605594600000+0300)/", - "/Date(1605595500000+0300)/", - "/Date(1605596400000+0300)/", - "/Date(1605597300000+0300)/", - "/Date(1605598200000+0300)/", - "/Date(1605599100000+0300)/", - "/Date(1605600000000+0300)/", - "/Date(1605600900000+0300)/", - "/Date(1605601800000+0300)/", - "/Date(1605602700000+0300)/", - "/Date(1605603600000+0300)/", - "/Date(1605604500000+0300)/", - "/Date(1605605400000+0300)/", - "/Date(1605606300000+0300)/", - "/Date(1605607200000+0300)/", - "/Date(1605608100000+0300)/", - "/Date(1605609000000+0300)/", - "/Date(1605609900000+0300)/", - "/Date(1605610800000+0300)/", - "/Date(1605611700000+0300)/", - "/Date(1605612600000+0300)/", - "/Date(1605613500000+0300)/", - "/Date(1605614400000+0300)/", - "/Date(1605615300000+0300)/", - "/Date(1605616200000+0300)/", - "/Date(1605617100000+0300)/", - "/Date(1605618000000+0300)/", - "/Date(1605618900000+0300)/", - "/Date(1605619800000+0300)/", - "/Date(1605620700000+0300)/", - "/Date(1605677400000+0300)/", - "/Date(1605678300000+0300)/", - "/Date(1605679200000+0300)/", - "/Date(1605680100000+0300)/", - "/Date(1605681000000+0300)/", - "/Date(1605681900000+0300)/", - "/Date(1605682800000+0300)/", - "/Date(1605683700000+0300)/", - "/Date(1605684600000+0300)/", - "/Date(1605685500000+0300)/", - "/Date(1605686400000+0300)/", - "/Date(1605687300000+0300)/", - "/Date(1605688200000+0300)/", - "/Date(1605689100000+0300)/", - "/Date(1605690000000+0300)/", - "/Date(1605690900000+0300)/", - "/Date(1605691800000+0300)/", - "/Date(1605692700000+0300)/", - "/Date(1605693600000+0300)/", - "/Date(1605694500000+0300)/", - "/Date(1605695400000+0300)/", - "/Date(1605696300000+0300)/", - "/Date(1605697200000+0300)/", - "/Date(1605698100000+0300)/", - "/Date(1605699000000+0300)/", - "/Date(1605699900000+0300)/", - "/Date(1605700800000+0300)/", - "/Date(1605701700000+0300)/", - "/Date(1605702600000+0300)/", - "/Date(1605703500000+0300)/", - "/Date(1605704400000+0300)/", - "/Date(1605705300000+0300)/", - "/Date(1605706200000+0300)/", - "/Date(1605707100000+0300)/", - "/Date(1605763800000+0300)/", - "/Date(1605764700000+0300)/", - "/Date(1605765600000+0300)/", - "/Date(1605766500000+0300)/", - "/Date(1605767400000+0300)/", - "/Date(1605768300000+0300)/", - "/Date(1605769200000+0300)/", - "/Date(1605770100000+0300)/", - "/Date(1605771000000+0300)/", - "/Date(1605771900000+0300)/", - "/Date(1605772800000+0300)/", - "/Date(1605773700000+0300)/", - "/Date(1605774600000+0300)/", - "/Date(1605775500000+0300)/", - "/Date(1605776400000+0300)/", - "/Date(1605777300000+0300)/", - "/Date(1605778200000+0300)/", - "/Date(1605779100000+0300)/", - "/Date(1605780000000+0300)/", - "/Date(1605780900000+0300)/", - "/Date(1605936600000+0300)/", - "/Date(1605937500000+0300)/", - "/Date(1605938400000+0300)/", - "/Date(1605939300000+0300)/", - "/Date(1605940200000+0300)/", - "/Date(1605941100000+0300)/", - "/Date(1605942000000+0300)/", - "/Date(1605942900000+0300)/", - "/Date(1605943800000+0300)/", - "/Date(1605944700000+0300)/", - "/Date(1605945600000+0300)/", - "/Date(1605946500000+0300)/", - "/Date(1605947400000+0300)/", - "/Date(1605948300000+0300)/", - "/Date(1605949200000+0300)/", - "/Date(1605950100000+0300)/", - "/Date(1605951000000+0300)/", - "/Date(1605951900000+0300)/", - "/Date(1605952800000+0300)/", - "/Date(1605953700000+0300)/", - "/Date(1605954600000+0300)/", - "/Date(1605955500000+0300)/", - "/Date(1605956400000+0300)/", - "/Date(1605957300000+0300)/", - "/Date(1605958200000+0300)/", - "/Date(1605959100000+0300)/", - "/Date(1605960000000+0300)/", - "/Date(1605960900000+0300)/", - "/Date(1605961800000+0300)/", - "/Date(1605962700000+0300)/", - "/Date(1605963600000+0300)/", - "/Date(1605964500000+0300)/", - "/Date(1605965400000+0300)/", - "/Date(1605966300000+0300)/", - "/Date(1606023000000+0300)/", - "/Date(1606023900000+0300)/", - "/Date(1606024800000+0300)/", - "/Date(1606025700000+0300)/", - "/Date(1606026600000+0300)/", - "/Date(1606027500000+0300)/", - "/Date(1606028400000+0300)/", - "/Date(1606029300000+0300)/", - "/Date(1606030200000+0300)/", - "/Date(1606031100000+0300)/", - "/Date(1606032000000+0300)/", - "/Date(1606032900000+0300)/", - "/Date(1606033800000+0300)/", - "/Date(1606034700000+0300)/", - "/Date(1606035600000+0300)/", - "/Date(1606036500000+0300)/", - "/Date(1606037400000+0300)/", - "/Date(1606038300000+0300)/", - "/Date(1606039200000+0300)/", - "/Date(1606040100000+0300)/", - "/Date(1606041000000+0300)/", - "/Date(1606041900000+0300)/", - "/Date(1606042800000+0300)/", - "/Date(1606043700000+0300)/", - "/Date(1606044600000+0300)/", - "/Date(1606045500000+0300)/", - "/Date(1606046400000+0300)/", - "/Date(1606047300000+0300)/", - "/Date(1606048200000+0300)/", - "/Date(1606049100000+0300)/", - "/Date(1606050000000+0300)/", - "/Date(1606050900000+0300)/", - "/Date(1606051800000+0300)/", - "/Date(1606052700000+0300)/", - "/Date(1606109400000+0300)/", - "/Date(1606110300000+0300)/", - "/Date(1606111200000+0300)/", - "/Date(1606112100000+0300)/", - "/Date(1606113000000+0300)/", - "/Date(1606113900000+0300)/", - "/Date(1606114800000+0300)/", - "/Date(1606115700000+0300)/", - "/Date(1606116600000+0300)/", - "/Date(1606117500000+0300)/", - "/Date(1606118400000+0300)/", - "/Date(1606119300000+0300)/", - "/Date(1606120200000+0300)/", - "/Date(1606121100000+0300)/", - "/Date(1606122000000+0300)/", - "/Date(1606122900000+0300)/", - "/Date(1606123800000+0300)/", - "/Date(1606124700000+0300)/", - "/Date(1606125600000+0300)/", - "/Date(1606126500000+0300)/", - "/Date(1606127400000+0300)/", - "/Date(1606128300000+0300)/", - "/Date(1606129200000+0300)/", - "/Date(1606130100000+0300)/", - "/Date(1606131000000+0300)/", - "/Date(1606131900000+0300)/", - "/Date(1606132800000+0300)/", - "/Date(1606133700000+0300)/", - "/Date(1606134600000+0300)/", - "/Date(1606135500000+0300)/", - "/Date(1606136400000+0300)/", - "/Date(1606137300000+0300)/", - "/Date(1606138200000+0300)/", - "/Date(1606139100000+0300)/", - "/Date(1606195800000+0300)/", - "/Date(1606196700000+0300)/", - "/Date(1606197600000+0300)/", - "/Date(1606198500000+0300)/", - "/Date(1606199400000+0300)/", - "/Date(1606200300000+0300)/", - "/Date(1606201200000+0300)/", - "/Date(1606202100000+0300)/", - "/Date(1606203000000+0300)/", - "/Date(1606203900000+0300)/", - "/Date(1606204800000+0300)/", - "/Date(1606205700000+0300)/", - "/Date(1606206600000+0300)/", - "/Date(1606207500000+0300)/", - "/Date(1606208400000+0300)/", - "/Date(1606209300000+0300)/", - "/Date(1606210200000+0300)/", - "/Date(1606211100000+0300)/", - "/Date(1606212000000+0300)/", - "/Date(1606212900000+0300)/", - "/Date(1606213800000+0300)/", - "/Date(1606214700000+0300)/", - "/Date(1606215600000+0300)/", - "/Date(1606216500000+0300)/", - "/Date(1606217400000+0300)/", - "/Date(1606218300000+0300)/", - "/Date(1606219200000+0300)/", - "/Date(1606220100000+0300)/", - "/Date(1606221000000+0300)/", - "/Date(1606221900000+0300)/", - "/Date(1606222800000+0300)/", - "/Date(1606223700000+0300)/", - "/Date(1606224600000+0300)/", - "/Date(1606225500000+0300)/", - "/Date(1606282200000+0300)/", - "/Date(1606283100000+0300)/", - "/Date(1606284000000+0300)/", - "/Date(1606284900000+0300)/", - "/Date(1606285800000+0300)/", - "/Date(1606286700000+0300)/", - "/Date(1606287600000+0300)/", - "/Date(1606288500000+0300)/", - "/Date(1606289400000+0300)/", - "/Date(1606290300000+0300)/", - "/Date(1606291200000+0300)/", - "/Date(1606292100000+0300)/", - "/Date(1606293000000+0300)/", - "/Date(1606293900000+0300)/", - "/Date(1606294800000+0300)/", - "/Date(1606295700000+0300)/", - "/Date(1606296600000+0300)/", - "/Date(1606297500000+0300)/", - "/Date(1606298400000+0300)/", - "/Date(1606299300000+0300)/", - "/Date(1606300200000+0300)/", - "/Date(1606301100000+0300)/", - "/Date(1606302000000+0300)/", - "/Date(1606302900000+0300)/", - "/Date(1606303800000+0300)/", - "/Date(1606304700000+0300)/", - "/Date(1606305600000+0300)/", - "/Date(1606306500000+0300)/", - "/Date(1606307400000+0300)/", - "/Date(1606308300000+0300)/", - "/Date(1606309200000+0300)/", - "/Date(1606310100000+0300)/", - "/Date(1606311000000+0300)/", - "/Date(1606311900000+0300)/", - "/Date(1606368600000+0300)/", - "/Date(1606369500000+0300)/", - "/Date(1606370400000+0300)/", - "/Date(1606371300000+0300)/", - "/Date(1606372200000+0300)/", - "/Date(1606373100000+0300)/", - "/Date(1606374000000+0300)/", - "/Date(1606374900000+0300)/", - "/Date(1606375800000+0300)/", - "/Date(1606376700000+0300)/", - "/Date(1606377600000+0300)/", - "/Date(1606378500000+0300)/", - "/Date(1606379400000+0300)/", - "/Date(1606380300000+0300)/", - "/Date(1606381200000+0300)/", - "/Date(1606382100000+0300)/", - "/Date(1606383000000+0300)/", - "/Date(1606383900000+0300)/", - "/Date(1606384800000+0300)/", - "/Date(1606385700000+0300)/", - "/Date(1606541400000+0300)/", - "/Date(1606542300000+0300)/", - "/Date(1606543200000+0300)/", - "/Date(1606544100000+0300)/", - "/Date(1606545000000+0300)/", - "/Date(1606545900000+0300)/", - "/Date(1606546800000+0300)/", - "/Date(1606547700000+0300)/", - "/Date(1606548600000+0300)/", - "/Date(1606549500000+0300)/", - "/Date(1606550400000+0300)/", - "/Date(1606551300000+0300)/", - "/Date(1606552200000+0300)/", - "/Date(1606553100000+0300)/", - "/Date(1606554000000+0300)/", - "/Date(1606554900000+0300)/", - "/Date(1606555800000+0300)/", - "/Date(1606556700000+0300)/", - "/Date(1606557600000+0300)/", - "/Date(1606558500000+0300)/", - "/Date(1606559400000+0300)/", - "/Date(1606560300000+0300)/", - "/Date(1606561200000+0300)/", - "/Date(1606562100000+0300)/", - "/Date(1606563000000+0300)/", - "/Date(1606563900000+0300)/", - "/Date(1606564800000+0300)/", - "/Date(1606565700000+0300)/", - "/Date(1606566600000+0300)/", - "/Date(1606567500000+0300)/", - "/Date(1606568400000+0300)/", - "/Date(1606569300000+0300)/", - "/Date(1606570200000+0300)/", - "/Date(1606571100000+0300)/", - "/Date(1606627800000+0300)/", - "/Date(1606628700000+0300)/", - "/Date(1606629600000+0300)/", - "/Date(1606630500000+0300)/", - "/Date(1606631400000+0300)/", - "/Date(1606632300000+0300)/", - "/Date(1606633200000+0300)/", - "/Date(1606634100000+0300)/", - "/Date(1606635000000+0300)/", - "/Date(1606635900000+0300)/", - "/Date(1606636800000+0300)/", - "/Date(1606637700000+0300)/", - "/Date(1606638600000+0300)/", - "/Date(1606639500000+0300)/", - "/Date(1606640400000+0300)/", - "/Date(1606641300000+0300)/", - "/Date(1606642200000+0300)/", - "/Date(1606643100000+0300)/", - "/Date(1606644000000+0300)/", - "/Date(1606644900000+0300)/", - "/Date(1606645800000+0300)/", - "/Date(1606646700000+0300)/", - "/Date(1606647600000+0300)/", - "/Date(1606648500000+0300)/", - "/Date(1606649400000+0300)/", - "/Date(1606650300000+0300)/", - "/Date(1606651200000+0300)/", - "/Date(1606652100000+0300)/", - "/Date(1606653000000+0300)/", - "/Date(1606653900000+0300)/", - "/Date(1606654800000+0300)/", - "/Date(1606655700000+0300)/", - "/Date(1606656600000+0300)/", - "/Date(1606657500000+0300)/", - "/Date(1606714200000+0300)/", - "/Date(1606715100000+0300)/", - "/Date(1606716000000+0300)/", - "/Date(1606716900000+0300)/", - "/Date(1606717800000+0300)/", - "/Date(1606718700000+0300)/", - "/Date(1606719600000+0300)/", - "/Date(1606720500000+0300)/", - "/Date(1606721400000+0300)/", - "/Date(1606722300000+0300)/", - "/Date(1606723200000+0300)/", - "/Date(1606724100000+0300)/", - "/Date(1606725000000+0300)/", - "/Date(1606725900000+0300)/", - "/Date(1606726800000+0300)/", - "/Date(1606727700000+0300)/", - "/Date(1606728600000+0300)/", - "/Date(1606729500000+0300)/", - "/Date(1606730400000+0300)/", - "/Date(1606731300000+0300)/", - "/Date(1606732200000+0300)/", - "/Date(1606733100000+0300)/", - "/Date(1606734000000+0300)/", - "/Date(1606734900000+0300)/", - "/Date(1606735800000+0300)/", - "/Date(1606736700000+0300)/", - "/Date(1606737600000+0300)/", - "/Date(1606738500000+0300)/", - "/Date(1606739400000+0300)/", - "/Date(1606740300000+0300)/", - "/Date(1606741200000+0300)/", - "/Date(1606742100000+0300)/", - "/Date(1606743000000+0300)/", - "/Date(1606743900000+0300)/", - "/Date(1606800600000+0300)/", - "/Date(1606801500000+0300)/", - "/Date(1606802400000+0300)/", - "/Date(1606803300000+0300)/", - "/Date(1606804200000+0300)/", - "/Date(1606805100000+0300)/", - "/Date(1606806000000+0300)/", - "/Date(1606806900000+0300)/", - "/Date(1606807800000+0300)/", - "/Date(1606808700000+0300)/", - "/Date(1606809600000+0300)/", - "/Date(1606810500000+0300)/", - "/Date(1606811400000+0300)/", - "/Date(1606812300000+0300)/", - "/Date(1606813200000+0300)/", - "/Date(1606814100000+0300)/", - "/Date(1606815000000+0300)/", - "/Date(1606815900000+0300)/", - "/Date(1606816800000+0300)/", - "/Date(1606817700000+0300)/", - "/Date(1606818600000+0300)/", - "/Date(1606819500000+0300)/", - "/Date(1606820400000+0300)/", - "/Date(1606821300000+0300)/", - "/Date(1606822200000+0300)/", - "/Date(1606823100000+0300)/", - "/Date(1606824000000+0300)/", - "/Date(1606824900000+0300)/", - "/Date(1606825800000+0300)/", - "/Date(1606826700000+0300)/", - "/Date(1606827600000+0300)/", - "/Date(1606828500000+0300)/", - "/Date(1606829400000+0300)/", - "/Date(1606830300000+0300)/", - "/Date(1606887000000+0300)/", - "/Date(1606887900000+0300)/", - "/Date(1606888800000+0300)/", - "/Date(1606889700000+0300)/", - "/Date(1606890600000+0300)/", - "/Date(1606891500000+0300)/", - "/Date(1606892400000+0300)/", - "/Date(1606893300000+0300)/", - "/Date(1606894200000+0300)/", - "/Date(1606895100000+0300)/", - "/Date(1606896000000+0300)/", - "/Date(1606896900000+0300)/", - "/Date(1606897800000+0300)/", - "/Date(1606898700000+0300)/", - "/Date(1606899600000+0300)/", - "/Date(1606900500000+0300)/", - "/Date(1606901400000+0300)/", - "/Date(1606902300000+0300)/", - "/Date(1606903200000+0300)/", - "/Date(1606904100000+0300)/", - "/Date(1606905000000+0300)/", - "/Date(1606905900000+0300)/", - "/Date(1606906800000+0300)/", - "/Date(1606907700000+0300)/", - "/Date(1606908600000+0300)/", - "/Date(1606909500000+0300)/", - "/Date(1606910400000+0300)/", - "/Date(1606911300000+0300)/", - "/Date(1606912200000+0300)/", - "/Date(1606913100000+0300)/", - "/Date(1606914000000+0300)/", - "/Date(1606914900000+0300)/", - "/Date(1606915800000+0300)/", - "/Date(1606916700000+0300)/", - "/Date(1606973400000+0300)/", - "/Date(1606974300000+0300)/", - "/Date(1606975200000+0300)/", - "/Date(1606976100000+0300)/", - "/Date(1606977000000+0300)/", - "/Date(1606977900000+0300)/", - "/Date(1606978800000+0300)/", - "/Date(1606979700000+0300)/", - "/Date(1606980600000+0300)/", - "/Date(1606981500000+0300)/", - "/Date(1606982400000+0300)/", - "/Date(1606983300000+0300)/", - "/Date(1606984200000+0300)/", - "/Date(1606985100000+0300)/", - "/Date(1606986000000+0300)/", - "/Date(1606986900000+0300)/", - "/Date(1606987800000+0300)/", - "/Date(1606988700000+0300)/", - "/Date(1606989600000+0300)/", - "/Date(1606990500000+0300)/", - "/Date(1607146200000+0300)/", - "/Date(1607147100000+0300)/", - "/Date(1607148000000+0300)/", - "/Date(1607148900000+0300)/", - "/Date(1607149800000+0300)/", - "/Date(1607150700000+0300)/", - "/Date(1607151600000+0300)/", - "/Date(1607152500000+0300)/", - "/Date(1607153400000+0300)/", - "/Date(1607154300000+0300)/", - "/Date(1607155200000+0300)/", - "/Date(1607156100000+0300)/", - "/Date(1607157000000+0300)/", - "/Date(1607157900000+0300)/", - "/Date(1607158800000+0300)/", - "/Date(1607159700000+0300)/", - "/Date(1607160600000+0300)/", - "/Date(1607161500000+0300)/", - "/Date(1607162400000+0300)/", - "/Date(1607163300000+0300)/", - "/Date(1607164200000+0300)/", - "/Date(1607165100000+0300)/", - "/Date(1607166000000+0300)/", - "/Date(1607166900000+0300)/", - "/Date(1607167800000+0300)/", - "/Date(1607168700000+0300)/", - "/Date(1607169600000+0300)/", - "/Date(1607170500000+0300)/", - "/Date(1607171400000+0300)/", - "/Date(1607172300000+0300)/", - "/Date(1607173200000+0300)/", - "/Date(1607174100000+0300)/", - "/Date(1607175000000+0300)/", - "/Date(1607175900000+0300)/", - "/Date(1607232600000+0300)/", - "/Date(1607233500000+0300)/", - "/Date(1607234400000+0300)/", - "/Date(1607235300000+0300)/", - "/Date(1607236200000+0300)/", - "/Date(1607237100000+0300)/", - "/Date(1607238000000+0300)/", - "/Date(1607238900000+0300)/", - "/Date(1607239800000+0300)/", - "/Date(1607240700000+0300)/", - "/Date(1607241600000+0300)/", - "/Date(1607242500000+0300)/", - "/Date(1607243400000+0300)/", - "/Date(1607244300000+0300)/", - "/Date(1607245200000+0300)/", - "/Date(1607246100000+0300)/", - "/Date(1607247000000+0300)/", - "/Date(1607247900000+0300)/", - "/Date(1607248800000+0300)/", - "/Date(1607249700000+0300)/", - "/Date(1607250600000+0300)/", - "/Date(1607251500000+0300)/", - "/Date(1607252400000+0300)/", - "/Date(1607253300000+0300)/", - "/Date(1607254200000+0300)/", - "/Date(1607255100000+0300)/", - "/Date(1607256000000+0300)/", - "/Date(1607256900000+0300)/", - "/Date(1607257800000+0300)/", - "/Date(1607258700000+0300)/", - "/Date(1607259600000+0300)/", - "/Date(1607260500000+0300)/", - "/Date(1607261400000+0300)/", - "/Date(1607262300000+0300)/", - "/Date(1607319000000+0300)/", - "/Date(1607319900000+0300)/", - "/Date(1607320800000+0300)/", - "/Date(1607321700000+0300)/", - "/Date(1607322600000+0300)/", - "/Date(1607323500000+0300)/", - "/Date(1607324400000+0300)/", - "/Date(1607325300000+0300)/", - "/Date(1607326200000+0300)/", - "/Date(1607327100000+0300)/", - "/Date(1607328000000+0300)/", - "/Date(1607328900000+0300)/", - "/Date(1607329800000+0300)/", - "/Date(1607330700000+0300)/", - "/Date(1607331600000+0300)/", - "/Date(1607332500000+0300)/", - "/Date(1607333400000+0300)/", - "/Date(1607334300000+0300)/", - "/Date(1607335200000+0300)/", - "/Date(1607336100000+0300)/", - "/Date(1607337000000+0300)/", - "/Date(1607337900000+0300)/", - "/Date(1607338800000+0300)/", - "/Date(1607339700000+0300)/", - "/Date(1607340600000+0300)/", - "/Date(1607341500000+0300)/", - "/Date(1607342400000+0300)/", - "/Date(1607343300000+0300)/", - "/Date(1607344200000+0300)/", - "/Date(1607345100000+0300)/", - "/Date(1607346000000+0300)/", - "/Date(1607346900000+0300)/", - "/Date(1607347800000+0300)/", - "/Date(1607348700000+0300)/", - "/Date(1607405400000+0300)/", - "/Date(1607406300000+0300)/", - "/Date(1607407200000+0300)/", - "/Date(1607408100000+0300)/", - "/Date(1607409000000+0300)/", - "/Date(1607409900000+0300)/", - "/Date(1607410800000+0300)/", - "/Date(1607411700000+0300)/", - "/Date(1607412600000+0300)/", - "/Date(1607413500000+0300)/", - "/Date(1607414400000+0300)/", - "/Date(1607415300000+0300)/", - "/Date(1607416200000+0300)/", - "/Date(1607417100000+0300)/", - "/Date(1607418000000+0300)/", - "/Date(1607418900000+0300)/", - "/Date(1607419800000+0300)/", - "/Date(1607420700000+0300)/", - "/Date(1607421600000+0300)/", - "/Date(1607422500000+0300)/", - "/Date(1607423400000+0300)/", - "/Date(1607424300000+0300)/", - "/Date(1607425200000+0300)/", - "/Date(1607426100000+0300)/", - "/Date(1607427000000+0300)/", - "/Date(1607427900000+0300)/", - "/Date(1607428800000+0300)/", - "/Date(1607429700000+0300)/", - "/Date(1607430600000+0300)/", - "/Date(1607431500000+0300)/", - "/Date(1607432400000+0300)/", - "/Date(1607433300000+0300)/", - "/Date(1607434200000+0300)/", - "/Date(1607435100000+0300)/", - "/Date(1607491800000+0300)/", - "/Date(1607492700000+0300)/", - "/Date(1607493600000+0300)/", - "/Date(1607494500000+0300)/", - "/Date(1607495400000+0300)/", - "/Date(1607496300000+0300)/", - "/Date(1607497200000+0300)/", - "/Date(1607498100000+0300)/", - "/Date(1607499000000+0300)/", - "/Date(1607499900000+0300)/", - "/Date(1607500800000+0300)/", - "/Date(1607501700000+0300)/", - "/Date(1607502600000+0300)/", - "/Date(1607503500000+0300)/", - "/Date(1607504400000+0300)/", - "/Date(1607505300000+0300)/", - "/Date(1607506200000+0300)/", - "/Date(1607507100000+0300)/", - "/Date(1607508000000+0300)/", - "/Date(1607508900000+0300)/", - "/Date(1607509800000+0300)/", - "/Date(1607510700000+0300)/", - "/Date(1607511600000+0300)/", - "/Date(1607512500000+0300)/", - "/Date(1607513400000+0300)/", - "/Date(1607514300000+0300)/", - "/Date(1607515200000+0300)/", - "/Date(1607516100000+0300)/", - "/Date(1607517000000+0300)/", - "/Date(1607517900000+0300)/", - "/Date(1607518800000+0300)/", - "/Date(1607519700000+0300)/", - "/Date(1607520600000+0300)/", - "/Date(1607521500000+0300)/", - "/Date(1607578200000+0300)/", - "/Date(1607579100000+0300)/", - "/Date(1607580000000+0300)/", - "/Date(1607580900000+0300)/", - "/Date(1607581800000+0300)/", - "/Date(1607582700000+0300)/", - "/Date(1607583600000+0300)/", - "/Date(1607584500000+0300)/", - "/Date(1607585400000+0300)/", - "/Date(1607586300000+0300)/", - "/Date(1607587200000+0300)/", - "/Date(1607588100000+0300)/", - "/Date(1607589000000+0300)/", - "/Date(1607589900000+0300)/", - "/Date(1607590800000+0300)/", - "/Date(1607591700000+0300)/", - "/Date(1607592600000+0300)/", - "/Date(1607593500000+0300)/", - "/Date(1607594400000+0300)/", - "/Date(1607595300000+0300)/", - "/Date(1607751000000+0300)/", - "/Date(1607751900000+0300)/", - "/Date(1607752800000+0300)/", - "/Date(1607753700000+0300)/", - "/Date(1607754600000+0300)/", - "/Date(1607755500000+0300)/", - "/Date(1607756400000+0300)/", - "/Date(1607757300000+0300)/", - "/Date(1607758200000+0300)/", - "/Date(1607759100000+0300)/", - "/Date(1607760000000+0300)/", - "/Date(1607760900000+0300)/", - "/Date(1607761800000+0300)/", - "/Date(1607762700000+0300)/", - "/Date(1607763600000+0300)/", - "/Date(1607764500000+0300)/", - "/Date(1607765400000+0300)/", - "/Date(1607766300000+0300)/", - "/Date(1607767200000+0300)/", - "/Date(1607768100000+0300)/", - "/Date(1607769000000+0300)/", - "/Date(1607769900000+0300)/", - "/Date(1607770800000+0300)/", - "/Date(1607771700000+0300)/", - "/Date(1607772600000+0300)/", - "/Date(1607773500000+0300)/", - "/Date(1607774400000+0300)/", - "/Date(1607775300000+0300)/", - "/Date(1607776200000+0300)/", - "/Date(1607777100000+0300)/", - "/Date(1607778000000+0300)/", - "/Date(1607778900000+0300)/", - "/Date(1607779800000+0300)/", - "/Date(1607780700000+0300)/", - "/Date(1607837400000+0300)/", - "/Date(1607838300000+0300)/", - "/Date(1607839200000+0300)/", - "/Date(1607840100000+0300)/", - "/Date(1607841000000+0300)/", - "/Date(1607841900000+0300)/", - "/Date(1607842800000+0300)/", - "/Date(1607843700000+0300)/", - "/Date(1607844600000+0300)/", - "/Date(1607845500000+0300)/", - "/Date(1607846400000+0300)/", - "/Date(1607847300000+0300)/", - "/Date(1607848200000+0300)/", - "/Date(1607849100000+0300)/", - "/Date(1607850000000+0300)/", - "/Date(1607850900000+0300)/", - "/Date(1607851800000+0300)/", - "/Date(1607852700000+0300)/", - "/Date(1607853600000+0300)/", - "/Date(1607854500000+0300)/", - "/Date(1607855400000+0300)/", - "/Date(1607856300000+0300)/", - "/Date(1607857200000+0300)/", - "/Date(1607858100000+0300)/", - "/Date(1607859000000+0300)/", - "/Date(1607859900000+0300)/", - "/Date(1607860800000+0300)/", - "/Date(1607861700000+0300)/", - "/Date(1607862600000+0300)/", - "/Date(1607863500000+0300)/", - "/Date(1607864400000+0300)/", - "/Date(1607865300000+0300)/", - "/Date(1607866200000+0300)/", - "/Date(1607867100000+0300)/", - "/Date(1607923800000+0300)/", - "/Date(1607924700000+0300)/", - "/Date(1607925600000+0300)/", - "/Date(1607926500000+0300)/", - "/Date(1607927400000+0300)/", - "/Date(1607928300000+0300)/", - "/Date(1607929200000+0300)/", - "/Date(1607930100000+0300)/", - "/Date(1607931000000+0300)/", - "/Date(1607931900000+0300)/", - "/Date(1607932800000+0300)/", - "/Date(1607933700000+0300)/", - "/Date(1607934600000+0300)/", - "/Date(1607935500000+0300)/", - "/Date(1607936400000+0300)/", - "/Date(1607937300000+0300)/", - "/Date(1607938200000+0300)/", - "/Date(1607939100000+0300)/", - "/Date(1607940000000+0300)/", - "/Date(1607940900000+0300)/", - "/Date(1607941800000+0300)/", - "/Date(1607942700000+0300)/", - "/Date(1607943600000+0300)/", - "/Date(1607944500000+0300)/", - "/Date(1607945400000+0300)/", - "/Date(1607946300000+0300)/", - "/Date(1607947200000+0300)/", - "/Date(1607948100000+0300)/", - "/Date(1607949000000+0300)/", - "/Date(1607949900000+0300)/", - "/Date(1607950800000+0300)/", - "/Date(1607951700000+0300)/", - "/Date(1607952600000+0300)/", - "/Date(1607953500000+0300)/", - "/Date(1608010200000+0300)/", - "/Date(1608011100000+0300)/", - "/Date(1608012000000+0300)/", - "/Date(1608012900000+0300)/", - "/Date(1608013800000+0300)/", - "/Date(1608014700000+0300)/", - "/Date(1608015600000+0300)/", - "/Date(1608016500000+0300)/", - "/Date(1608017400000+0300)/", - "/Date(1608018300000+0300)/", - "/Date(1608019200000+0300)/", - "/Date(1608020100000+0300)/", - "/Date(1608021000000+0300)/", - "/Date(1608021900000+0300)/", - "/Date(1608022800000+0300)/", - "/Date(1608023700000+0300)/", - "/Date(1608024600000+0300)/", - "/Date(1608025500000+0300)/", - "/Date(1608026400000+0300)/", - "/Date(1608027300000+0300)/", - "/Date(1608028200000+0300)/", - "/Date(1608029100000+0300)/", - "/Date(1608030000000+0300)/", - "/Date(1608030900000+0300)/", - "/Date(1608031800000+0300)/", - "/Date(1608032700000+0300)/", - "/Date(1608033600000+0300)/", - "/Date(1608034500000+0300)/", - "/Date(1608035400000+0300)/", - "/Date(1608036300000+0300)/", - "/Date(1608037200000+0300)/", - "/Date(1608038100000+0300)/", - "/Date(1608039000000+0300)/", - "/Date(1608039900000+0300)/", - "/Date(1608096600000+0300)/", - "/Date(1608097500000+0300)/", - "/Date(1608098400000+0300)/", - "/Date(1608099300000+0300)/", - "/Date(1608100200000+0300)/", - "/Date(1608101100000+0300)/", - "/Date(1608102000000+0300)/", - "/Date(1608102900000+0300)/", - "/Date(1608103800000+0300)/", - "/Date(1608104700000+0300)/", - "/Date(1608105600000+0300)/", - "/Date(1608106500000+0300)/", - "/Date(1608107400000+0300)/", - "/Date(1608108300000+0300)/", - "/Date(1608109200000+0300)/", - "/Date(1608110100000+0300)/", - "/Date(1608111000000+0300)/", - "/Date(1608111900000+0300)/", - "/Date(1608112800000+0300)/", - "/Date(1608113700000+0300)/", - "/Date(1608114600000+0300)/", - "/Date(1608115500000+0300)/", - "/Date(1608116400000+0300)/", - "/Date(1608117300000+0300)/", - "/Date(1608118200000+0300)/", - "/Date(1608119100000+0300)/", - "/Date(1608120000000+0300)/", - "/Date(1608120900000+0300)/", - "/Date(1608121800000+0300)/", - "/Date(1608122700000+0300)/", - "/Date(1608123600000+0300)/", - "/Date(1608124500000+0300)/", - "/Date(1608125400000+0300)/", - "/Date(1608126300000+0300)/", - "/Date(1608183000000+0300)/", - "/Date(1608183900000+0300)/", - "/Date(1608184800000+0300)/", - "/Date(1608185700000+0300)/", - "/Date(1608186600000+0300)/", - "/Date(1608187500000+0300)/", - "/Date(1608188400000+0300)/", - "/Date(1608189300000+0300)/", - "/Date(1608190200000+0300)/", - "/Date(1608191100000+0300)/", - "/Date(1608192000000+0300)/", - "/Date(1608192900000+0300)/", - "/Date(1608193800000+0300)/", - "/Date(1608194700000+0300)/", - "/Date(1608195600000+0300)/", - "/Date(1608196500000+0300)/", - "/Date(1608197400000+0300)/", - "/Date(1608198300000+0300)/", - "/Date(1608199200000+0300)/", - "/Date(1608200100000+0300)/", - "/Date(1608355800000+0300)/", - "/Date(1608356700000+0300)/", - "/Date(1608357600000+0300)/", - "/Date(1608358500000+0300)/", - "/Date(1608359400000+0300)/", - "/Date(1608360300000+0300)/", - "/Date(1608361200000+0300)/", - "/Date(1608362100000+0300)/", - "/Date(1608363000000+0300)/", - "/Date(1608363900000+0300)/", - "/Date(1608364800000+0300)/", - "/Date(1608365700000+0300)/", - "/Date(1608366600000+0300)/", - "/Date(1608367500000+0300)/", - "/Date(1608368400000+0300)/", - "/Date(1608369300000+0300)/", - "/Date(1608370200000+0300)/", - "/Date(1608371100000+0300)/", - "/Date(1608372000000+0300)/", - "/Date(1608372900000+0300)/", - "/Date(1608373800000+0300)/", - "/Date(1608374700000+0300)/", - "/Date(1608375600000+0300)/", - "/Date(1608376500000+0300)/", - "/Date(1608377400000+0300)/", - "/Date(1608378300000+0300)/", - "/Date(1608379200000+0300)/", - "/Date(1608380100000+0300)/", - "/Date(1608381000000+0300)/", - "/Date(1608381900000+0300)/", - "/Date(1608382800000+0300)/", - "/Date(1608383700000+0300)/", - "/Date(1608384600000+0300)/", - "/Date(1608385500000+0300)/", - "/Date(1608442200000+0300)/", - "/Date(1608443100000+0300)/", - "/Date(1608444000000+0300)/", - "/Date(1608444900000+0300)/", - "/Date(1608445800000+0300)/", - "/Date(1608446700000+0300)/", - "/Date(1608447600000+0300)/", - "/Date(1608448500000+0300)/", - "/Date(1608449400000+0300)/", - "/Date(1608450300000+0300)/", - "/Date(1608451200000+0300)/", - "/Date(1608452100000+0300)/", - "/Date(1608453000000+0300)/", - "/Date(1608453900000+0300)/", - "/Date(1608454800000+0300)/", - "/Date(1608455700000+0300)/", - "/Date(1608456600000+0300)/", - "/Date(1608457500000+0300)/", - "/Date(1608458400000+0300)/", - "/Date(1608459300000+0300)/", - "/Date(1608460200000+0300)/", - "/Date(1608461100000+0300)/", - "/Date(1608462000000+0300)/", - "/Date(1608462900000+0300)/", - "/Date(1608463800000+0300)/", - "/Date(1608464700000+0300)/", - "/Date(1608465600000+0300)/", - "/Date(1608466500000+0300)/", - "/Date(1608467400000+0300)/", - "/Date(1608468300000+0300)/", - "/Date(1608469200000+0300)/", - "/Date(1608470100000+0300)/", - "/Date(1608471000000+0300)/", - "/Date(1608471900000+0300)/", - "/Date(1608528600000+0300)/", - "/Date(1608529500000+0300)/", - "/Date(1608530400000+0300)/", - "/Date(1608531300000+0300)/", - "/Date(1608532200000+0300)/", - "/Date(1608533100000+0300)/", - "/Date(1608534000000+0300)/", - "/Date(1608534900000+0300)/", - "/Date(1608535800000+0300)/", - "/Date(1608536700000+0300)/", - "/Date(1608537600000+0300)/", - "/Date(1608538500000+0300)/", - "/Date(1608539400000+0300)/", - "/Date(1608540300000+0300)/", - "/Date(1608541200000+0300)/", - "/Date(1608542100000+0300)/", - "/Date(1608543000000+0300)/", - "/Date(1608543900000+0300)/", - "/Date(1608544800000+0300)/", - "/Date(1608545700000+0300)/", - "/Date(1608546600000+0300)/", - "/Date(1608547500000+0300)/", - "/Date(1608548400000+0300)/", - "/Date(1608549300000+0300)/", - "/Date(1608550200000+0300)/", - "/Date(1608551100000+0300)/", - "/Date(1608552000000+0300)/", - "/Date(1608552900000+0300)/", - "/Date(1608553800000+0300)/", - "/Date(1608554700000+0300)/", - "/Date(1608555600000+0300)/", - "/Date(1608556500000+0300)/", - "/Date(1608557400000+0300)/", - "/Date(1608558300000+0300)/", - "/Date(1608615000000+0300)/", - "/Date(1608615900000+0300)/", - "/Date(1608616800000+0300)/", - "/Date(1608617700000+0300)/", - "/Date(1608618600000+0300)/", - "/Date(1608619500000+0300)/", - "/Date(1608620400000+0300)/", - "/Date(1608621300000+0300)/", - "/Date(1608622200000+0300)/", - "/Date(1608623100000+0300)/", - "/Date(1608624000000+0300)/", - "/Date(1608624900000+0300)/", - "/Date(1608625800000+0300)/", - "/Date(1608626700000+0300)/", - "/Date(1608627600000+0300)/", - "/Date(1608628500000+0300)/", - "/Date(1608629400000+0300)/", - "/Date(1608630300000+0300)/", - "/Date(1608631200000+0300)/", - "/Date(1608632100000+0300)/", - "/Date(1608633000000+0300)/", - "/Date(1608633900000+0300)/", - "/Date(1608634800000+0300)/", - "/Date(1608635700000+0300)/", - "/Date(1608636600000+0300)/", - "/Date(1608637500000+0300)/", - "/Date(1608638400000+0300)/", - "/Date(1608639300000+0300)/", - "/Date(1608640200000+0300)/", - "/Date(1608641100000+0300)/", - "/Date(1608642000000+0300)/", - "/Date(1608642900000+0300)/", - "/Date(1608643800000+0300)/", - "/Date(1608644700000+0300)/", - "/Date(1608701400000+0300)/", - "/Date(1608702300000+0300)/", - "/Date(1608703200000+0300)/", - "/Date(1608704100000+0300)/", - "/Date(1608705000000+0300)/", - "/Date(1608705900000+0300)/", - "/Date(1608706800000+0300)/", - "/Date(1608707700000+0300)/", - "/Date(1608708600000+0300)/", - "/Date(1608709500000+0300)/", - "/Date(1608710400000+0300)/", - "/Date(1608711300000+0300)/", - "/Date(1608712200000+0300)/", - "/Date(1608713100000+0300)/", - "/Date(1608714000000+0300)/", - "/Date(1608714900000+0300)/", - "/Date(1608715800000+0300)/", - "/Date(1608716700000+0300)/", - "/Date(1608717600000+0300)/", - "/Date(1608718500000+0300)/", - "/Date(1608719400000+0300)/", - "/Date(1608720300000+0300)/", - "/Date(1608721200000+0300)/", - "/Date(1608722100000+0300)/", - "/Date(1608723000000+0300)/", - "/Date(1608723900000+0300)/", - "/Date(1608724800000+0300)/", - "/Date(1608725700000+0300)/", - "/Date(1608726600000+0300)/", - "/Date(1608727500000+0300)/", - "/Date(1608728400000+0300)/", - "/Date(1608729300000+0300)/", - "/Date(1608730200000+0300)/", - "/Date(1608731100000+0300)/", - "/Date(1608787800000+0300)/", - "/Date(1608788700000+0300)/", - "/Date(1608789600000+0300)/", - "/Date(1608790500000+0300)/", - "/Date(1608791400000+0300)/", - "/Date(1608792300000+0300)/", - "/Date(1608793200000+0300)/", - "/Date(1608794100000+0300)/", - "/Date(1608795000000+0300)/", - "/Date(1608795900000+0300)/", - "/Date(1608796800000+0300)/", - "/Date(1608797700000+0300)/", - "/Date(1608798600000+0300)/", - "/Date(1608799500000+0300)/", - "/Date(1608800400000+0300)/", - "/Date(1608801300000+0300)/", - "/Date(1608802200000+0300)/", - "/Date(1608803100000+0300)/", - "/Date(1608804000000+0300)/", - "/Date(1608804900000+0300)/", - "/Date(1608960600000+0300)/", - "/Date(1608961500000+0300)/", - "/Date(1608962400000+0300)/", - "/Date(1608963300000+0300)/", - "/Date(1608964200000+0300)/", - "/Date(1608965100000+0300)/", - "/Date(1608966000000+0300)/", - "/Date(1608966900000+0300)/", - "/Date(1608967800000+0300)/", - "/Date(1608968700000+0300)/", - "/Date(1608969600000+0300)/", - "/Date(1608970500000+0300)/", - "/Date(1608971400000+0300)/", - "/Date(1608972300000+0300)/", - "/Date(1608973200000+0300)/", - "/Date(1608974100000+0300)/", - "/Date(1608975000000+0300)/", - "/Date(1608975900000+0300)/", - "/Date(1608976800000+0300)/", - "/Date(1608977700000+0300)/", - "/Date(1608978600000+0300)/", - "/Date(1608979500000+0300)/", - "/Date(1608980400000+0300)/", - "/Date(1608981300000+0300)/", - "/Date(1608982200000+0300)/", - "/Date(1608983100000+0300)/", - "/Date(1608984000000+0300)/", - "/Date(1608984900000+0300)/", - "/Date(1608985800000+0300)/", - "/Date(1608986700000+0300)/", - "/Date(1608987600000+0300)/", - "/Date(1608988500000+0300)/", - "/Date(1608989400000+0300)/", - "/Date(1608990300000+0300)/", - "/Date(1609047000000+0300)/", - "/Date(1609047900000+0300)/", - "/Date(1609048800000+0300)/", - "/Date(1609049700000+0300)/", - "/Date(1609050600000+0300)/", - "/Date(1609051500000+0300)/", - "/Date(1609052400000+0300)/", - "/Date(1609053300000+0300)/", - "/Date(1609054200000+0300)/", - "/Date(1609055100000+0300)/", - "/Date(1609056000000+0300)/", - "/Date(1609056900000+0300)/", - "/Date(1609057800000+0300)/", - "/Date(1609058700000+0300)/", - "/Date(1609059600000+0300)/", - "/Date(1609060500000+0300)/", - "/Date(1609061400000+0300)/", - "/Date(1609062300000+0300)/", - "/Date(1609063200000+0300)/", - "/Date(1609064100000+0300)/", - "/Date(1609065000000+0300)/", - "/Date(1609065900000+0300)/", - "/Date(1609066800000+0300)/", - "/Date(1609067700000+0300)/", - "/Date(1609068600000+0300)/", - "/Date(1609069500000+0300)/", - "/Date(1609070400000+0300)/", - "/Date(1609071300000+0300)/", - "/Date(1609072200000+0300)/", - "/Date(1609073100000+0300)/", - "/Date(1609074000000+0300)/", - "/Date(1609074900000+0300)/", - "/Date(1609075800000+0300)/", - "/Date(1609076700000+0300)/", - "/Date(1609133400000+0300)/", - "/Date(1609134300000+0300)/", - "/Date(1609135200000+0300)/", - "/Date(1609136100000+0300)/", - "/Date(1609137000000+0300)/", - "/Date(1609137900000+0300)/", - "/Date(1609138800000+0300)/", - "/Date(1609139700000+0300)/", - "/Date(1609140600000+0300)/", - "/Date(1609141500000+0300)/", - "/Date(1609142400000+0300)/", - "/Date(1609143300000+0300)/", - "/Date(1609144200000+0300)/", - "/Date(1609145100000+0300)/", - "/Date(1609146000000+0300)/", - "/Date(1609146900000+0300)/", - "/Date(1609147800000+0300)/", - "/Date(1609148700000+0300)/", - "/Date(1609149600000+0300)/", - "/Date(1609150500000+0300)/", - "/Date(1609151400000+0300)/", - "/Date(1609152300000+0300)/", - "/Date(1609153200000+0300)/", - "/Date(1609154100000+0300)/", - "/Date(1609155000000+0300)/", - "/Date(1609155900000+0300)/", - "/Date(1609156800000+0300)/", - "/Date(1609157700000+0300)/", - "/Date(1609158600000+0300)/", - "/Date(1609159500000+0300)/", - "/Date(1609160400000+0300)/", - "/Date(1609161300000+0300)/", - "/Date(1609162200000+0300)/", - "/Date(1609163100000+0300)/", - "/Date(1609219800000+0300)/", - "/Date(1609220700000+0300)/", - "/Date(1609221600000+0300)/", - "/Date(1609222500000+0300)/", - "/Date(1609223400000+0300)/", - "/Date(1609224300000+0300)/", - "/Date(1609225200000+0300)/", - "/Date(1609226100000+0300)/", - "/Date(1609227000000+0300)/", - "/Date(1609227900000+0300)/", - "/Date(1609228800000+0300)/", - "/Date(1609229700000+0300)/", - "/Date(1609230600000+0300)/", - "/Date(1609231500000+0300)/", - "/Date(1609232400000+0300)/", - "/Date(1609233300000+0300)/", - "/Date(1609234200000+0300)/", - "/Date(1609235100000+0300)/", - "/Date(1609236000000+0300)/", - "/Date(1609236900000+0300)/", - "/Date(1609237800000+0300)/", - "/Date(1609238700000+0300)/", - "/Date(1609239600000+0300)/", - "/Date(1609240500000+0300)/", - "/Date(1609241400000+0300)/", - "/Date(1609242300000+0300)/", - "/Date(1609243200000+0300)/", - "/Date(1609244100000+0300)/", - "/Date(1609245000000+0300)/", - "/Date(1609245900000+0300)/", - "/Date(1609246800000+0300)/", - "/Date(1609247700000+0300)/", - "/Date(1609248600000+0300)/", - "/Date(1609249500000+0300)/", - "/Date(1609306200000+0300)/", - "/Date(1609307100000+0300)/", - "/Date(1609308000000+0300)/", - "/Date(1609308900000+0300)/", - "/Date(1609309800000+0300)/", - "/Date(1609310700000+0300)/", - "/Date(1609311600000+0300)/", - "/Date(1609312500000+0300)/", - "/Date(1609313400000+0300)/", - "/Date(1609314300000+0300)/", - "/Date(1609315200000+0300)/", - "/Date(1609316100000+0300)/", - "/Date(1609317000000+0300)/", - "/Date(1609317900000+0300)/", - "/Date(1609318800000+0300)/", - "/Date(1609319700000+0300)/", - "/Date(1609320600000+0300)/", - "/Date(1609321500000+0300)/", - "/Date(1609322400000+0300)/", - "/Date(1609323300000+0300)/", - "/Date(1609324200000+0300)/", - "/Date(1609325100000+0300)/", - "/Date(1609326000000+0300)/", - "/Date(1609326900000+0300)/", - "/Date(1609327800000+0300)/", - "/Date(1609328700000+0300)/", - "/Date(1609329600000+0300)/", - "/Date(1609330500000+0300)/", - "/Date(1609331400000+0300)/", - "/Date(1609332300000+0300)/", - "/Date(1609333200000+0300)/", - "/Date(1609334100000+0300)/", - "/Date(1609335000000+0300)/", - "/Date(1609335900000+0300)/", - "/Date(1609392600000+0300)/", - "/Date(1609393500000+0300)/", - "/Date(1609394400000+0300)/", - "/Date(1609395300000+0300)/", - "/Date(1609396200000+0300)/", - "/Date(1609397100000+0300)/", - "/Date(1609398000000+0300)/", - "/Date(1609398900000+0300)/", - "/Date(1609399800000+0300)/", - "/Date(1609400700000+0300)/", - "/Date(1609401600000+0300)/", - "/Date(1609402500000+0300)/", - "/Date(1609403400000+0300)/", - "/Date(1609404300000+0300)/", - "/Date(1609405200000+0300)/", - "/Date(1609406100000+0300)/", - "/Date(1609407000000+0300)/", - "/Date(1609407900000+0300)/", - "/Date(1609408800000+0300)/", - "/Date(1609409700000+0300)/" + "\/Date(1595257200000+0300)\/", + "\/Date(1595258100000+0300)\/", + "\/Date(1595259900000+0300)\/", + "\/Date(1595260800000+0300)\/", + "\/Date(1595261700000+0300)\/", + "\/Date(1595263500000+0300)\/", + "\/Date(1595265300000+0300)\/", + "\/Date(1595266200000+0300)\/", + "\/Date(1595341800000+0300)\/", + "\/Date(1595342700000+0300)\/", + "\/Date(1595343600000+0300)\/", + "\/Date(1595344500000+0300)\/", + "\/Date(1595346300000+0300)\/", + "\/Date(1595348100000+0300)\/", + "\/Date(1595349000000+0300)\/", + "\/Date(1595349900000+0300)\/", + "\/Date(1595350800000+0300)\/", + "\/Date(1595351700000+0300)\/", + "\/Date(1595352600000+0300)\/", + "\/Date(1595353500000+0300)\/", + "\/Date(1595426400000+0300)\/", + "\/Date(1595427300000+0300)\/", + "\/Date(1595429100000+0300)\/", + "\/Date(1595430000000+0300)\/", + "\/Date(1595430900000+0300)\/", + "\/Date(1595431800000+0300)\/", + "\/Date(1595432700000+0300)\/", + "\/Date(1595433600000+0300)\/", + "\/Date(1595434500000+0300)\/", + "\/Date(1595435400000+0300)\/", + "\/Date(1595436300000+0300)\/", + "\/Date(1595437200000+0300)\/", + "\/Date(1595438100000+0300)\/", + "\/Date(1595439000000+0300)\/", + "\/Date(1595439900000+0300)\/", + "\/Date(1595509200000+0300)\/", + "\/Date(1595510100000+0300)\/", + "\/Date(1595511000000+0300)\/", + "\/Date(1595511900000+0300)\/", + "\/Date(1595512800000+0300)\/", + "\/Date(1595513700000+0300)\/", + "\/Date(1595514600000+0300)\/", + "\/Date(1595515500000+0300)\/", + "\/Date(1595516400000+0300)\/", + "\/Date(1595517300000+0300)\/", + "\/Date(1595518200000+0300)\/", + "\/Date(1595519100000+0300)\/", + "\/Date(1595520000000+0300)\/", + "\/Date(1595520900000+0300)\/", + "\/Date(1595521800000+0300)\/", + "\/Date(1595522700000+0300)\/", + "\/Date(1595661300000+0300)\/", + "\/Date(1595662200000+0300)\/", + "\/Date(1595663100000+0300)\/", + "\/Date(1595664000000+0300)\/", + "\/Date(1595664900000+0300)\/", + "\/Date(1595665800000+0300)\/", + "\/Date(1595666700000+0300)\/", + "\/Date(1595667600000+0300)\/", + "\/Date(1595668500000+0300)\/", + "\/Date(1595669400000+0300)\/", + "\/Date(1595670300000+0300)\/", + "\/Date(1595671200000+0300)\/", + "\/Date(1595672100000+0300)\/", + "\/Date(1595673000000+0300)\/", + "\/Date(1595673900000+0300)\/", + "\/Date(1595772000000+0300)\/", + "\/Date(1595772900000+0300)\/", + "\/Date(1595773800000+0300)\/", + "\/Date(1595774700000+0300)\/", + "\/Date(1595775600000+0300)\/", + "\/Date(1595776500000+0300)\/", + "\/Date(1595777400000+0300)\/", + "\/Date(1595778300000+0300)\/", + "\/Date(1595779200000+0300)\/", + "\/Date(1595780100000+0300)\/", + "\/Date(1595781000000+0300)\/", + "\/Date(1595781900000+0300)\/", + "\/Date(1595782800000+0300)\/", + "\/Date(1595783700000+0300)\/", + "\/Date(1595784600000+0300)\/", + "\/Date(1595785500000+0300)\/", + "\/Date(1595858400000+0300)\/", + "\/Date(1595859300000+0300)\/", + "\/Date(1595860200000+0300)\/", + "\/Date(1595861100000+0300)\/", + "\/Date(1595862000000+0300)\/", + "\/Date(1595862900000+0300)\/", + "\/Date(1595863800000+0300)\/", + "\/Date(1595864700000+0300)\/", + "\/Date(1595865600000+0300)\/", + "\/Date(1595866500000+0300)\/", + "\/Date(1595867400000+0300)\/", + "\/Date(1595868300000+0300)\/", + "\/Date(1595869200000+0300)\/", + "\/Date(1595870100000+0300)\/", + "\/Date(1595871000000+0300)\/", + "\/Date(1595871900000+0300)\/", + "\/Date(1595944800000+0300)\/", + "\/Date(1595945700000+0300)\/", + "\/Date(1595946600000+0300)\/", + "\/Date(1595947500000+0300)\/", + "\/Date(1595948400000+0300)\/", + "\/Date(1595949300000+0300)\/", + "\/Date(1595950200000+0300)\/", + "\/Date(1595951100000+0300)\/", + "\/Date(1595952000000+0300)\/", + "\/Date(1595952900000+0300)\/", + "\/Date(1595953800000+0300)\/", + "\/Date(1595954700000+0300)\/", + "\/Date(1595955600000+0300)\/", + "\/Date(1595956500000+0300)\/", + "\/Date(1595957400000+0300)\/", + "\/Date(1595958300000+0300)\/", + "\/Date(1596549600000+0300)\/", + "\/Date(1596550500000+0300)\/", + "\/Date(1596551400000+0300)\/", + "\/Date(1596552300000+0300)\/", + "\/Date(1596553200000+0300)\/", + "\/Date(1596554100000+0300)\/", + "\/Date(1596555000000+0300)\/", + "\/Date(1596555900000+0300)\/", + "\/Date(1596556800000+0300)\/", + "\/Date(1596557700000+0300)\/", + "\/Date(1596558600000+0300)\/", + "\/Date(1596559500000+0300)\/", + "\/Date(1596560400000+0300)\/", + "\/Date(1596561300000+0300)\/", + "\/Date(1596562200000+0300)\/", + "\/Date(1596563100000+0300)\/", + "\/Date(1596636000000+0300)\/", + "\/Date(1596636900000+0300)\/", + "\/Date(1596637800000+0300)\/", + "\/Date(1596638700000+0300)\/", + "\/Date(1596639600000+0300)\/", + "\/Date(1596640500000+0300)\/", + "\/Date(1596641400000+0300)\/", + "\/Date(1596642300000+0300)\/", + "\/Date(1596643200000+0300)\/", + "\/Date(1596644100000+0300)\/", + "\/Date(1596645000000+0300)\/", + "\/Date(1596645900000+0300)\/", + "\/Date(1596646800000+0300)\/", + "\/Date(1596647700000+0300)\/", + "\/Date(1596648600000+0300)\/", + "\/Date(1596649500000+0300)\/", + "\/Date(1596718800000+0300)\/", + "\/Date(1596719700000+0300)\/", + "\/Date(1596720600000+0300)\/", + "\/Date(1596721500000+0300)\/", + "\/Date(1596722400000+0300)\/", + "\/Date(1596723300000+0300)\/", + "\/Date(1596724200000+0300)\/", + "\/Date(1596725100000+0300)\/", + "\/Date(1596726000000+0300)\/", + "\/Date(1596726900000+0300)\/", + "\/Date(1596727800000+0300)\/", + "\/Date(1596728700000+0300)\/", + "\/Date(1596729600000+0300)\/", + "\/Date(1596730500000+0300)\/", + "\/Date(1596731400000+0300)\/", + "\/Date(1596732300000+0300)\/", + "\/Date(1596870000000+0300)\/", + "\/Date(1596870900000+0300)\/", + "\/Date(1596871800000+0300)\/", + "\/Date(1596872700000+0300)\/", + "\/Date(1596873600000+0300)\/", + "\/Date(1596874500000+0300)\/", + "\/Date(1596875400000+0300)\/", + "\/Date(1596876300000+0300)\/", + "\/Date(1596877200000+0300)\/", + "\/Date(1596878100000+0300)\/", + "\/Date(1596879000000+0300)\/", + "\/Date(1596879900000+0300)\/", + "\/Date(1596880800000+0300)\/", + "\/Date(1596881700000+0300)\/", + "\/Date(1596882600000+0300)\/", + "\/Date(1596883500000+0300)\/", + "\/Date(1596981600000+0300)\/", + "\/Date(1596982500000+0300)\/", + "\/Date(1596983400000+0300)\/", + "\/Date(1596984300000+0300)\/", + "\/Date(1596985200000+0300)\/", + "\/Date(1596986100000+0300)\/", + "\/Date(1596987000000+0300)\/", + "\/Date(1596987900000+0300)\/", + "\/Date(1596988800000+0300)\/", + "\/Date(1596989700000+0300)\/", + "\/Date(1596990600000+0300)\/", + "\/Date(1596991500000+0300)\/", + "\/Date(1596992400000+0300)\/", + "\/Date(1596993300000+0300)\/", + "\/Date(1596994200000+0300)\/", + "\/Date(1596995100000+0300)\/", + "\/Date(1597068000000+0300)\/", + "\/Date(1597068900000+0300)\/", + "\/Date(1597069800000+0300)\/", + "\/Date(1597070700000+0300)\/", + "\/Date(1597071600000+0300)\/", + "\/Date(1597072500000+0300)\/", + "\/Date(1597073400000+0300)\/", + "\/Date(1597074300000+0300)\/", + "\/Date(1597075200000+0300)\/", + "\/Date(1597076100000+0300)\/", + "\/Date(1597077000000+0300)\/", + "\/Date(1597077900000+0300)\/", + "\/Date(1597078800000+0300)\/", + "\/Date(1597079700000+0300)\/", + "\/Date(1597080600000+0300)\/", + "\/Date(1597081500000+0300)\/", + "\/Date(1597154400000+0300)\/", + "\/Date(1597155300000+0300)\/", + "\/Date(1597156200000+0300)\/", + "\/Date(1597157100000+0300)\/", + "\/Date(1597158000000+0300)\/", + "\/Date(1597158900000+0300)\/", + "\/Date(1597159800000+0300)\/", + "\/Date(1597160700000+0300)\/", + "\/Date(1597161600000+0300)\/", + "\/Date(1597162500000+0300)\/", + "\/Date(1597163400000+0300)\/", + "\/Date(1597164300000+0300)\/", + "\/Date(1597165200000+0300)\/", + "\/Date(1597166100000+0300)\/", + "\/Date(1597167000000+0300)\/", + "\/Date(1597167900000+0300)\/", + "\/Date(1597240800000+0300)\/", + "\/Date(1597241700000+0300)\/", + "\/Date(1597242600000+0300)\/", + "\/Date(1597243500000+0300)\/", + "\/Date(1597244400000+0300)\/", + "\/Date(1597245300000+0300)\/", + "\/Date(1597246200000+0300)\/", + "\/Date(1597247100000+0300)\/", + "\/Date(1597248000000+0300)\/", + "\/Date(1597248900000+0300)\/", + "\/Date(1597249800000+0300)\/", + "\/Date(1597250700000+0300)\/", + "\/Date(1597251600000+0300)\/", + "\/Date(1597252500000+0300)\/", + "\/Date(1597253400000+0300)\/", + "\/Date(1597254300000+0300)\/", + "\/Date(1597323600000+0300)\/", + "\/Date(1597324500000+0300)\/", + "\/Date(1597325400000+0300)\/", + "\/Date(1597326300000+0300)\/", + "\/Date(1597327200000+0300)\/", + "\/Date(1597328100000+0300)\/", + "\/Date(1597329000000+0300)\/", + "\/Date(1597329900000+0300)\/", + "\/Date(1597330800000+0300)\/", + "\/Date(1597331700000+0300)\/", + "\/Date(1597332600000+0300)\/", + "\/Date(1597333500000+0300)\/", + "\/Date(1597334400000+0300)\/", + "\/Date(1597335300000+0300)\/", + "\/Date(1597336200000+0300)\/", + "\/Date(1597337100000+0300)\/", + "\/Date(1597474800000+0300)\/", + "\/Date(1597475700000+0300)\/", + "\/Date(1597476600000+0300)\/", + "\/Date(1597477500000+0300)\/", + "\/Date(1597478400000+0300)\/", + "\/Date(1597479300000+0300)\/", + "\/Date(1597480200000+0300)\/", + "\/Date(1597481100000+0300)\/", + "\/Date(1597482000000+0300)\/", + "\/Date(1597482900000+0300)\/", + "\/Date(1597483800000+0300)\/", + "\/Date(1597484700000+0300)\/", + "\/Date(1597485600000+0300)\/", + "\/Date(1597486500000+0300)\/", + "\/Date(1597487400000+0300)\/", + "\/Date(1597488300000+0300)\/", + "\/Date(1597586400000+0300)\/", + "\/Date(1597587300000+0300)\/", + "\/Date(1597588200000+0300)\/", + "\/Date(1597589100000+0300)\/", + "\/Date(1597590000000+0300)\/", + "\/Date(1597590900000+0300)\/", + "\/Date(1597591800000+0300)\/", + "\/Date(1597592700000+0300)\/", + "\/Date(1597593600000+0300)\/", + "\/Date(1597594500000+0300)\/", + "\/Date(1597595400000+0300)\/", + "\/Date(1597596300000+0300)\/", + "\/Date(1597597200000+0300)\/", + "\/Date(1597598100000+0300)\/", + "\/Date(1597599000000+0300)\/", + "\/Date(1597599900000+0300)\/", + "\/Date(1597672800000+0300)\/", + "\/Date(1597673700000+0300)\/", + "\/Date(1597674600000+0300)\/", + "\/Date(1597675500000+0300)\/", + "\/Date(1597676400000+0300)\/", + "\/Date(1597677300000+0300)\/", + "\/Date(1597678200000+0300)\/", + "\/Date(1597679100000+0300)\/", + "\/Date(1597680000000+0300)\/", + "\/Date(1597680900000+0300)\/", + "\/Date(1597681800000+0300)\/", + "\/Date(1597682700000+0300)\/", + "\/Date(1597683600000+0300)\/", + "\/Date(1597684500000+0300)\/", + "\/Date(1597685400000+0300)\/", + "\/Date(1597686300000+0300)\/", + "\/Date(1597759200000+0300)\/", + "\/Date(1597760100000+0300)\/", + "\/Date(1597761000000+0300)\/", + "\/Date(1597761900000+0300)\/", + "\/Date(1597762800000+0300)\/", + "\/Date(1597763700000+0300)\/", + "\/Date(1597764600000+0300)\/", + "\/Date(1597765500000+0300)\/", + "\/Date(1597766400000+0300)\/", + "\/Date(1597767300000+0300)\/", + "\/Date(1597768200000+0300)\/", + "\/Date(1597769100000+0300)\/", + "\/Date(1597770000000+0300)\/", + "\/Date(1597770900000+0300)\/", + "\/Date(1597771800000+0300)\/", + "\/Date(1597772700000+0300)\/", + "\/Date(1597845600000+0300)\/", + "\/Date(1597846500000+0300)\/", + "\/Date(1597847400000+0300)\/", + "\/Date(1597848300000+0300)\/", + "\/Date(1597849200000+0300)\/", + "\/Date(1597850100000+0300)\/", + "\/Date(1597851000000+0300)\/", + "\/Date(1597851900000+0300)\/", + "\/Date(1597852800000+0300)\/", + "\/Date(1597853700000+0300)\/", + "\/Date(1597854600000+0300)\/", + "\/Date(1597855500000+0300)\/", + "\/Date(1597856400000+0300)\/", + "\/Date(1597857300000+0300)\/", + "\/Date(1597858200000+0300)\/", + "\/Date(1597859100000+0300)\/", + "\/Date(1597928400000+0300)\/", + "\/Date(1597929300000+0300)\/", + "\/Date(1597930200000+0300)\/", + "\/Date(1597931100000+0300)\/", + "\/Date(1597932000000+0300)\/", + "\/Date(1597932900000+0300)\/", + "\/Date(1597933800000+0300)\/", + "\/Date(1597934700000+0300)\/", + "\/Date(1597935600000+0300)\/", + "\/Date(1597936500000+0300)\/", + "\/Date(1597937400000+0300)\/", + "\/Date(1597938300000+0300)\/", + "\/Date(1597939200000+0300)\/", + "\/Date(1597940100000+0300)\/", + "\/Date(1597941000000+0300)\/", + "\/Date(1597941900000+0300)\/", + "\/Date(1598079600000+0300)\/", + "\/Date(1598080500000+0300)\/", + "\/Date(1598081400000+0300)\/", + "\/Date(1598082300000+0300)\/", + "\/Date(1598083200000+0300)\/", + "\/Date(1598084100000+0300)\/", + "\/Date(1598085000000+0300)\/", + "\/Date(1598085900000+0300)\/", + "\/Date(1598086800000+0300)\/", + "\/Date(1598087700000+0300)\/", + "\/Date(1598088600000+0300)\/", + "\/Date(1598089500000+0300)\/", + "\/Date(1598090400000+0300)\/", + "\/Date(1598091300000+0300)\/", + "\/Date(1598092200000+0300)\/", + "\/Date(1598093100000+0300)\/", + "\/Date(1598191200000+0300)\/", + "\/Date(1598192100000+0300)\/", + "\/Date(1598193000000+0300)\/", + "\/Date(1598193900000+0300)\/", + "\/Date(1598194800000+0300)\/", + "\/Date(1598195700000+0300)\/", + "\/Date(1598196600000+0300)\/", + "\/Date(1598197500000+0300)\/", + "\/Date(1598198400000+0300)\/", + "\/Date(1598199300000+0300)\/", + "\/Date(1598200200000+0300)\/", + "\/Date(1598201100000+0300)\/", + "\/Date(1598202000000+0300)\/", + "\/Date(1598202900000+0300)\/", + "\/Date(1598203800000+0300)\/", + "\/Date(1598204700000+0300)\/", + "\/Date(1598277600000+0300)\/", + "\/Date(1598278500000+0300)\/", + "\/Date(1598279400000+0300)\/", + "\/Date(1598280300000+0300)\/", + "\/Date(1598281200000+0300)\/", + "\/Date(1598282100000+0300)\/", + "\/Date(1598283000000+0300)\/", + "\/Date(1598283900000+0300)\/", + "\/Date(1598284800000+0300)\/", + "\/Date(1598285700000+0300)\/", + "\/Date(1598286600000+0300)\/", + "\/Date(1598287500000+0300)\/", + "\/Date(1598288400000+0300)\/", + "\/Date(1598289300000+0300)\/", + "\/Date(1598290200000+0300)\/", + "\/Date(1598291100000+0300)\/", + "\/Date(1598364000000+0300)\/", + "\/Date(1598364900000+0300)\/", + "\/Date(1598365800000+0300)\/", + "\/Date(1598366700000+0300)\/", + "\/Date(1598367600000+0300)\/", + "\/Date(1598368500000+0300)\/", + "\/Date(1598369400000+0300)\/", + "\/Date(1598370300000+0300)\/", + "\/Date(1598371200000+0300)\/", + "\/Date(1598372100000+0300)\/", + "\/Date(1598373000000+0300)\/", + "\/Date(1598373900000+0300)\/", + "\/Date(1598374800000+0300)\/", + "\/Date(1598375700000+0300)\/", + "\/Date(1598376600000+0300)\/", + "\/Date(1598377500000+0300)\/", + "\/Date(1598450400000+0300)\/", + "\/Date(1598451300000+0300)\/", + "\/Date(1598452200000+0300)\/", + "\/Date(1598453100000+0300)\/", + "\/Date(1598454000000+0300)\/", + "\/Date(1598454900000+0300)\/", + "\/Date(1598455800000+0300)\/", + "\/Date(1598456700000+0300)\/", + "\/Date(1598457600000+0300)\/", + "\/Date(1598458500000+0300)\/", + "\/Date(1598459400000+0300)\/", + "\/Date(1598460300000+0300)\/", + "\/Date(1598461200000+0300)\/", + "\/Date(1598462100000+0300)\/", + "\/Date(1598463000000+0300)\/", + "\/Date(1598463900000+0300)\/", + "\/Date(1598533200000+0300)\/", + "\/Date(1598534100000+0300)\/", + "\/Date(1598535000000+0300)\/", + "\/Date(1598535900000+0300)\/", + "\/Date(1598536800000+0300)\/", + "\/Date(1598537700000+0300)\/", + "\/Date(1598538600000+0300)\/", + "\/Date(1598539500000+0300)\/", + "\/Date(1598540400000+0300)\/", + "\/Date(1598541300000+0300)\/", + "\/Date(1598542200000+0300)\/", + "\/Date(1598543100000+0300)\/", + "\/Date(1598544000000+0300)\/", + "\/Date(1598544900000+0300)\/", + "\/Date(1598545800000+0300)\/", + "\/Date(1598546700000+0300)\/", + "\/Date(1598684400000+0300)\/", + "\/Date(1598685300000+0300)\/", + "\/Date(1598686200000+0300)\/", + "\/Date(1598687100000+0300)\/", + "\/Date(1598688000000+0300)\/", + "\/Date(1598688900000+0300)\/", + "\/Date(1598689800000+0300)\/", + "\/Date(1598690700000+0300)\/", + "\/Date(1598691600000+0300)\/", + "\/Date(1598692500000+0300)\/", + "\/Date(1598693400000+0300)\/", + "\/Date(1598694300000+0300)\/", + "\/Date(1598695200000+0300)\/", + "\/Date(1598696100000+0300)\/", + "\/Date(1598697000000+0300)\/", + "\/Date(1598697900000+0300)\/", + "\/Date(1598796000000+0300)\/", + "\/Date(1598796900000+0300)\/", + "\/Date(1598797800000+0300)\/", + "\/Date(1598798700000+0300)\/", + "\/Date(1598799600000+0300)\/", + "\/Date(1598800500000+0300)\/", + "\/Date(1598801400000+0300)\/", + "\/Date(1598802300000+0300)\/", + "\/Date(1598803200000+0300)\/", + "\/Date(1598804100000+0300)\/", + "\/Date(1598805000000+0300)\/", + "\/Date(1598805900000+0300)\/", + "\/Date(1598806800000+0300)\/", + "\/Date(1598807700000+0300)\/", + "\/Date(1598808600000+0300)\/", + "\/Date(1598809500000+0300)\/", + "\/Date(1598882400000+0300)\/", + "\/Date(1598883300000+0300)\/", + "\/Date(1598884200000+0300)\/", + "\/Date(1598885100000+0300)\/", + "\/Date(1598886000000+0300)\/", + "\/Date(1598886900000+0300)\/", + "\/Date(1598887800000+0300)\/", + "\/Date(1598888700000+0300)\/", + "\/Date(1598889600000+0300)\/", + "\/Date(1598890500000+0300)\/", + "\/Date(1598891400000+0300)\/", + "\/Date(1598892300000+0300)\/", + "\/Date(1598893200000+0300)\/", + "\/Date(1598894100000+0300)\/", + "\/Date(1598895000000+0300)\/", + "\/Date(1598895900000+0300)\/", + "\/Date(1598968800000+0300)\/", + "\/Date(1598969700000+0300)\/", + "\/Date(1598970600000+0300)\/", + "\/Date(1598971500000+0300)\/", + "\/Date(1598972400000+0300)\/", + "\/Date(1598973300000+0300)\/", + "\/Date(1598974200000+0300)\/", + "\/Date(1598975100000+0300)\/", + "\/Date(1598976000000+0300)\/", + "\/Date(1598976900000+0300)\/", + "\/Date(1598977800000+0300)\/", + "\/Date(1598978700000+0300)\/", + "\/Date(1598979600000+0300)\/", + "\/Date(1598980500000+0300)\/", + "\/Date(1598981400000+0300)\/", + "\/Date(1598982300000+0300)\/", + "\/Date(1599055200000+0300)\/", + "\/Date(1599056100000+0300)\/", + "\/Date(1599057000000+0300)\/", + "\/Date(1599057900000+0300)\/", + "\/Date(1599058800000+0300)\/", + "\/Date(1599059700000+0300)\/", + "\/Date(1599060600000+0300)\/", + "\/Date(1599061500000+0300)\/", + "\/Date(1599062400000+0300)\/", + "\/Date(1599063300000+0300)\/", + "\/Date(1599064200000+0300)\/", + "\/Date(1599065100000+0300)\/", + "\/Date(1599066000000+0300)\/", + "\/Date(1599066900000+0300)\/", + "\/Date(1599067800000+0300)\/", + "\/Date(1599068700000+0300)\/", + "\/Date(1599138000000+0300)\/", + "\/Date(1599138900000+0300)\/", + "\/Date(1599139800000+0300)\/", + "\/Date(1599140700000+0300)\/", + "\/Date(1599141600000+0300)\/", + "\/Date(1599142500000+0300)\/", + "\/Date(1599143400000+0300)\/", + "\/Date(1599144300000+0300)\/", + "\/Date(1599145200000+0300)\/", + "\/Date(1599146100000+0300)\/", + "\/Date(1599147000000+0300)\/", + "\/Date(1599147900000+0300)\/", + "\/Date(1599148800000+0300)\/", + "\/Date(1599149700000+0300)\/", + "\/Date(1599150600000+0300)\/", + "\/Date(1599151500000+0300)\/", + "\/Date(1599289200000+0300)\/", + "\/Date(1599290100000+0300)\/", + "\/Date(1599291000000+0300)\/", + "\/Date(1599291900000+0300)\/", + "\/Date(1599292800000+0300)\/", + "\/Date(1599293700000+0300)\/", + "\/Date(1599294600000+0300)\/", + "\/Date(1599295500000+0300)\/", + "\/Date(1599296400000+0300)\/", + "\/Date(1599297300000+0300)\/", + "\/Date(1599298200000+0300)\/", + "\/Date(1599299100000+0300)\/", + "\/Date(1599300000000+0300)\/", + "\/Date(1599300900000+0300)\/", + "\/Date(1599301800000+0300)\/", + "\/Date(1599302700000+0300)\/", + "\/Date(1599400800000+0300)\/", + "\/Date(1599401700000+0300)\/", + "\/Date(1599402600000+0300)\/", + "\/Date(1599403500000+0300)\/", + "\/Date(1599404400000+0300)\/", + "\/Date(1599405300000+0300)\/", + "\/Date(1599406200000+0300)\/", + "\/Date(1599407100000+0300)\/", + "\/Date(1599408000000+0300)\/", + "\/Date(1599408900000+0300)\/", + "\/Date(1599409800000+0300)\/", + "\/Date(1599410700000+0300)\/", + "\/Date(1599411600000+0300)\/", + "\/Date(1599412500000+0300)\/", + "\/Date(1599413400000+0300)\/", + "\/Date(1599414300000+0300)\/", + "\/Date(1599487200000+0300)\/", + "\/Date(1599488100000+0300)\/", + "\/Date(1599489000000+0300)\/", + "\/Date(1599489900000+0300)\/", + "\/Date(1599490800000+0300)\/", + "\/Date(1599491700000+0300)\/", + "\/Date(1599492600000+0300)\/", + "\/Date(1599493500000+0300)\/", + "\/Date(1599494400000+0300)\/", + "\/Date(1599495300000+0300)\/", + "\/Date(1599496200000+0300)\/", + "\/Date(1599497100000+0300)\/", + "\/Date(1599498000000+0300)\/", + "\/Date(1599498900000+0300)\/", + "\/Date(1599499800000+0300)\/", + "\/Date(1599500700000+0300)\/", + "\/Date(1599573600000+0300)\/", + "\/Date(1599574500000+0300)\/", + "\/Date(1599575400000+0300)\/", + "\/Date(1599576300000+0300)\/", + "\/Date(1599577200000+0300)\/", + "\/Date(1599578100000+0300)\/", + "\/Date(1599579000000+0300)\/", + "\/Date(1599579900000+0300)\/", + "\/Date(1599580800000+0300)\/", + "\/Date(1599581700000+0300)\/", + "\/Date(1599582600000+0300)\/", + "\/Date(1599583500000+0300)\/", + "\/Date(1599584400000+0300)\/", + "\/Date(1599585300000+0300)\/", + "\/Date(1599586200000+0300)\/", + "\/Date(1599587100000+0300)\/", + "\/Date(1599660000000+0300)\/", + "\/Date(1599660900000+0300)\/", + "\/Date(1599661800000+0300)\/", + "\/Date(1599662700000+0300)\/", + "\/Date(1599663600000+0300)\/", + "\/Date(1599664500000+0300)\/", + "\/Date(1599665400000+0300)\/", + "\/Date(1599666300000+0300)\/", + "\/Date(1599667200000+0300)\/", + "\/Date(1599668100000+0300)\/", + "\/Date(1599669000000+0300)\/", + "\/Date(1599669900000+0300)\/", + "\/Date(1599670800000+0300)\/", + "\/Date(1599671700000+0300)\/", + "\/Date(1599672600000+0300)\/", + "\/Date(1599673500000+0300)\/", + "\/Date(1599742800000+0300)\/", + "\/Date(1599743700000+0300)\/", + "\/Date(1599744600000+0300)\/", + "\/Date(1599745500000+0300)\/", + "\/Date(1599746400000+0300)\/", + "\/Date(1599747300000+0300)\/", + "\/Date(1599748200000+0300)\/", + "\/Date(1599749100000+0300)\/", + "\/Date(1599750000000+0300)\/", + "\/Date(1599750900000+0300)\/", + "\/Date(1599751800000+0300)\/", + "\/Date(1599752700000+0300)\/", + "\/Date(1599753600000+0300)\/", + "\/Date(1599754500000+0300)\/", + "\/Date(1599755400000+0300)\/", + "\/Date(1599756300000+0300)\/", + "\/Date(1599894000000+0300)\/", + "\/Date(1599894900000+0300)\/", + "\/Date(1599895800000+0300)\/", + "\/Date(1599896700000+0300)\/", + "\/Date(1599897600000+0300)\/", + "\/Date(1599898500000+0300)\/", + "\/Date(1599899400000+0300)\/", + "\/Date(1599900300000+0300)\/", + "\/Date(1599901200000+0300)\/", + "\/Date(1599902100000+0300)\/", + "\/Date(1599903000000+0300)\/", + "\/Date(1599903900000+0300)\/", + "\/Date(1599904800000+0300)\/", + "\/Date(1599905700000+0300)\/", + "\/Date(1599906600000+0300)\/", + "\/Date(1599907500000+0300)\/", + "\/Date(1600005600000+0300)\/", + "\/Date(1600006500000+0300)\/", + "\/Date(1600007400000+0300)\/", + "\/Date(1600008300000+0300)\/", + "\/Date(1600009200000+0300)\/", + "\/Date(1600010100000+0300)\/", + "\/Date(1600011000000+0300)\/", + "\/Date(1600011900000+0300)\/", + "\/Date(1600012800000+0300)\/", + "\/Date(1600013700000+0300)\/", + "\/Date(1600014600000+0300)\/", + "\/Date(1600015500000+0300)\/", + "\/Date(1600016400000+0300)\/", + "\/Date(1600017300000+0300)\/", + "\/Date(1600018200000+0300)\/", + "\/Date(1600019100000+0300)\/", + "\/Date(1600092000000+0300)\/", + "\/Date(1600092900000+0300)\/", + "\/Date(1600093800000+0300)\/", + "\/Date(1600094700000+0300)\/", + "\/Date(1600095600000+0300)\/", + "\/Date(1600096500000+0300)\/", + "\/Date(1600097400000+0300)\/", + "\/Date(1600098300000+0300)\/", + "\/Date(1600099200000+0300)\/", + "\/Date(1600100100000+0300)\/", + "\/Date(1600101000000+0300)\/", + "\/Date(1600101900000+0300)\/", + "\/Date(1600102800000+0300)\/", + "\/Date(1600103700000+0300)\/", + "\/Date(1600104600000+0300)\/", + "\/Date(1600105500000+0300)\/", + "\/Date(1600178400000+0300)\/", + "\/Date(1600179300000+0300)\/", + "\/Date(1600180200000+0300)\/", + "\/Date(1600181100000+0300)\/", + "\/Date(1600182000000+0300)\/", + "\/Date(1600182900000+0300)\/", + "\/Date(1600183800000+0300)\/", + "\/Date(1600184700000+0300)\/", + "\/Date(1600185600000+0300)\/", + "\/Date(1600186500000+0300)\/", + "\/Date(1600187400000+0300)\/", + "\/Date(1600188300000+0300)\/", + "\/Date(1600189200000+0300)\/", + "\/Date(1600190100000+0300)\/", + "\/Date(1600191000000+0300)\/", + "\/Date(1600191900000+0300)\/", + "\/Date(1600264800000+0300)\/", + "\/Date(1600265700000+0300)\/", + "\/Date(1600266600000+0300)\/", + "\/Date(1600267500000+0300)\/", + "\/Date(1600268400000+0300)\/", + "\/Date(1600269300000+0300)\/", + "\/Date(1600270200000+0300)\/", + "\/Date(1600271100000+0300)\/", + "\/Date(1600272000000+0300)\/", + "\/Date(1600272900000+0300)\/", + "\/Date(1600273800000+0300)\/", + "\/Date(1600274700000+0300)\/", + "\/Date(1600275600000+0300)\/", + "\/Date(1600276500000+0300)\/", + "\/Date(1600277400000+0300)\/", + "\/Date(1600278300000+0300)\/", + "\/Date(1600347600000+0300)\/", + "\/Date(1600348500000+0300)\/", + "\/Date(1600349400000+0300)\/", + "\/Date(1600350300000+0300)\/", + "\/Date(1600351200000+0300)\/", + "\/Date(1600352100000+0300)\/", + "\/Date(1600353000000+0300)\/", + "\/Date(1600353900000+0300)\/", + "\/Date(1600354800000+0300)\/", + "\/Date(1600355700000+0300)\/", + "\/Date(1600356600000+0300)\/", + "\/Date(1600357500000+0300)\/", + "\/Date(1600358400000+0300)\/", + "\/Date(1600359300000+0300)\/", + "\/Date(1600360200000+0300)\/", + "\/Date(1600361100000+0300)\/", + "\/Date(1600498800000+0300)\/", + "\/Date(1600499700000+0300)\/", + "\/Date(1600500600000+0300)\/", + "\/Date(1600501500000+0300)\/", + "\/Date(1600502400000+0300)\/", + "\/Date(1600503300000+0300)\/", + "\/Date(1600504200000+0300)\/", + "\/Date(1600505100000+0300)\/", + "\/Date(1600506000000+0300)\/", + "\/Date(1600506900000+0300)\/", + "\/Date(1600507800000+0300)\/", + "\/Date(1600508700000+0300)\/", + "\/Date(1600509600000+0300)\/", + "\/Date(1600510500000+0300)\/", + "\/Date(1600511400000+0300)\/", + "\/Date(1600512300000+0300)\/", + "\/Date(1600610400000+0300)\/", + "\/Date(1600611300000+0300)\/", + "\/Date(1600612200000+0300)\/", + "\/Date(1600613100000+0300)\/", + "\/Date(1600614000000+0300)\/", + "\/Date(1600614900000+0300)\/", + "\/Date(1600615800000+0300)\/", + "\/Date(1600616700000+0300)\/", + "\/Date(1600617600000+0300)\/", + "\/Date(1600618500000+0300)\/", + "\/Date(1600619400000+0300)\/", + "\/Date(1600620300000+0300)\/", + "\/Date(1600621200000+0300)\/", + "\/Date(1600622100000+0300)\/", + "\/Date(1600623000000+0300)\/", + "\/Date(1600623900000+0300)\/", + "\/Date(1600696800000+0300)\/", + "\/Date(1600697700000+0300)\/", + "\/Date(1600698600000+0300)\/", + "\/Date(1600699500000+0300)\/", + "\/Date(1600700400000+0300)\/", + "\/Date(1600701300000+0300)\/", + "\/Date(1600702200000+0300)\/", + "\/Date(1600703100000+0300)\/", + "\/Date(1600704000000+0300)\/", + "\/Date(1600704900000+0300)\/", + "\/Date(1600705800000+0300)\/", + "\/Date(1600706700000+0300)\/", + "\/Date(1600707600000+0300)\/", + "\/Date(1600708500000+0300)\/", + "\/Date(1600709400000+0300)\/", + "\/Date(1600710300000+0300)\/", + "\/Date(1600783200000+0300)\/", + "\/Date(1600784100000+0300)\/", + "\/Date(1600785000000+0300)\/", + "\/Date(1600785900000+0300)\/", + "\/Date(1600786800000+0300)\/", + "\/Date(1600787700000+0300)\/", + "\/Date(1600788600000+0300)\/", + "\/Date(1600789500000+0300)\/", + "\/Date(1600790400000+0300)\/", + "\/Date(1600791300000+0300)\/", + "\/Date(1600792200000+0300)\/", + "\/Date(1600793100000+0300)\/", + "\/Date(1600794000000+0300)\/", + "\/Date(1600794900000+0300)\/", + "\/Date(1600795800000+0300)\/", + "\/Date(1600796700000+0300)\/", + "\/Date(1600869600000+0300)\/", + "\/Date(1600870500000+0300)\/", + "\/Date(1600871400000+0300)\/", + "\/Date(1600872300000+0300)\/", + "\/Date(1600873200000+0300)\/", + "\/Date(1600874100000+0300)\/", + "\/Date(1600875000000+0300)\/", + "\/Date(1600875900000+0300)\/", + "\/Date(1600876800000+0300)\/", + "\/Date(1600877700000+0300)\/", + "\/Date(1600878600000+0300)\/", + "\/Date(1600879500000+0300)\/", + "\/Date(1600880400000+0300)\/", + "\/Date(1600881300000+0300)\/", + "\/Date(1600882200000+0300)\/", + "\/Date(1600883100000+0300)\/", + "\/Date(1600952400000+0300)\/", + "\/Date(1600953300000+0300)\/", + "\/Date(1600954200000+0300)\/", + "\/Date(1600955100000+0300)\/", + "\/Date(1600956000000+0300)\/", + "\/Date(1600956900000+0300)\/", + "\/Date(1600957800000+0300)\/", + "\/Date(1600958700000+0300)\/", + "\/Date(1600959600000+0300)\/", + "\/Date(1600960500000+0300)\/", + "\/Date(1600961400000+0300)\/", + "\/Date(1600962300000+0300)\/", + "\/Date(1600963200000+0300)\/", + "\/Date(1600964100000+0300)\/", + "\/Date(1600965000000+0300)\/", + "\/Date(1600965900000+0300)\/", + "\/Date(1601103600000+0300)\/", + "\/Date(1601104500000+0300)\/", + "\/Date(1601105400000+0300)\/", + "\/Date(1601106300000+0300)\/", + "\/Date(1601107200000+0300)\/", + "\/Date(1601108100000+0300)\/", + "\/Date(1601109000000+0300)\/", + "\/Date(1601109900000+0300)\/", + "\/Date(1601110800000+0300)\/", + "\/Date(1601111700000+0300)\/", + "\/Date(1601112600000+0300)\/", + "\/Date(1601113500000+0300)\/", + "\/Date(1601114400000+0300)\/", + "\/Date(1601115300000+0300)\/", + "\/Date(1601116200000+0300)\/", + "\/Date(1601117100000+0300)\/", + "\/Date(1601215200000+0300)\/", + "\/Date(1601216100000+0300)\/", + "\/Date(1601217000000+0300)\/", + "\/Date(1601217900000+0300)\/", + "\/Date(1601218800000+0300)\/", + "\/Date(1601219700000+0300)\/", + "\/Date(1601220600000+0300)\/", + "\/Date(1601221500000+0300)\/", + "\/Date(1601222400000+0300)\/", + "\/Date(1601223300000+0300)\/", + "\/Date(1601224200000+0300)\/", + "\/Date(1601225100000+0300)\/", + "\/Date(1601226000000+0300)\/", + "\/Date(1601226900000+0300)\/", + "\/Date(1601227800000+0300)\/", + "\/Date(1601228700000+0300)\/", + "\/Date(1601301600000+0300)\/", + "\/Date(1601302500000+0300)\/", + "\/Date(1601303400000+0300)\/", + "\/Date(1601304300000+0300)\/", + "\/Date(1601305200000+0300)\/", + "\/Date(1601306100000+0300)\/", + "\/Date(1601307000000+0300)\/", + "\/Date(1601307900000+0300)\/", + "\/Date(1601308800000+0300)\/", + "\/Date(1601309700000+0300)\/", + "\/Date(1601310600000+0300)\/", + "\/Date(1601311500000+0300)\/", + "\/Date(1601312400000+0300)\/", + "\/Date(1601313300000+0300)\/", + "\/Date(1601314200000+0300)\/", + "\/Date(1601315100000+0300)\/", + "\/Date(1601388000000+0300)\/", + "\/Date(1601388900000+0300)\/", + "\/Date(1601389800000+0300)\/", + "\/Date(1601390700000+0300)\/", + "\/Date(1601391600000+0300)\/", + "\/Date(1601392500000+0300)\/", + "\/Date(1601393400000+0300)\/", + "\/Date(1601394300000+0300)\/", + "\/Date(1601395200000+0300)\/", + "\/Date(1601396100000+0300)\/", + "\/Date(1601397000000+0300)\/", + "\/Date(1601397900000+0300)\/", + "\/Date(1601398800000+0300)\/", + "\/Date(1601399700000+0300)\/", + "\/Date(1601400600000+0300)\/", + "\/Date(1601401500000+0300)\/", + "\/Date(1601474400000+0300)\/", + "\/Date(1601475300000+0300)\/", + "\/Date(1601476200000+0300)\/", + "\/Date(1601477100000+0300)\/", + "\/Date(1601478000000+0300)\/", + "\/Date(1601478900000+0300)\/", + "\/Date(1601479800000+0300)\/", + "\/Date(1601480700000+0300)\/", + "\/Date(1601481600000+0300)\/", + "\/Date(1601482500000+0300)\/", + "\/Date(1601483400000+0300)\/", + "\/Date(1601484300000+0300)\/", + "\/Date(1601485200000+0300)\/", + "\/Date(1601486100000+0300)\/", + "\/Date(1601487000000+0300)\/", + "\/Date(1601487900000+0300)\/", + "\/Date(1601557200000+0300)\/", + "\/Date(1601558100000+0300)\/", + "\/Date(1601559000000+0300)\/", + "\/Date(1601559900000+0300)\/", + "\/Date(1601560800000+0300)\/", + "\/Date(1601561700000+0300)\/", + "\/Date(1601562600000+0300)\/", + "\/Date(1601563500000+0300)\/", + "\/Date(1601564400000+0300)\/", + "\/Date(1601565300000+0300)\/", + "\/Date(1601566200000+0300)\/", + "\/Date(1601567100000+0300)\/", + "\/Date(1601568000000+0300)\/", + "\/Date(1601568900000+0300)\/", + "\/Date(1601569800000+0300)\/", + "\/Date(1601570700000+0300)\/", + "\/Date(1601708400000+0300)\/", + "\/Date(1601709300000+0300)\/", + "\/Date(1601710200000+0300)\/", + "\/Date(1601711100000+0300)\/", + "\/Date(1601712000000+0300)\/", + "\/Date(1601712900000+0300)\/", + "\/Date(1601713800000+0300)\/", + "\/Date(1601714700000+0300)\/", + "\/Date(1601715600000+0300)\/", + "\/Date(1601716500000+0300)\/", + "\/Date(1601717400000+0300)\/", + "\/Date(1601718300000+0300)\/", + "\/Date(1601719200000+0300)\/", + "\/Date(1601720100000+0300)\/", + "\/Date(1601721000000+0300)\/", + "\/Date(1601721900000+0300)\/", + "\/Date(1601820000000+0300)\/", + "\/Date(1601820900000+0300)\/", + "\/Date(1601821800000+0300)\/", + "\/Date(1601822700000+0300)\/", + "\/Date(1601823600000+0300)\/", + "\/Date(1601824500000+0300)\/", + "\/Date(1601825400000+0300)\/", + "\/Date(1601826300000+0300)\/", + "\/Date(1601827200000+0300)\/", + "\/Date(1601828100000+0300)\/", + "\/Date(1601829000000+0300)\/", + "\/Date(1601829900000+0300)\/", + "\/Date(1601830800000+0300)\/", + "\/Date(1601831700000+0300)\/", + "\/Date(1601832600000+0300)\/", + "\/Date(1601833500000+0300)\/", + "\/Date(1601906400000+0300)\/", + "\/Date(1601907300000+0300)\/", + "\/Date(1601908200000+0300)\/", + "\/Date(1601909100000+0300)\/", + "\/Date(1601910000000+0300)\/", + "\/Date(1601910900000+0300)\/", + "\/Date(1601911800000+0300)\/", + "\/Date(1601912700000+0300)\/", + "\/Date(1601913600000+0300)\/", + "\/Date(1601914500000+0300)\/", + "\/Date(1601915400000+0300)\/", + "\/Date(1601916300000+0300)\/", + "\/Date(1601917200000+0300)\/", + "\/Date(1601918100000+0300)\/", + "\/Date(1601919000000+0300)\/", + "\/Date(1601919900000+0300)\/", + "\/Date(1601992800000+0300)\/", + "\/Date(1601993700000+0300)\/", + "\/Date(1601994600000+0300)\/", + "\/Date(1601995500000+0300)\/", + "\/Date(1601996400000+0300)\/", + "\/Date(1601997300000+0300)\/", + "\/Date(1601998200000+0300)\/", + "\/Date(1601999100000+0300)\/", + "\/Date(1602000000000+0300)\/", + "\/Date(1602000900000+0300)\/", + "\/Date(1602001800000+0300)\/", + "\/Date(1602002700000+0300)\/", + "\/Date(1602003600000+0300)\/", + "\/Date(1602004500000+0300)\/", + "\/Date(1602005400000+0300)\/", + "\/Date(1602006300000+0300)\/", + "\/Date(1602079200000+0300)\/", + "\/Date(1602080100000+0300)\/", + "\/Date(1602081000000+0300)\/", + "\/Date(1602081900000+0300)\/", + "\/Date(1602082800000+0300)\/", + "\/Date(1602083700000+0300)\/", + "\/Date(1602084600000+0300)\/", + "\/Date(1602085500000+0300)\/", + "\/Date(1602086400000+0300)\/", + "\/Date(1602087300000+0300)\/", + "\/Date(1602088200000+0300)\/", + "\/Date(1602089100000+0300)\/", + "\/Date(1602090000000+0300)\/", + "\/Date(1602090900000+0300)\/", + "\/Date(1602091800000+0300)\/", + "\/Date(1602092700000+0300)\/", + "\/Date(1602162000000+0300)\/", + "\/Date(1602162900000+0300)\/", + "\/Date(1602163800000+0300)\/", + "\/Date(1602164700000+0300)\/", + "\/Date(1602165600000+0300)\/", + "\/Date(1602166500000+0300)\/", + "\/Date(1602167400000+0300)\/", + "\/Date(1602168300000+0300)\/", + "\/Date(1602169200000+0300)\/", + "\/Date(1602170100000+0300)\/", + "\/Date(1602171000000+0300)\/", + "\/Date(1602171900000+0300)\/", + "\/Date(1602172800000+0300)\/", + "\/Date(1602173700000+0300)\/", + "\/Date(1602174600000+0300)\/", + "\/Date(1602175500000+0300)\/", + "\/Date(1602313200000+0300)\/", + "\/Date(1602314100000+0300)\/", + "\/Date(1602315000000+0300)\/", + "\/Date(1602315900000+0300)\/", + "\/Date(1602316800000+0300)\/", + "\/Date(1602317700000+0300)\/", + "\/Date(1602318600000+0300)\/", + "\/Date(1602319500000+0300)\/", + "\/Date(1602320400000+0300)\/", + "\/Date(1602321300000+0300)\/", + "\/Date(1602322200000+0300)\/", + "\/Date(1602323100000+0300)\/", + "\/Date(1602324000000+0300)\/", + "\/Date(1602324900000+0300)\/", + "\/Date(1602325800000+0300)\/", + "\/Date(1602326700000+0300)\/", + "\/Date(1602424800000+0300)\/", + "\/Date(1602425700000+0300)\/", + "\/Date(1602426600000+0300)\/", + "\/Date(1602427500000+0300)\/", + "\/Date(1602428400000+0300)\/", + "\/Date(1602429300000+0300)\/", + "\/Date(1602430200000+0300)\/", + "\/Date(1602431100000+0300)\/", + "\/Date(1602432000000+0300)\/", + "\/Date(1602432900000+0300)\/", + "\/Date(1602433800000+0300)\/", + "\/Date(1602434700000+0300)\/", + "\/Date(1602435600000+0300)\/", + "\/Date(1602436500000+0300)\/", + "\/Date(1602437400000+0300)\/", + "\/Date(1602438300000+0300)\/", + "\/Date(1602511200000+0300)\/", + "\/Date(1602512100000+0300)\/", + "\/Date(1602513000000+0300)\/", + "\/Date(1602513900000+0300)\/", + "\/Date(1602514800000+0300)\/", + "\/Date(1602515700000+0300)\/", + "\/Date(1602516600000+0300)\/", + "\/Date(1602517500000+0300)\/", + "\/Date(1602518400000+0300)\/", + "\/Date(1602519300000+0300)\/", + "\/Date(1602520200000+0300)\/", + "\/Date(1602521100000+0300)\/", + "\/Date(1602522000000+0300)\/", + "\/Date(1602522900000+0300)\/", + "\/Date(1602523800000+0300)\/", + "\/Date(1602524700000+0300)\/", + "\/Date(1602597600000+0300)\/", + "\/Date(1602598500000+0300)\/", + "\/Date(1602599400000+0300)\/", + "\/Date(1602600300000+0300)\/", + "\/Date(1602601200000+0300)\/", + "\/Date(1602602100000+0300)\/", + "\/Date(1602603000000+0300)\/", + "\/Date(1602603900000+0300)\/", + "\/Date(1602604800000+0300)\/", + "\/Date(1602605700000+0300)\/", + "\/Date(1602606600000+0300)\/", + "\/Date(1602607500000+0300)\/", + "\/Date(1602608400000+0300)\/", + "\/Date(1602609300000+0300)\/", + "\/Date(1602610200000+0300)\/", + "\/Date(1602611100000+0300)\/", + "\/Date(1602684000000+0300)\/", + "\/Date(1602684900000+0300)\/", + "\/Date(1602685800000+0300)\/", + "\/Date(1602686700000+0300)\/", + "\/Date(1602687600000+0300)\/", + "\/Date(1602688500000+0300)\/", + "\/Date(1602689400000+0300)\/", + "\/Date(1602690300000+0300)\/", + "\/Date(1602691200000+0300)\/", + "\/Date(1602692100000+0300)\/", + "\/Date(1602693000000+0300)\/", + "\/Date(1602693900000+0300)\/", + "\/Date(1602694800000+0300)\/", + "\/Date(1602695700000+0300)\/", + "\/Date(1602696600000+0300)\/", + "\/Date(1602697500000+0300)\/", + "\/Date(1602766800000+0300)\/", + "\/Date(1602767700000+0300)\/", + "\/Date(1602768600000+0300)\/", + "\/Date(1602769500000+0300)\/", + "\/Date(1602770400000+0300)\/", + "\/Date(1602771300000+0300)\/", + "\/Date(1602772200000+0300)\/", + "\/Date(1602773100000+0300)\/", + "\/Date(1602774000000+0300)\/", + "\/Date(1602774900000+0300)\/", + "\/Date(1602775800000+0300)\/", + "\/Date(1602776700000+0300)\/", + "\/Date(1602777600000+0300)\/", + "\/Date(1602778500000+0300)\/", + "\/Date(1602779400000+0300)\/", + "\/Date(1602780300000+0300)\/", + "\/Date(1602918000000+0300)\/", + "\/Date(1602918900000+0300)\/", + "\/Date(1602919800000+0300)\/", + "\/Date(1602920700000+0300)\/", + "\/Date(1602921600000+0300)\/", + "\/Date(1602922500000+0300)\/", + "\/Date(1602923400000+0300)\/", + "\/Date(1602924300000+0300)\/", + "\/Date(1602925200000+0300)\/", + "\/Date(1602926100000+0300)\/", + "\/Date(1602927000000+0300)\/", + "\/Date(1602927900000+0300)\/", + "\/Date(1602928800000+0300)\/", + "\/Date(1602929700000+0300)\/", + "\/Date(1602930600000+0300)\/", + "\/Date(1602931500000+0300)\/", + "\/Date(1603029600000+0300)\/", + "\/Date(1603030500000+0300)\/", + "\/Date(1603031400000+0300)\/", + "\/Date(1603032300000+0300)\/", + "\/Date(1603033200000+0300)\/", + "\/Date(1603034100000+0300)\/", + "\/Date(1603035000000+0300)\/", + "\/Date(1603035900000+0300)\/", + "\/Date(1603036800000+0300)\/", + "\/Date(1603037700000+0300)\/", + "\/Date(1603038600000+0300)\/", + "\/Date(1603039500000+0300)\/", + "\/Date(1603040400000+0300)\/", + "\/Date(1603041300000+0300)\/", + "\/Date(1603042200000+0300)\/", + "\/Date(1603043100000+0300)\/", + "\/Date(1603116000000+0300)\/", + "\/Date(1603116900000+0300)\/", + "\/Date(1603117800000+0300)\/", + "\/Date(1603118700000+0300)\/", + "\/Date(1603119600000+0300)\/", + "\/Date(1603120500000+0300)\/", + "\/Date(1603121400000+0300)\/", + "\/Date(1603122300000+0300)\/", + "\/Date(1603123200000+0300)\/", + "\/Date(1603124100000+0300)\/", + "\/Date(1603125000000+0300)\/", + "\/Date(1603125900000+0300)\/", + "\/Date(1603126800000+0300)\/", + "\/Date(1603127700000+0300)\/", + "\/Date(1603128600000+0300)\/", + "\/Date(1603129500000+0300)\/", + "\/Date(1603202400000+0300)\/", + "\/Date(1603203300000+0300)\/", + "\/Date(1603204200000+0300)\/", + "\/Date(1603205100000+0300)\/", + "\/Date(1603206000000+0300)\/", + "\/Date(1603206900000+0300)\/", + "\/Date(1603207800000+0300)\/", + "\/Date(1603208700000+0300)\/", + "\/Date(1603209600000+0300)\/", + "\/Date(1603210500000+0300)\/", + "\/Date(1603211400000+0300)\/", + "\/Date(1603212300000+0300)\/", + "\/Date(1603213200000+0300)\/", + "\/Date(1603214100000+0300)\/", + "\/Date(1603215000000+0300)\/", + "\/Date(1603215900000+0300)\/", + "\/Date(1603288800000+0300)\/", + "\/Date(1603289700000+0300)\/", + "\/Date(1603290600000+0300)\/", + "\/Date(1603291500000+0300)\/", + "\/Date(1603292400000+0300)\/", + "\/Date(1603293300000+0300)\/", + "\/Date(1603294200000+0300)\/", + "\/Date(1603295100000+0300)\/", + "\/Date(1603296000000+0300)\/", + "\/Date(1603296900000+0300)\/", + "\/Date(1603297800000+0300)\/", + "\/Date(1603298700000+0300)\/", + "\/Date(1603299600000+0300)\/", + "\/Date(1603300500000+0300)\/", + "\/Date(1603301400000+0300)\/", + "\/Date(1603302300000+0300)\/", + "\/Date(1603371600000+0300)\/", + "\/Date(1603372500000+0300)\/", + "\/Date(1603373400000+0300)\/", + "\/Date(1603374300000+0300)\/", + "\/Date(1603375200000+0300)\/", + "\/Date(1603376100000+0300)\/", + "\/Date(1603377000000+0300)\/", + "\/Date(1603377900000+0300)\/", + "\/Date(1603378800000+0300)\/", + "\/Date(1603379700000+0300)\/", + "\/Date(1603380600000+0300)\/", + "\/Date(1603381500000+0300)\/", + "\/Date(1603382400000+0300)\/", + "\/Date(1603383300000+0300)\/", + "\/Date(1603384200000+0300)\/", + "\/Date(1603385100000+0300)\/", + "\/Date(1603522800000+0300)\/", + "\/Date(1603523700000+0300)\/", + "\/Date(1603524600000+0300)\/", + "\/Date(1603525500000+0300)\/", + "\/Date(1603526400000+0300)\/", + "\/Date(1603527300000+0300)\/", + "\/Date(1603528200000+0300)\/", + "\/Date(1603529100000+0300)\/", + "\/Date(1603530000000+0300)\/", + "\/Date(1603530900000+0300)\/", + "\/Date(1603531800000+0300)\/", + "\/Date(1603532700000+0300)\/", + "\/Date(1603533600000+0300)\/", + "\/Date(1603534500000+0300)\/", + "\/Date(1603535400000+0300)\/", + "\/Date(1603536300000+0300)\/", + "\/Date(1603634400000+0300)\/", + "\/Date(1603635300000+0300)\/", + "\/Date(1603636200000+0300)\/", + "\/Date(1603637100000+0300)\/", + "\/Date(1603638000000+0300)\/", + "\/Date(1603638900000+0300)\/", + "\/Date(1603639800000+0300)\/", + "\/Date(1603640700000+0300)\/", + "\/Date(1603641600000+0300)\/", + "\/Date(1603642500000+0300)\/", + "\/Date(1603643400000+0300)\/", + "\/Date(1603644300000+0300)\/", + "\/Date(1603645200000+0300)\/", + "\/Date(1603646100000+0300)\/", + "\/Date(1603647000000+0300)\/", + "\/Date(1603647900000+0300)\/", + "\/Date(1603720800000+0300)\/", + "\/Date(1603721700000+0300)\/", + "\/Date(1603722600000+0300)\/", + "\/Date(1603723500000+0300)\/", + "\/Date(1603724400000+0300)\/", + "\/Date(1603725300000+0300)\/", + "\/Date(1603726200000+0300)\/", + "\/Date(1603727100000+0300)\/", + "\/Date(1603728000000+0300)\/", + "\/Date(1603728900000+0300)\/", + "\/Date(1603729800000+0300)\/", + "\/Date(1603730700000+0300)\/", + "\/Date(1603731600000+0300)\/", + "\/Date(1603732500000+0300)\/", + "\/Date(1603733400000+0300)\/", + "\/Date(1603734300000+0300)\/", + "\/Date(1603807200000+0300)\/", + "\/Date(1603808100000+0300)\/", + "\/Date(1603809000000+0300)\/", + "\/Date(1603809900000+0300)\/", + "\/Date(1603810800000+0300)\/", + "\/Date(1603811700000+0300)\/", + "\/Date(1603812600000+0300)\/", + "\/Date(1603813500000+0300)\/", + "\/Date(1603814400000+0300)\/", + "\/Date(1603815300000+0300)\/", + "\/Date(1603816200000+0300)\/", + "\/Date(1603817100000+0300)\/", + "\/Date(1603818000000+0300)\/", + "\/Date(1603818900000+0300)\/", + "\/Date(1603819800000+0300)\/", + "\/Date(1603820700000+0300)\/", + "\/Date(1603893600000+0300)\/", + "\/Date(1603894500000+0300)\/", + "\/Date(1603895400000+0300)\/", + "\/Date(1603896300000+0300)\/", + "\/Date(1603897200000+0300)\/", + "\/Date(1603898100000+0300)\/", + "\/Date(1603899000000+0300)\/", + "\/Date(1603899900000+0300)\/", + "\/Date(1603900800000+0300)\/", + "\/Date(1603901700000+0300)\/", + "\/Date(1603902600000+0300)\/", + "\/Date(1603903500000+0300)\/", + "\/Date(1603904400000+0300)\/", + "\/Date(1603905300000+0300)\/", + "\/Date(1603906200000+0300)\/", + "\/Date(1603907100000+0300)\/", + "\/Date(1603976400000+0300)\/", + "\/Date(1603977300000+0300)\/", + "\/Date(1603978200000+0300)\/", + "\/Date(1603979100000+0300)\/", + "\/Date(1603980000000+0300)\/", + "\/Date(1603980900000+0300)\/", + "\/Date(1603981800000+0300)\/", + "\/Date(1603982700000+0300)\/", + "\/Date(1603983600000+0300)\/", + "\/Date(1603984500000+0300)\/", + "\/Date(1603985400000+0300)\/", + "\/Date(1603986300000+0300)\/", + "\/Date(1603987200000+0300)\/", + "\/Date(1603988100000+0300)\/", + "\/Date(1603989000000+0300)\/", + "\/Date(1603989900000+0300)\/", + "\/Date(1604127600000+0300)\/", + "\/Date(1604128500000+0300)\/", + "\/Date(1604129400000+0300)\/", + "\/Date(1604130300000+0300)\/", + "\/Date(1604131200000+0300)\/", + "\/Date(1604132100000+0300)\/", + "\/Date(1604133000000+0300)\/", + "\/Date(1604133900000+0300)\/", + "\/Date(1604134800000+0300)\/", + "\/Date(1604135700000+0300)\/", + "\/Date(1604136600000+0300)\/", + "\/Date(1604137500000+0300)\/", + "\/Date(1604138400000+0300)\/", + "\/Date(1604139300000+0300)\/", + "\/Date(1604140200000+0300)\/", + "\/Date(1604141100000+0300)\/", + "\/Date(1604239200000+0300)\/", + "\/Date(1604240100000+0300)\/", + "\/Date(1604241000000+0300)\/", + "\/Date(1604241900000+0300)\/", + "\/Date(1604242800000+0300)\/", + "\/Date(1604243700000+0300)\/", + "\/Date(1604244600000+0300)\/", + "\/Date(1604245500000+0300)\/", + "\/Date(1604246400000+0300)\/", + "\/Date(1604247300000+0300)\/", + "\/Date(1604248200000+0300)\/", + "\/Date(1604249100000+0300)\/", + "\/Date(1604250000000+0300)\/", + "\/Date(1604250900000+0300)\/", + "\/Date(1604251800000+0300)\/", + "\/Date(1604252700000+0300)\/", + "\/Date(1604325600000+0300)\/", + "\/Date(1604326500000+0300)\/", + "\/Date(1604327400000+0300)\/", + "\/Date(1604328300000+0300)\/", + "\/Date(1604329200000+0300)\/", + "\/Date(1604330100000+0300)\/", + "\/Date(1604331000000+0300)\/", + "\/Date(1604331900000+0300)\/", + "\/Date(1604332800000+0300)\/", + "\/Date(1604333700000+0300)\/", + "\/Date(1604334600000+0300)\/", + "\/Date(1604335500000+0300)\/", + "\/Date(1604336400000+0300)\/", + "\/Date(1604337300000+0300)\/", + "\/Date(1604338200000+0300)\/", + "\/Date(1604339100000+0300)\/", + "\/Date(1604412000000+0300)\/", + "\/Date(1604412900000+0300)\/", + "\/Date(1604413800000+0300)\/", + "\/Date(1604414700000+0300)\/", + "\/Date(1604415600000+0300)\/", + "\/Date(1604416500000+0300)\/", + "\/Date(1604417400000+0300)\/", + "\/Date(1604418300000+0300)\/", + "\/Date(1604419200000+0300)\/", + "\/Date(1604420100000+0300)\/", + "\/Date(1604421000000+0300)\/", + "\/Date(1604421900000+0300)\/", + "\/Date(1604422800000+0300)\/", + "\/Date(1604423700000+0300)\/", + "\/Date(1604424600000+0300)\/", + "\/Date(1604425500000+0300)\/", + "\/Date(1604498400000+0300)\/", + "\/Date(1604499300000+0300)\/", + "\/Date(1604500200000+0300)\/", + "\/Date(1604501100000+0300)\/", + "\/Date(1604502000000+0300)\/", + "\/Date(1604502900000+0300)\/", + "\/Date(1604503800000+0300)\/", + "\/Date(1604504700000+0300)\/", + "\/Date(1604505600000+0300)\/", + "\/Date(1604506500000+0300)\/", + "\/Date(1604507400000+0300)\/", + "\/Date(1604508300000+0300)\/", + "\/Date(1604509200000+0300)\/", + "\/Date(1604510100000+0300)\/", + "\/Date(1604511000000+0300)\/", + "\/Date(1604511900000+0300)\/", + "\/Date(1604581200000+0300)\/", + "\/Date(1604582100000+0300)\/", + "\/Date(1604583000000+0300)\/", + "\/Date(1604583900000+0300)\/", + "\/Date(1604584800000+0300)\/", + "\/Date(1604585700000+0300)\/", + "\/Date(1604586600000+0300)\/", + "\/Date(1604587500000+0300)\/", + "\/Date(1604588400000+0300)\/", + "\/Date(1604589300000+0300)\/", + "\/Date(1604590200000+0300)\/", + "\/Date(1604591100000+0300)\/", + "\/Date(1604592000000+0300)\/", + "\/Date(1604592900000+0300)\/", + "\/Date(1604593800000+0300)\/", + "\/Date(1604594700000+0300)\/", + "\/Date(1604732400000+0300)\/", + "\/Date(1604733300000+0300)\/", + "\/Date(1604734200000+0300)\/", + "\/Date(1604735100000+0300)\/", + "\/Date(1604736000000+0300)\/", + "\/Date(1604736900000+0300)\/", + "\/Date(1604737800000+0300)\/", + "\/Date(1604738700000+0300)\/", + "\/Date(1604739600000+0300)\/", + "\/Date(1604740500000+0300)\/", + "\/Date(1604741400000+0300)\/", + "\/Date(1604742300000+0300)\/", + "\/Date(1604743200000+0300)\/", + "\/Date(1604744100000+0300)\/", + "\/Date(1604745000000+0300)\/", + "\/Date(1604745900000+0300)\/", + "\/Date(1604844000000+0300)\/", + "\/Date(1604844900000+0300)\/", + "\/Date(1604845800000+0300)\/", + "\/Date(1604846700000+0300)\/", + "\/Date(1604847600000+0300)\/", + "\/Date(1604848500000+0300)\/", + "\/Date(1604849400000+0300)\/", + "\/Date(1604850300000+0300)\/", + "\/Date(1604851200000+0300)\/", + "\/Date(1604852100000+0300)\/", + "\/Date(1604853000000+0300)\/", + "\/Date(1604853900000+0300)\/", + "\/Date(1604854800000+0300)\/", + "\/Date(1604855700000+0300)\/", + "\/Date(1604856600000+0300)\/", + "\/Date(1604857500000+0300)\/", + "\/Date(1604930400000+0300)\/", + "\/Date(1604931300000+0300)\/", + "\/Date(1604932200000+0300)\/", + "\/Date(1604933100000+0300)\/", + "\/Date(1604934000000+0300)\/", + "\/Date(1604934900000+0300)\/", + "\/Date(1604935800000+0300)\/", + "\/Date(1604936700000+0300)\/", + "\/Date(1604937600000+0300)\/", + "\/Date(1604938500000+0300)\/", + "\/Date(1604939400000+0300)\/", + "\/Date(1604940300000+0300)\/", + "\/Date(1604941200000+0300)\/", + "\/Date(1604942100000+0300)\/", + "\/Date(1604943000000+0300)\/", + "\/Date(1604943900000+0300)\/", + "\/Date(1605016800000+0300)\/", + "\/Date(1605017700000+0300)\/", + "\/Date(1605018600000+0300)\/", + "\/Date(1605019500000+0300)\/", + "\/Date(1605020400000+0300)\/", + "\/Date(1605021300000+0300)\/", + "\/Date(1605022200000+0300)\/", + "\/Date(1605023100000+0300)\/", + "\/Date(1605024000000+0300)\/", + "\/Date(1605024900000+0300)\/", + "\/Date(1605025800000+0300)\/", + "\/Date(1605026700000+0300)\/", + "\/Date(1605027600000+0300)\/", + "\/Date(1605028500000+0300)\/", + "\/Date(1605029400000+0300)\/", + "\/Date(1605030300000+0300)\/", + "\/Date(1605103200000+0300)\/", + "\/Date(1605104100000+0300)\/", + "\/Date(1605105000000+0300)\/", + "\/Date(1605105900000+0300)\/", + "\/Date(1605106800000+0300)\/", + "\/Date(1605107700000+0300)\/", + "\/Date(1605108600000+0300)\/", + "\/Date(1605109500000+0300)\/", + "\/Date(1605110400000+0300)\/", + "\/Date(1605111300000+0300)\/", + "\/Date(1605112200000+0300)\/", + "\/Date(1605113100000+0300)\/", + "\/Date(1605114000000+0300)\/", + "\/Date(1605114900000+0300)\/", + "\/Date(1605115800000+0300)\/", + "\/Date(1605116700000+0300)\/", + "\/Date(1605186000000+0300)\/", + "\/Date(1605186900000+0300)\/", + "\/Date(1605187800000+0300)\/", + "\/Date(1605188700000+0300)\/", + "\/Date(1605189600000+0300)\/", + "\/Date(1605190500000+0300)\/", + "\/Date(1605191400000+0300)\/", + "\/Date(1605192300000+0300)\/", + "\/Date(1605193200000+0300)\/", + "\/Date(1605194100000+0300)\/", + "\/Date(1605195000000+0300)\/", + "\/Date(1605195900000+0300)\/", + "\/Date(1605196800000+0300)\/", + "\/Date(1605197700000+0300)\/", + "\/Date(1605198600000+0300)\/", + "\/Date(1605199500000+0300)\/", + "\/Date(1605337200000+0300)\/", + "\/Date(1605338100000+0300)\/", + "\/Date(1605339000000+0300)\/", + "\/Date(1605339900000+0300)\/", + "\/Date(1605340800000+0300)\/", + "\/Date(1605341700000+0300)\/", + "\/Date(1605342600000+0300)\/", + "\/Date(1605343500000+0300)\/", + "\/Date(1605344400000+0300)\/", + "\/Date(1605345300000+0300)\/", + "\/Date(1605346200000+0300)\/", + "\/Date(1605347100000+0300)\/", + "\/Date(1605348000000+0300)\/", + "\/Date(1605348900000+0300)\/", + "\/Date(1605349800000+0300)\/", + "\/Date(1605350700000+0300)\/", + "\/Date(1605448800000+0300)\/", + "\/Date(1605449700000+0300)\/", + "\/Date(1605450600000+0300)\/", + "\/Date(1605451500000+0300)\/", + "\/Date(1605452400000+0300)\/", + "\/Date(1605453300000+0300)\/", + "\/Date(1605454200000+0300)\/", + "\/Date(1605455100000+0300)\/", + "\/Date(1605456000000+0300)\/", + "\/Date(1605456900000+0300)\/", + "\/Date(1605457800000+0300)\/", + "\/Date(1605458700000+0300)\/", + "\/Date(1605459600000+0300)\/", + "\/Date(1605460500000+0300)\/", + "\/Date(1605461400000+0300)\/", + "\/Date(1605462300000+0300)\/", + "\/Date(1605535200000+0300)\/", + "\/Date(1605536100000+0300)\/", + "\/Date(1605537000000+0300)\/", + "\/Date(1605537900000+0300)\/", + "\/Date(1605538800000+0300)\/", + "\/Date(1605539700000+0300)\/", + "\/Date(1605540600000+0300)\/", + "\/Date(1605541500000+0300)\/", + "\/Date(1605542400000+0300)\/", + "\/Date(1605543300000+0300)\/", + "\/Date(1605544200000+0300)\/", + "\/Date(1605545100000+0300)\/", + "\/Date(1605546000000+0300)\/", + "\/Date(1605546900000+0300)\/", + "\/Date(1605547800000+0300)\/", + "\/Date(1605548700000+0300)\/", + "\/Date(1605621600000+0300)\/", + "\/Date(1605622500000+0300)\/", + "\/Date(1605623400000+0300)\/", + "\/Date(1605624300000+0300)\/", + "\/Date(1605625200000+0300)\/", + "\/Date(1605626100000+0300)\/", + "\/Date(1605627000000+0300)\/", + "\/Date(1605627900000+0300)\/", + "\/Date(1605628800000+0300)\/", + "\/Date(1605629700000+0300)\/", + "\/Date(1605630600000+0300)\/", + "\/Date(1605631500000+0300)\/", + "\/Date(1605632400000+0300)\/", + "\/Date(1605633300000+0300)\/", + "\/Date(1605634200000+0300)\/", + "\/Date(1605635100000+0300)\/", + "\/Date(1605708000000+0300)\/", + "\/Date(1605708900000+0300)\/", + "\/Date(1605709800000+0300)\/", + "\/Date(1605710700000+0300)\/", + "\/Date(1605711600000+0300)\/", + "\/Date(1605712500000+0300)\/", + "\/Date(1605713400000+0300)\/", + "\/Date(1605714300000+0300)\/", + "\/Date(1605715200000+0300)\/", + "\/Date(1605716100000+0300)\/", + "\/Date(1605717000000+0300)\/", + "\/Date(1605717900000+0300)\/", + "\/Date(1605718800000+0300)\/", + "\/Date(1605719700000+0300)\/", + "\/Date(1605720600000+0300)\/", + "\/Date(1605721500000+0300)\/", + "\/Date(1605790800000+0300)\/", + "\/Date(1605791700000+0300)\/", + "\/Date(1605792600000+0300)\/", + "\/Date(1605793500000+0300)\/", + "\/Date(1605794400000+0300)\/", + "\/Date(1605795300000+0300)\/", + "\/Date(1605796200000+0300)\/", + "\/Date(1605797100000+0300)\/", + "\/Date(1605798000000+0300)\/", + "\/Date(1605798900000+0300)\/", + "\/Date(1605799800000+0300)\/", + "\/Date(1605800700000+0300)\/", + "\/Date(1605801600000+0300)\/", + "\/Date(1605802500000+0300)\/", + "\/Date(1605803400000+0300)\/", + "\/Date(1605804300000+0300)\/", + "\/Date(1605942000000+0300)\/", + "\/Date(1605942900000+0300)\/", + "\/Date(1605943800000+0300)\/", + "\/Date(1605944700000+0300)\/", + "\/Date(1605945600000+0300)\/", + "\/Date(1605946500000+0300)\/", + "\/Date(1605947400000+0300)\/", + "\/Date(1605948300000+0300)\/", + "\/Date(1605949200000+0300)\/", + "\/Date(1605950100000+0300)\/", + "\/Date(1605951000000+0300)\/", + "\/Date(1605951900000+0300)\/", + "\/Date(1605952800000+0300)\/", + "\/Date(1605953700000+0300)\/", + "\/Date(1605954600000+0300)\/", + "\/Date(1605955500000+0300)\/", + "\/Date(1606053600000+0300)\/", + "\/Date(1606054500000+0300)\/", + "\/Date(1606055400000+0300)\/", + "\/Date(1606056300000+0300)\/", + "\/Date(1606057200000+0300)\/", + "\/Date(1606058100000+0300)\/", + "\/Date(1606059000000+0300)\/", + "\/Date(1606059900000+0300)\/", + "\/Date(1606060800000+0300)\/", + "\/Date(1606061700000+0300)\/", + "\/Date(1606062600000+0300)\/", + "\/Date(1606063500000+0300)\/", + "\/Date(1606064400000+0300)\/", + "\/Date(1606065300000+0300)\/", + "\/Date(1606066200000+0300)\/", + "\/Date(1606067100000+0300)\/", + "\/Date(1606140000000+0300)\/", + "\/Date(1606140900000+0300)\/", + "\/Date(1606141800000+0300)\/", + "\/Date(1606142700000+0300)\/", + "\/Date(1606143600000+0300)\/", + "\/Date(1606144500000+0300)\/", + "\/Date(1606145400000+0300)\/", + "\/Date(1606146300000+0300)\/", + "\/Date(1606147200000+0300)\/", + "\/Date(1606148100000+0300)\/", + "\/Date(1606149000000+0300)\/", + "\/Date(1606149900000+0300)\/", + "\/Date(1606150800000+0300)\/", + "\/Date(1606151700000+0300)\/", + "\/Date(1606152600000+0300)\/", + "\/Date(1606153500000+0300)\/", + "\/Date(1606226400000+0300)\/", + "\/Date(1606227300000+0300)\/", + "\/Date(1606228200000+0300)\/", + "\/Date(1606229100000+0300)\/", + "\/Date(1606230000000+0300)\/", + "\/Date(1606230900000+0300)\/", + "\/Date(1606231800000+0300)\/", + "\/Date(1606232700000+0300)\/", + "\/Date(1606233600000+0300)\/", + "\/Date(1606234500000+0300)\/", + "\/Date(1606235400000+0300)\/", + "\/Date(1606236300000+0300)\/", + "\/Date(1606237200000+0300)\/", + "\/Date(1606238100000+0300)\/", + "\/Date(1606239000000+0300)\/", + "\/Date(1606239900000+0300)\/", + "\/Date(1606312800000+0300)\/", + "\/Date(1606313700000+0300)\/", + "\/Date(1606314600000+0300)\/", + "\/Date(1606315500000+0300)\/", + "\/Date(1606316400000+0300)\/", + "\/Date(1606317300000+0300)\/", + "\/Date(1606318200000+0300)\/", + "\/Date(1606319100000+0300)\/", + "\/Date(1606320000000+0300)\/", + "\/Date(1606320900000+0300)\/", + "\/Date(1606321800000+0300)\/", + "\/Date(1606322700000+0300)\/", + "\/Date(1606323600000+0300)\/", + "\/Date(1606324500000+0300)\/", + "\/Date(1606325400000+0300)\/", + "\/Date(1606326300000+0300)\/", + "\/Date(1606395600000+0300)\/", + "\/Date(1606396500000+0300)\/", + "\/Date(1606397400000+0300)\/", + "\/Date(1606398300000+0300)\/", + "\/Date(1606399200000+0300)\/", + "\/Date(1606400100000+0300)\/", + "\/Date(1606401000000+0300)\/", + "\/Date(1606401900000+0300)\/", + "\/Date(1606402800000+0300)\/", + "\/Date(1606403700000+0300)\/", + "\/Date(1606404600000+0300)\/", + "\/Date(1606405500000+0300)\/", + "\/Date(1606406400000+0300)\/", + "\/Date(1606407300000+0300)\/", + "\/Date(1606408200000+0300)\/", + "\/Date(1606409100000+0300)\/", + "\/Date(1606546800000+0300)\/", + "\/Date(1606547700000+0300)\/", + "\/Date(1606548600000+0300)\/", + "\/Date(1606549500000+0300)\/", + "\/Date(1606550400000+0300)\/", + "\/Date(1606551300000+0300)\/", + "\/Date(1606552200000+0300)\/", + "\/Date(1606553100000+0300)\/", + "\/Date(1606554000000+0300)\/", + "\/Date(1606554900000+0300)\/", + "\/Date(1606555800000+0300)\/", + "\/Date(1606556700000+0300)\/", + "\/Date(1606557600000+0300)\/", + "\/Date(1606558500000+0300)\/", + "\/Date(1606559400000+0300)\/", + "\/Date(1606560300000+0300)\/", + "\/Date(1606658400000+0300)\/", + "\/Date(1606659300000+0300)\/", + "\/Date(1606660200000+0300)\/", + "\/Date(1606661100000+0300)\/", + "\/Date(1606662000000+0300)\/", + "\/Date(1606662900000+0300)\/", + "\/Date(1606663800000+0300)\/", + "\/Date(1606664700000+0300)\/", + "\/Date(1606665600000+0300)\/", + "\/Date(1606666500000+0300)\/", + "\/Date(1606667400000+0300)\/", + "\/Date(1606668300000+0300)\/", + "\/Date(1606669200000+0300)\/", + "\/Date(1606670100000+0300)\/", + "\/Date(1606671000000+0300)\/", + "\/Date(1606671900000+0300)\/", + "\/Date(1606744800000+0300)\/", + "\/Date(1606745700000+0300)\/", + "\/Date(1606746600000+0300)\/", + "\/Date(1606747500000+0300)\/", + "\/Date(1606748400000+0300)\/", + "\/Date(1606749300000+0300)\/", + "\/Date(1606750200000+0300)\/", + "\/Date(1606751100000+0300)\/", + "\/Date(1606752000000+0300)\/", + "\/Date(1606752900000+0300)\/", + "\/Date(1606753800000+0300)\/", + "\/Date(1606754700000+0300)\/", + "\/Date(1606755600000+0300)\/", + "\/Date(1606756500000+0300)\/", + "\/Date(1606757400000+0300)\/", + "\/Date(1606758300000+0300)\/", + "\/Date(1606831200000+0300)\/", + "\/Date(1606832100000+0300)\/", + "\/Date(1606833000000+0300)\/", + "\/Date(1606833900000+0300)\/", + "\/Date(1606834800000+0300)\/", + "\/Date(1606835700000+0300)\/", + "\/Date(1606836600000+0300)\/", + "\/Date(1606837500000+0300)\/", + "\/Date(1606838400000+0300)\/", + "\/Date(1606839300000+0300)\/", + "\/Date(1606840200000+0300)\/", + "\/Date(1606841100000+0300)\/", + "\/Date(1606842000000+0300)\/", + "\/Date(1606842900000+0300)\/", + "\/Date(1606843800000+0300)\/", + "\/Date(1606844700000+0300)\/", + "\/Date(1606917600000+0300)\/", + "\/Date(1606918500000+0300)\/", + "\/Date(1606919400000+0300)\/", + "\/Date(1606920300000+0300)\/", + "\/Date(1606921200000+0300)\/", + "\/Date(1606922100000+0300)\/", + "\/Date(1606923000000+0300)\/", + "\/Date(1606923900000+0300)\/", + "\/Date(1606924800000+0300)\/", + "\/Date(1606925700000+0300)\/", + "\/Date(1606926600000+0300)\/", + "\/Date(1606927500000+0300)\/", + "\/Date(1606928400000+0300)\/", + "\/Date(1606929300000+0300)\/", + "\/Date(1606930200000+0300)\/", + "\/Date(1606931100000+0300)\/", + "\/Date(1607000400000+0300)\/", + "\/Date(1607001300000+0300)\/", + "\/Date(1607002200000+0300)\/", + "\/Date(1607003100000+0300)\/", + "\/Date(1607004000000+0300)\/", + "\/Date(1607004900000+0300)\/", + "\/Date(1607005800000+0300)\/", + "\/Date(1607006700000+0300)\/", + "\/Date(1607007600000+0300)\/", + "\/Date(1607008500000+0300)\/", + "\/Date(1607009400000+0300)\/", + "\/Date(1607010300000+0300)\/", + "\/Date(1607011200000+0300)\/", + "\/Date(1607012100000+0300)\/", + "\/Date(1607013000000+0300)\/", + "\/Date(1607013900000+0300)\/", + "\/Date(1607151600000+0300)\/", + "\/Date(1607152500000+0300)\/", + "\/Date(1607153400000+0300)\/", + "\/Date(1607154300000+0300)\/", + "\/Date(1607155200000+0300)\/", + "\/Date(1607156100000+0300)\/", + "\/Date(1607157000000+0300)\/", + "\/Date(1607157900000+0300)\/", + "\/Date(1607158800000+0300)\/", + "\/Date(1607159700000+0300)\/", + "\/Date(1607160600000+0300)\/", + "\/Date(1607161500000+0300)\/", + "\/Date(1607162400000+0300)\/", + "\/Date(1607163300000+0300)\/", + "\/Date(1607164200000+0300)\/", + "\/Date(1607165100000+0300)\/", + "\/Date(1607263200000+0300)\/", + "\/Date(1607264100000+0300)\/", + "\/Date(1607265000000+0300)\/", + "\/Date(1607265900000+0300)\/", + "\/Date(1607266800000+0300)\/", + "\/Date(1607267700000+0300)\/", + "\/Date(1607268600000+0300)\/", + "\/Date(1607269500000+0300)\/", + "\/Date(1607270400000+0300)\/", + "\/Date(1607271300000+0300)\/", + "\/Date(1607272200000+0300)\/", + "\/Date(1607273100000+0300)\/", + "\/Date(1607274000000+0300)\/", + "\/Date(1607274900000+0300)\/", + "\/Date(1607275800000+0300)\/", + "\/Date(1607276700000+0300)\/", + "\/Date(1607349600000+0300)\/", + "\/Date(1607350500000+0300)\/", + "\/Date(1607351400000+0300)\/", + "\/Date(1607352300000+0300)\/", + "\/Date(1607353200000+0300)\/", + "\/Date(1607354100000+0300)\/", + "\/Date(1607355000000+0300)\/", + "\/Date(1607355900000+0300)\/", + "\/Date(1607356800000+0300)\/", + "\/Date(1607357700000+0300)\/", + "\/Date(1607358600000+0300)\/", + "\/Date(1607359500000+0300)\/", + "\/Date(1607360400000+0300)\/", + "\/Date(1607361300000+0300)\/", + "\/Date(1607362200000+0300)\/", + "\/Date(1607363100000+0300)\/", + "\/Date(1607436000000+0300)\/", + "\/Date(1607436900000+0300)\/", + "\/Date(1607437800000+0300)\/", + "\/Date(1607438700000+0300)\/", + "\/Date(1607439600000+0300)\/", + "\/Date(1607440500000+0300)\/", + "\/Date(1607441400000+0300)\/", + "\/Date(1607442300000+0300)\/", + "\/Date(1607443200000+0300)\/", + "\/Date(1607444100000+0300)\/", + "\/Date(1607445000000+0300)\/", + "\/Date(1607445900000+0300)\/", + "\/Date(1607446800000+0300)\/", + "\/Date(1607447700000+0300)\/", + "\/Date(1607448600000+0300)\/", + "\/Date(1607449500000+0300)\/", + "\/Date(1607522400000+0300)\/", + "\/Date(1607523300000+0300)\/", + "\/Date(1607524200000+0300)\/", + "\/Date(1607525100000+0300)\/", + "\/Date(1607526000000+0300)\/", + "\/Date(1607526900000+0300)\/", + "\/Date(1607527800000+0300)\/", + "\/Date(1607528700000+0300)\/", + "\/Date(1607529600000+0300)\/", + "\/Date(1607530500000+0300)\/", + "\/Date(1607531400000+0300)\/", + "\/Date(1607532300000+0300)\/", + "\/Date(1607533200000+0300)\/", + "\/Date(1607534100000+0300)\/", + "\/Date(1607535000000+0300)\/", + "\/Date(1607535900000+0300)\/", + "\/Date(1607605200000+0300)\/", + "\/Date(1607606100000+0300)\/", + "\/Date(1607607000000+0300)\/", + "\/Date(1607607900000+0300)\/", + "\/Date(1607608800000+0300)\/", + "\/Date(1607609700000+0300)\/", + "\/Date(1607610600000+0300)\/", + "\/Date(1607611500000+0300)\/", + "\/Date(1607612400000+0300)\/", + "\/Date(1607613300000+0300)\/", + "\/Date(1607614200000+0300)\/", + "\/Date(1607615100000+0300)\/", + "\/Date(1607616000000+0300)\/", + "\/Date(1607616900000+0300)\/", + "\/Date(1607617800000+0300)\/", + "\/Date(1607618700000+0300)\/", + "\/Date(1607756400000+0300)\/", + "\/Date(1607757300000+0300)\/", + "\/Date(1607758200000+0300)\/", + "\/Date(1607759100000+0300)\/", + "\/Date(1607760000000+0300)\/", + "\/Date(1607760900000+0300)\/", + "\/Date(1607761800000+0300)\/", + "\/Date(1607762700000+0300)\/", + "\/Date(1607763600000+0300)\/", + "\/Date(1607764500000+0300)\/", + "\/Date(1607765400000+0300)\/", + "\/Date(1607766300000+0300)\/", + "\/Date(1607767200000+0300)\/", + "\/Date(1607768100000+0300)\/", + "\/Date(1607769000000+0300)\/", + "\/Date(1607769900000+0300)\/", + "\/Date(1607868000000+0300)\/", + "\/Date(1607868900000+0300)\/", + "\/Date(1607869800000+0300)\/", + "\/Date(1607870700000+0300)\/", + "\/Date(1607871600000+0300)\/", + "\/Date(1607872500000+0300)\/", + "\/Date(1607873400000+0300)\/", + "\/Date(1607874300000+0300)\/", + "\/Date(1607875200000+0300)\/", + "\/Date(1607876100000+0300)\/", + "\/Date(1607877000000+0300)\/", + "\/Date(1607877900000+0300)\/", + "\/Date(1607878800000+0300)\/", + "\/Date(1607879700000+0300)\/", + "\/Date(1607880600000+0300)\/", + "\/Date(1607881500000+0300)\/", + "\/Date(1607954400000+0300)\/", + "\/Date(1607955300000+0300)\/", + "\/Date(1607956200000+0300)\/", + "\/Date(1607957100000+0300)\/", + "\/Date(1607958000000+0300)\/", + "\/Date(1607958900000+0300)\/", + "\/Date(1607959800000+0300)\/", + "\/Date(1607960700000+0300)\/", + "\/Date(1607961600000+0300)\/", + "\/Date(1607962500000+0300)\/", + "\/Date(1607963400000+0300)\/", + "\/Date(1607964300000+0300)\/", + "\/Date(1607965200000+0300)\/", + "\/Date(1607966100000+0300)\/", + "\/Date(1607967000000+0300)\/", + "\/Date(1607967900000+0300)\/", + "\/Date(1608040800000+0300)\/", + "\/Date(1608041700000+0300)\/", + "\/Date(1608042600000+0300)\/", + "\/Date(1608043500000+0300)\/", + "\/Date(1608044400000+0300)\/", + "\/Date(1608045300000+0300)\/", + "\/Date(1608046200000+0300)\/", + "\/Date(1608047100000+0300)\/", + "\/Date(1608048000000+0300)\/", + "\/Date(1608048900000+0300)\/", + "\/Date(1608049800000+0300)\/", + "\/Date(1608050700000+0300)\/", + "\/Date(1608051600000+0300)\/", + "\/Date(1608052500000+0300)\/", + "\/Date(1608053400000+0300)\/", + "\/Date(1608054300000+0300)\/", + "\/Date(1608127200000+0300)\/", + "\/Date(1608128100000+0300)\/", + "\/Date(1608129000000+0300)\/", + "\/Date(1608129900000+0300)\/", + "\/Date(1608130800000+0300)\/", + "\/Date(1608131700000+0300)\/", + "\/Date(1608132600000+0300)\/", + "\/Date(1608133500000+0300)\/", + "\/Date(1608134400000+0300)\/", + "\/Date(1608135300000+0300)\/", + "\/Date(1608136200000+0300)\/", + "\/Date(1608137100000+0300)\/", + "\/Date(1608138000000+0300)\/", + "\/Date(1608138900000+0300)\/", + "\/Date(1608139800000+0300)\/", + "\/Date(1608140700000+0300)\/", + "\/Date(1608210000000+0300)\/", + "\/Date(1608210900000+0300)\/", + "\/Date(1608211800000+0300)\/", + "\/Date(1608212700000+0300)\/", + "\/Date(1608213600000+0300)\/", + "\/Date(1608214500000+0300)\/", + "\/Date(1608215400000+0300)\/", + "\/Date(1608216300000+0300)\/", + "\/Date(1608217200000+0300)\/", + "\/Date(1608218100000+0300)\/", + "\/Date(1608219000000+0300)\/", + "\/Date(1608219900000+0300)\/", + "\/Date(1608220800000+0300)\/", + "\/Date(1608221700000+0300)\/", + "\/Date(1608222600000+0300)\/", + "\/Date(1608223500000+0300)\/", + "\/Date(1608361200000+0300)\/", + "\/Date(1608362100000+0300)\/", + "\/Date(1608363000000+0300)\/", + "\/Date(1608363900000+0300)\/", + "\/Date(1608364800000+0300)\/", + "\/Date(1608365700000+0300)\/", + "\/Date(1608366600000+0300)\/", + "\/Date(1608367500000+0300)\/", + "\/Date(1608368400000+0300)\/", + "\/Date(1608369300000+0300)\/", + "\/Date(1608370200000+0300)\/", + "\/Date(1608371100000+0300)\/", + "\/Date(1608372000000+0300)\/", + "\/Date(1608372900000+0300)\/", + "\/Date(1608373800000+0300)\/", + "\/Date(1608374700000+0300)\/", + "\/Date(1608472800000+0300)\/", + "\/Date(1608473700000+0300)\/", + "\/Date(1608474600000+0300)\/", + "\/Date(1608475500000+0300)\/", + "\/Date(1608476400000+0300)\/", + "\/Date(1608477300000+0300)\/", + "\/Date(1608478200000+0300)\/", + "\/Date(1608479100000+0300)\/", + "\/Date(1608480000000+0300)\/", + "\/Date(1608480900000+0300)\/", + "\/Date(1608481800000+0300)\/", + "\/Date(1608482700000+0300)\/", + "\/Date(1608483600000+0300)\/", + "\/Date(1608484500000+0300)\/", + "\/Date(1608485400000+0300)\/", + "\/Date(1608486300000+0300)\/", + "\/Date(1608559200000+0300)\/", + "\/Date(1608560100000+0300)\/", + "\/Date(1608561000000+0300)\/", + "\/Date(1608561900000+0300)\/", + "\/Date(1608562800000+0300)\/", + "\/Date(1608563700000+0300)\/", + "\/Date(1608564600000+0300)\/", + "\/Date(1608565500000+0300)\/", + "\/Date(1608566400000+0300)\/", + "\/Date(1608567300000+0300)\/", + "\/Date(1608568200000+0300)\/", + "\/Date(1608569100000+0300)\/", + "\/Date(1608570000000+0300)\/", + "\/Date(1608570900000+0300)\/", + "\/Date(1608571800000+0300)\/", + "\/Date(1608572700000+0300)\/", + "\/Date(1608645600000+0300)\/", + "\/Date(1608646500000+0300)\/", + "\/Date(1608647400000+0300)\/", + "\/Date(1608648300000+0300)\/", + "\/Date(1608649200000+0300)\/", + "\/Date(1608650100000+0300)\/", + "\/Date(1608651000000+0300)\/", + "\/Date(1608651900000+0300)\/", + "\/Date(1608652800000+0300)\/", + "\/Date(1608653700000+0300)\/", + "\/Date(1608654600000+0300)\/", + "\/Date(1608655500000+0300)\/", + "\/Date(1608656400000+0300)\/", + "\/Date(1608657300000+0300)\/", + "\/Date(1608658200000+0300)\/", + "\/Date(1608659100000+0300)\/", + "\/Date(1608732000000+0300)\/", + "\/Date(1608732900000+0300)\/", + "\/Date(1608733800000+0300)\/", + "\/Date(1608734700000+0300)\/", + "\/Date(1608735600000+0300)\/", + "\/Date(1608736500000+0300)\/", + "\/Date(1608737400000+0300)\/", + "\/Date(1608738300000+0300)\/", + "\/Date(1608739200000+0300)\/", + "\/Date(1608740100000+0300)\/", + "\/Date(1608741000000+0300)\/", + "\/Date(1608741900000+0300)\/", + "\/Date(1608742800000+0300)\/", + "\/Date(1608743700000+0300)\/", + "\/Date(1608744600000+0300)\/", + "\/Date(1608745500000+0300)\/", + "\/Date(1608814800000+0300)\/", + "\/Date(1608815700000+0300)\/", + "\/Date(1608816600000+0300)\/", + "\/Date(1608817500000+0300)\/", + "\/Date(1608818400000+0300)\/", + "\/Date(1608819300000+0300)\/", + "\/Date(1608820200000+0300)\/", + "\/Date(1608821100000+0300)\/", + "\/Date(1608822000000+0300)\/", + "\/Date(1608822900000+0300)\/", + "\/Date(1608823800000+0300)\/", + "\/Date(1608824700000+0300)\/", + "\/Date(1608825600000+0300)\/", + "\/Date(1608826500000+0300)\/", + "\/Date(1608827400000+0300)\/", + "\/Date(1608828300000+0300)\/", + "\/Date(1608966000000+0300)\/", + "\/Date(1608966900000+0300)\/", + "\/Date(1608967800000+0300)\/", + "\/Date(1608968700000+0300)\/", + "\/Date(1608969600000+0300)\/", + "\/Date(1608970500000+0300)\/", + "\/Date(1608971400000+0300)\/", + "\/Date(1608972300000+0300)\/", + "\/Date(1608973200000+0300)\/", + "\/Date(1608974100000+0300)\/", + "\/Date(1608975000000+0300)\/", + "\/Date(1608975900000+0300)\/", + "\/Date(1608976800000+0300)\/", + "\/Date(1608977700000+0300)\/", + "\/Date(1608978600000+0300)\/", + "\/Date(1608979500000+0300)\/", + "\/Date(1609077600000+0300)\/", + "\/Date(1609078500000+0300)\/", + "\/Date(1609079400000+0300)\/", + "\/Date(1609080300000+0300)\/", + "\/Date(1609081200000+0300)\/", + "\/Date(1609082100000+0300)\/", + "\/Date(1609083000000+0300)\/", + "\/Date(1609083900000+0300)\/", + "\/Date(1609084800000+0300)\/", + "\/Date(1609085700000+0300)\/", + "\/Date(1609086600000+0300)\/", + "\/Date(1609087500000+0300)\/", + "\/Date(1609088400000+0300)\/", + "\/Date(1609089300000+0300)\/", + "\/Date(1609090200000+0300)\/", + "\/Date(1609091100000+0300)\/", + "\/Date(1609164000000+0300)\/", + "\/Date(1609164900000+0300)\/", + "\/Date(1609165800000+0300)\/", + "\/Date(1609166700000+0300)\/", + "\/Date(1609167600000+0300)\/", + "\/Date(1609168500000+0300)\/", + "\/Date(1609169400000+0300)\/", + "\/Date(1609170300000+0300)\/", + "\/Date(1609171200000+0300)\/", + "\/Date(1609172100000+0300)\/", + "\/Date(1609173000000+0300)\/", + "\/Date(1609173900000+0300)\/", + "\/Date(1609174800000+0300)\/", + "\/Date(1609175700000+0300)\/", + "\/Date(1609176600000+0300)\/", + "\/Date(1609177500000+0300)\/", + "\/Date(1609250400000+0300)\/", + "\/Date(1609251300000+0300)\/", + "\/Date(1609252200000+0300)\/", + "\/Date(1609253100000+0300)\/", + "\/Date(1609254000000+0300)\/", + "\/Date(1609254900000+0300)\/", + "\/Date(1609255800000+0300)\/", + "\/Date(1609256700000+0300)\/", + "\/Date(1609257600000+0300)\/", + "\/Date(1609258500000+0300)\/", + "\/Date(1609259400000+0300)\/", + "\/Date(1609260300000+0300)\/", + "\/Date(1609261200000+0300)\/", + "\/Date(1609262100000+0300)\/", + "\/Date(1609263000000+0300)\/", + "\/Date(1609263900000+0300)\/", + "\/Date(1609336800000+0300)\/", + "\/Date(1609337700000+0300)\/", + "\/Date(1609338600000+0300)\/", + "\/Date(1609339500000+0300)\/", + "\/Date(1609340400000+0300)\/", + "\/Date(1609341300000+0300)\/", + "\/Date(1609342200000+0300)\/", + "\/Date(1609343100000+0300)\/", + "\/Date(1609344000000+0300)\/", + "\/Date(1609344900000+0300)\/", + "\/Date(1609345800000+0300)\/", + "\/Date(1609346700000+0300)\/", + "\/Date(1609347600000+0300)\/", + "\/Date(1609348500000+0300)\/", + "\/Date(1609349400000+0300)\/", + "\/Date(1609350300000+0300)\/", + "\/Date(1609419600000+0300)\/", + "\/Date(1609420500000+0300)\/", + "\/Date(1609421400000+0300)\/", + "\/Date(1609422300000+0300)\/", + "\/Date(1609423200000+0300)\/", + "\/Date(1609424100000+0300)\/", + "\/Date(1609425000000+0300)\/", + "\/Date(1609425900000+0300)\/", + "\/Date(1609426800000+0300)\/", + "\/Date(1609427700000+0300)\/", + "\/Date(1609428600000+0300)\/", + "\/Date(1609429500000+0300)\/", + "\/Date(1609430400000+0300)\/", + "\/Date(1609431300000+0300)\/", + "\/Date(1609432200000+0300)\/", + "\/Date(1609433100000+0300)\/" ] } \ No newline at end of file diff --git a/lib/config/config.dart b/lib/config/config.dart index 9824883e..cd53d564 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -15,6 +15,12 @@ const GET_CLINICS_LIST_URL = "Services/lists.svc/REST/GetClinicCentralized"; //URL to get doctors list const GET_DOCTORS_LIST_URL = "Services/Doctors.svc/REST/SearchDoctorsByTime"; +//URL to get doctor profile +const GET_DOCTOR_PROFILE = "Services/Doctors.svc/REST/GetDocProfiles"; + +//URL to get doctor free slots +const GET_DOCTOR_FREE_SLOTS = "Services/Doctors.svc/REST/GetDoctorFreeSlots"; + class AppGlobal { static var context; @@ -22,9 +28,8 @@ class AppGlobal { Request getPublicRequest() { Request request = new Request(); - request.VersionID = 5.3; //3.6; + request.VersionID = 5.5; //3.6; request.Channel = 3; -// request.LanguageID = await sharedPref.getString(APP_LANGUAGE); request.IPAdress = "10.20.10.20"; request.generalid = 'Cs2020@2016\$2958'; request.PatientOutSA = 0; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 3fc65bf2..87fe4cf9 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -14,6 +14,7 @@ const Map> localizedValues = { 'bookAppo': {'en': 'Book Appointment', 'ar': 'حجز موعد'}, 'searchBy': {'en': 'Search By:', 'ar': 'البحث عن طريق:'}, 'clinic': {'en': 'Clinic', 'ar': 'العيادة'}, + 'hospital': {'en': 'Hospital', 'ar': 'المستشفى'}, 'name': {'en': 'Name', 'ar': 'الإسم'}, 'doctor': {'en': 'Doctor', 'ar': 'الطبيب'}, 'clinicName': {'en': 'Clinic Name', 'ar': 'اسم العيادة'}, @@ -27,7 +28,7 @@ const Map> localizedValues = { 'appoInfo': {'en': 'Appointment Information', 'ar': 'معلومات الموعد'}, 'availableAppo': {'en': 'Available Appointments', 'ar': 'المواعيد المتاحة'}, 'gender': {'en': 'Gender', 'ar': 'الجنس'}, - 'nationality': {'en': 'nationality', 'ar': 'الجنسية'}, + 'nationality': {'en': 'Nationality', 'ar': 'الجنسية'}, 'docQualifications': {'en': 'Doctor Qualifications', 'ar': 'مؤهلات الطبيب'}, 'confirmAppoHeading': {'en': 'Kindly confirm your Appointment', 'ar': 'يرجى تأكيد موعدك'}, 'patientInfo': {'en': 'Patient Information', 'ar': 'معلومات المريض'}, @@ -40,6 +41,8 @@ const Map> localizedValues = { 'confirmLater': {'en': 'Confirm Later', 'ar': 'تأكيد لاحقا'}, 'todoList': {'en': 'Todo List', 'ar': 'مهامي'}, 'appoActions': {'en': 'Appointment Actions', 'ar': 'إجراءات الموعد'}, + 'date': {'en': 'Date', 'ar': 'التاريخ'}, + 'time': {'en': 'Time', 'ar': 'الوقت'}, }; diff --git a/lib/models/Appointments/DoctorListResponse.dart b/lib/models/Appointments/DoctorListResponse.dart new file mode 100644 index 00000000..0d7f7bb5 --- /dev/null +++ b/lib/models/Appointments/DoctorListResponse.dart @@ -0,0 +1,168 @@ +class DoctorList { + int clinicID; + String clinicName; + String doctorTitle; + int iD; + String name; + int projectID; + String projectName; + int actualDoctorRate; + int clinicRoomNo; + Null date; + Null dayName; + int doctorID; + String doctorImageURL; + Null doctorProfile; + Null doctorProfileInfo; + int doctorRate; + int gender; + String genderDescription; + bool isAppointmentAllowed; + bool isDoctorAllowVedioCall; + bool isDoctorDummy; + bool isLiveCare; + String latitude; + String longitude; + String nationalityFlagURL; + String nationalityID; + String nationalityName; + Null nearestFreeSlot; + int noOfPatientsRate; + Null originalClinicID; + int personRate; + int projectDistanceInKiloMeters; + String qR; + Null qRString; + int rateNumber; + Null serviceID; + String setupID; + List speciality; + Null workingHours; + + DoctorList( + {this.clinicID, + this.clinicName, + this.doctorTitle, + this.iD, + this.name, + this.projectID, + this.projectName, + this.actualDoctorRate, + this.clinicRoomNo, + this.date, + this.dayName, + this.doctorID, + this.doctorImageURL, + this.doctorProfile, + this.doctorProfileInfo, + this.doctorRate, + this.gender, + this.genderDescription, + this.isAppointmentAllowed, + this.isDoctorAllowVedioCall, + this.isDoctorDummy, + this.isLiveCare, + this.latitude, + this.longitude, + this.nationalityFlagURL, + this.nationalityID, + this.nationalityName, + this.nearestFreeSlot, + this.noOfPatientsRate, + this.originalClinicID, + this.personRate, + this.projectDistanceInKiloMeters, + this.qR, + this.qRString, + this.rateNumber, + this.serviceID, + this.setupID, + this.speciality, + this.workingHours}); + + DoctorList.fromJson(Map json) { + clinicID = json['ClinicID']; + clinicName = json['ClinicName']; + doctorTitle = json['DoctorTitle']; + iD = json['ID']; + name = json['Name']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + actualDoctorRate = json['ActualDoctorRate']; + clinicRoomNo = json['ClinicRoomNo']; + date = json['Date']; + dayName = json['DayName']; + doctorID = json['DoctorID']; + doctorImageURL = json['DoctorImageURL']; + doctorProfile = json['DoctorProfile']; + doctorProfileInfo = json['DoctorProfileInfo']; + doctorRate = json['DoctorRate']; + gender = json['Gender']; + genderDescription = json['GenderDescription']; + isAppointmentAllowed = json['IsAppointmentAllowed']; + isDoctorAllowVedioCall = json['IsDoctorAllowVedioCall']; + isDoctorDummy = json['IsDoctorDummy']; + isLiveCare = json['IsLiveCare']; + latitude = json['Latitude']; + longitude = json['Longitude']; + nationalityFlagURL = json['NationalityFlagURL']; + nationalityID = json['NationalityID']; + nationalityName = json['NationalityName']; + nearestFreeSlot = json['NearestFreeSlot']; + noOfPatientsRate = json['NoOfPatientsRate']; + originalClinicID = json['OriginalClinicID']; + personRate = json['PersonRate']; + projectDistanceInKiloMeters = json['ProjectDistanceInKiloMeters']; + qR = json['QR']; + qRString = json['QRString']; + rateNumber = json['RateNumber']; + serviceID = json['ServiceID']; + setupID = json['SetupID']; + speciality = json['Speciality'].cast(); + workingHours = json['WorkingHours']; + } + + Map toJson() { + final Map data = new Map(); + data['ClinicID'] = this.clinicID; + data['ClinicName'] = this.clinicName; + data['DoctorTitle'] = this.doctorTitle; + data['ID'] = this.iD; + data['Name'] = this.name; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['ActualDoctorRate'] = this.actualDoctorRate; + data['ClinicRoomNo'] = this.clinicRoomNo; + data['Date'] = this.date; + data['DayName'] = this.dayName; + data['DoctorID'] = this.doctorID; + data['DoctorImageURL'] = this.doctorImageURL; + data['DoctorProfile'] = this.doctorProfile; + data['DoctorProfileInfo'] = this.doctorProfileInfo; + data['DoctorRate'] = this.doctorRate; + data['Gender'] = this.gender; + data['GenderDescription'] = this.genderDescription; + data['IsAppointmentAllowed'] = this.isAppointmentAllowed; + data['IsDoctorAllowVedioCall'] = this.isDoctorAllowVedioCall; + data['IsDoctorDummy'] = this.isDoctorDummy; + data['IsLiveCare'] = this.isLiveCare; + data['Latitude'] = this.latitude; + data['Longitude'] = this.longitude; + data['NationalityFlagURL'] = this.nationalityFlagURL; + data['NationalityID'] = this.nationalityID; + data['NationalityName'] = this.nationalityName; + data['NearestFreeSlot'] = this.nearestFreeSlot; + data['NoOfPatientsRate'] = this.noOfPatientsRate; + data['OriginalClinicID'] = this.originalClinicID; + data['PersonRate'] = this.personRate; + data['ProjectDistanceInKiloMeters'] = this.projectDistanceInKiloMeters; + data['QR'] = this.qR; + data['QRString'] = this.qRString; + data['RateNumber'] = this.rateNumber; + data['ServiceID'] = this.serviceID; + data['SetupID'] = this.setupID; + data['Speciality'] = this.speciality; + data['WorkingHours'] = this.workingHours; + return data; + } +} diff --git a/lib/models/Appointments/DoctorProfile.dart b/lib/models/Appointments/DoctorProfile.dart new file mode 100644 index 00000000..bfc8c189 --- /dev/null +++ b/lib/models/Appointments/DoctorProfile.dart @@ -0,0 +1,176 @@ +class DoctorProfileList { + int doctorID; + String doctorName; + Null doctorNameN; + int clinicID; + String clinicDescription; + Null clinicDescriptionN; + Null licenseExpiry; + int employmentType; + Null setupID; + int projectID; + String projectName; + String nationalityID; + String nationalityName; + Null nationalityNameN; + int gender; + String genderDescription; + Null genderDescriptionN; + Null doctorTitle; + Null projectNameN; + bool isAllowWaitList; + String titleDescription; + Null titleDescriptionN; + Null isRegistered; + Null isDoctorDummy; + bool isActive; + Null isDoctorAppointmentDisplayed; + bool doctorClinicActive; + Null isbookingAllowed; + String doctorCases; + Null doctorPicture; + String doctorProfileInfo; + List specialty; + int actualDoctorRate; + String doctorImageURL; + int doctorRate; + String doctorTitleForProfile; + bool isAppointmentAllowed; + String nationalityFlagURL; + int noOfPatientsRate; + String qR; + int serviceID; + + DoctorProfileList( + {this.doctorID, + this.doctorName, + this.doctorNameN, + this.clinicID, + this.clinicDescription, + this.clinicDescriptionN, + this.licenseExpiry, + this.employmentType, + this.setupID, + this.projectID, + this.projectName, + this.nationalityID, + this.nationalityName, + this.nationalityNameN, + this.gender, + this.genderDescription, + this.genderDescriptionN, + this.doctorTitle, + this.projectNameN, + this.isAllowWaitList, + this.titleDescription, + this.titleDescriptionN, + this.isRegistered, + this.isDoctorDummy, + this.isActive, + this.isDoctorAppointmentDisplayed, + this.doctorClinicActive, + this.isbookingAllowed, + this.doctorCases, + this.doctorPicture, + this.doctorProfileInfo, + this.specialty, + this.actualDoctorRate, + this.doctorImageURL, + this.doctorRate, + this.doctorTitleForProfile, + this.isAppointmentAllowed, + this.nationalityFlagURL, + this.noOfPatientsRate, + this.qR, + this.serviceID}); + + DoctorProfileList.fromJson(Map json) { + doctorID = json['DoctorID']; + doctorName = json['DoctorName']; + doctorNameN = json['DoctorNameN']; + clinicID = json['ClinicID']; + clinicDescription = json['ClinicDescription']; + clinicDescriptionN = json['ClinicDescriptionN']; + licenseExpiry = json['LicenseExpiry']; + employmentType = json['EmploymentType']; + setupID = json['SetupID']; + projectID = json['ProjectID']; + projectName = json['ProjectName']; + nationalityID = json['NationalityID']; + nationalityName = json['NationalityName']; + nationalityNameN = json['NationalityNameN']; + gender = json['Gender']; + genderDescription = json['Gender_Description']; + genderDescriptionN = json['Gender_DescriptionN']; + doctorTitle = json['DoctorTitle']; + projectNameN = json['ProjectNameN']; + isAllowWaitList = json['IsAllowWaitList']; + titleDescription = json['Title_Description']; + titleDescriptionN = json['Title_DescriptionN']; + isRegistered = json['IsRegistered']; + isDoctorDummy = json['IsDoctorDummy']; + isActive = json['IsActive']; + isDoctorAppointmentDisplayed = json['IsDoctorAppointmentDisplayed']; + doctorClinicActive = json['DoctorClinicActive']; + isbookingAllowed = json['IsbookingAllowed']; + doctorCases = json['DoctorCases']; + doctorPicture = json['DoctorPicture']; + doctorProfileInfo = json['DoctorProfileInfo']; + specialty = json['Specialty'].cast(); + actualDoctorRate = json['ActualDoctorRate']; + doctorImageURL = json['DoctorImageURL']; + doctorRate = json['DoctorRate']; + doctorTitleForProfile = json['DoctorTitleForProfile']; + isAppointmentAllowed = json['IsAppointmentAllowed']; + nationalityFlagURL = json['NationalityFlagURL']; + noOfPatientsRate = json['NoOfPatientsRate']; + qR = json['QR']; + serviceID = json['ServiceID']; + } + + Map toJson() { + final Map data = new Map(); + data['DoctorID'] = this.doctorID; + data['DoctorName'] = this.doctorName; + data['DoctorNameN'] = this.doctorNameN; + data['ClinicID'] = this.clinicID; + data['ClinicDescription'] = this.clinicDescription; + data['ClinicDescriptionN'] = this.clinicDescriptionN; + data['LicenseExpiry'] = this.licenseExpiry; + data['EmploymentType'] = this.employmentType; + data['SetupID'] = this.setupID; + data['ProjectID'] = this.projectID; + data['ProjectName'] = this.projectName; + data['NationalityID'] = this.nationalityID; + data['NationalityName'] = this.nationalityName; + data['NationalityNameN'] = this.nationalityNameN; + data['Gender'] = this.gender; + data['Gender_Description'] = this.genderDescription; + data['Gender_DescriptionN'] = this.genderDescriptionN; + data['DoctorTitle'] = this.doctorTitle; + data['ProjectNameN'] = this.projectNameN; + data['IsAllowWaitList'] = this.isAllowWaitList; + data['Title_Description'] = this.titleDescription; + data['Title_DescriptionN'] = this.titleDescriptionN; + data['IsRegistered'] = this.isRegistered; + data['IsDoctorDummy'] = this.isDoctorDummy; + data['IsActive'] = this.isActive; + data['IsDoctorAppointmentDisplayed'] = this.isDoctorAppointmentDisplayed; + data['DoctorClinicActive'] = this.doctorClinicActive; + data['IsbookingAllowed'] = this.isbookingAllowed; + data['DoctorCases'] = this.doctorCases; + data['DoctorPicture'] = this.doctorPicture; + data['DoctorProfileInfo'] = this.doctorProfileInfo; + data['Specialty'] = this.specialty; + data['ActualDoctorRate'] = this.actualDoctorRate; + data['DoctorImageURL'] = this.doctorImageURL; + data['DoctorRate'] = this.doctorRate; + data['DoctorTitleForProfile'] = this.doctorTitleForProfile; + data['IsAppointmentAllowed'] = this.isAppointmentAllowed; + data['NationalityFlagURL'] = this.nationalityFlagURL; + data['NoOfPatientsRate'] = this.noOfPatientsRate; + data['QR'] = this.qR; + data['ServiceID'] = this.serviceID; + return data; + } +} diff --git a/lib/models/Appointments/InsertAppointmentRequest.dart b/lib/models/Appointments/InsertAppointmentRequest.dart new file mode 100644 index 00000000..09b7d923 --- /dev/null +++ b/lib/models/Appointments/InsertAppointmentRequest.dart @@ -0,0 +1,20 @@ +import 'package:diplomaticquarterapp/models/Request.dart'; + +class InsertAppointmentRequest extends Request { + String AppointmentDate; // ???? "/Date(1577750400000)/" + int DoctorID; + int InitialSlotDuration; + String SelectedTime; + String StartTime; + String EndTime; + String TempValue; + int VisitFor; + int VisitType; + bool IsVirtual; + List GeneralProcedureList; + String DeviceToken; + String DeviceType; + bool IsForLiveCare; + String OriginalClinicID; + String OriginalProjectID; +} diff --git a/lib/models/Appointments/timeSlot.dart b/lib/models/Appointments/timeSlot.dart new file mode 100644 index 00000000..58926fac --- /dev/null +++ b/lib/models/Appointments/timeSlot.dart @@ -0,0 +1,10 @@ +import 'package:flutter/cupertino.dart'; + +class TimeSlot { + String isoTime; + DateTime start; + DateTime end; + + TimeSlot({@required this.isoTime, @required this.start, @required this.end}); + +} diff --git a/lib/pages/BookAppointment/BookConfirm.dart b/lib/pages/BookAppointment/BookConfirm.dart index 58f0a344..6e1bb358 100644 --- a/lib/pages/BookAppointment/BookConfirm.dart +++ b/lib/pages/BookAppointment/BookConfirm.dart @@ -1,21 +1,38 @@ +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; import 'package:rating_bar/rating_bar.dart'; import 'BookSuccess.dart'; class BookConfirm extends StatefulWidget { + DoctorList doctor; + DateTime selectedDateTime; + String selectedDate; + String selectedTime; + + BookConfirm({@required this.doctor, this.selectedDateTime, @required this.selectedDate, @required this.selectedTime}); + @override _BookConfirmState createState() => _BookConfirmState(); } class _BookConfirmState extends State { + @override + void initState() { + print(widget.doctor.toString()); + print(widget.selectedDateTime); + super.initState(); + } + @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(TranslationBase.of(context).bookAppo), - ), + return AppScaffold( + appBarTitle: TranslationBase.of(context).bookAppo, + isShowAppBar: true, body: SingleChildScrollView( child: Container( margin: EdgeInsets.all(20.0), @@ -57,11 +74,8 @@ class _BookConfirmState extends State { children: [ ClipRRect( borderRadius: BorderRadius.circular(100.0), - child: Image.network( - "https://hmgwebservices.com/Images/MobileImages/OALAY/2477.png", - fit: BoxFit.fill, - height: 70.0, - width: 70.0), + child: Image.network(widget.doctor.doctorImageURL, + fit: BoxFit.fill, height: 70.0, width: 70.0), ), Container( width: MediaQuery.of(context).size.width * 0.6, @@ -69,14 +83,17 @@ class _BookConfirmState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text("Dr. EYAD ISMAIL ABU-JAYAD", + Text( + widget.doctor.doctorTitle + + "" + + widget.doctor.name, style: TextStyle( fontSize: 14.0, color: Colors.grey[700], letterSpacing: 1.0)), Container( margin: EdgeInsets.only(top: 3.0), - child: Text("INTERNAL MEDICINE CLINIC", + child: Text(widget.doctor.clinicName, style: TextStyle( fontSize: 12.0, color: Colors.grey[600], @@ -84,7 +101,10 @@ class _BookConfirmState extends State { ), Container( margin: EdgeInsets.only(top: 3.0, bottom: 3.0), - child: Text("General Practioner", + child: Text( + getDoctorSpeciality( + widget.doctor.speciality) + .trim(), style: TextStyle( fontSize: 12.0, color: Colors.grey[600], @@ -96,7 +116,9 @@ class _BookConfirmState extends State { mainAxisSize: MainAxisSize.max, children: [ RatingBar.readOnly( - initialRating: 4.0, + initialRating: widget + .doctor.actualDoctorRate + .toDouble(), size: 20.0, filledColor: Colors.yellow[700], emptyColor: Colors.grey[500], @@ -146,7 +168,10 @@ class _BookConfirmState extends State { ), Container( margin: EdgeInsets.fromLTRB(20.0, 5.0, 10.0, 5.0), - child: Text("Hospital: Olaya Hospital", + child: Text( + TranslationBase.of(context).hospital + + ": " + + widget.doctor.projectName, style: TextStyle( fontSize: 14.0, color: Colors.grey[700], @@ -164,7 +189,10 @@ class _BookConfirmState extends State { ), Container( margin: EdgeInsets.fromLTRB(20.0, 5.0, 10.0, 5.0), - child: Text("Clinic: INTERNAL MEDICINE CLINIC", + child: Text( + TranslationBase.of(context).clinic + + ": " + + widget.doctor.clinicName, style: TextStyle( fontSize: 14.0, color: Colors.grey[700], @@ -183,7 +211,9 @@ class _BookConfirmState extends State { ), Container( margin: EdgeInsets.fromLTRB(20.0, 5.0, 10.0, 5.0), - child: Text("Date: Olaya Hospital", + child: Text( + TranslationBase.of(context).date + + ": " + getDate(), style: TextStyle( fontSize: 14.0, color: Colors.grey[700], @@ -202,7 +232,10 @@ class _BookConfirmState extends State { ), Container( margin: EdgeInsets.fromLTRB(20.0, 5.0, 10.0, 5.0), - child: Text("Hospital: Olaya Hospital", + child: Text( + TranslationBase.of(context).time + + ": " + + widget.selectedTime, style: TextStyle( fontSize: 14.0, color: Colors.grey[700], @@ -300,13 +333,38 @@ class _BookConfirmState extends State { onPressed: () { navigateToBookSuccess(context); }, - child: Text(TranslationBase.of(context).bookNow, style: TextStyle(fontSize: 18.0)), + child: Text(TranslationBase.of(context).bookNow, + style: TextStyle(fontSize: 18.0)), ), ), ), ); } + String getTime(DateTime dateTime) { + final DateFormat formatter = DateFormat('HH:mm'); + return formatter.format(dateTime); + } + + String getDate() { + var dateObj = new DateTime(int.parse(widget.selectedDate.split("-")[0]), int.parse(widget.selectedDate.split("-")[1]), int.parse(widget.selectedDate.split("-")[2]), 0, 0, 0, 0); + return DateUtil.getWeekDay(dateObj.weekday) + + ", " + + dateObj.day.toString() + + " " + + DateUtil.getMonth(dateObj.month) + + " " + + dateObj.year.toString(); + } + + String getDoctorSpeciality(List docSpecial) { + String docSpeciality = ""; + docSpecial.forEach((v) { + docSpeciality = docSpeciality + v + "\n"; + }); + return docSpeciality; + } + Future navigateToBookSuccess(context) async { Navigator.push( context, MaterialPageRoute(builder: (context) => BookSuccess())); diff --git a/lib/pages/BookAppointment/BookingOptions.dart b/lib/pages/BookAppointment/BookingOptions.dart index 57442d6c..c207f366 100644 --- a/lib/pages/BookAppointment/BookingOptions.dart +++ b/lib/pages/BookAppointment/BookingOptions.dart @@ -1,4 +1,5 @@ import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/CardCommon.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import '../../uitl/translations_delegate_base.dart'; @@ -6,8 +7,9 @@ import '../../uitl/translations_delegate_base.dart'; class BookingOptions extends StatelessWidget { @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar(title: Text(TranslationBase.of(context).bookAppo)) , + return AppScaffold( + isShowAppBar: true, + appBarTitle: TranslationBase.of(context).bookAppo, body: Container( margin: EdgeInsets.fromLTRB(10.0, 20.0, 10.0, 10.0), child: Column( diff --git a/lib/pages/BookAppointment/DoctorProfile.dart b/lib/pages/BookAppointment/DoctorProfile.dart index 41479828..0d2ba9cb 100644 --- a/lib/pages/BookAppointment/DoctorProfile.dart +++ b/lib/pages/BookAppointment/DoctorProfile.dart @@ -1,4 +1,8 @@ +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +import 'package:diplomaticquarterapp/models/Appointments/DoctorProfile.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:rating_bar/rating_bar.dart'; @@ -7,6 +11,11 @@ import 'components/DocAvailableAppointments.dart'; import 'components/DocInfo.dart'; class DoctorProfile extends StatefulWidget { + DoctorList doctor; + DoctorProfileList docProfileList; + + DoctorProfile({@required this.doctor, @required this.docProfileList}); + @override _DoctorProfileState createState() => _DoctorProfileState(); } @@ -24,21 +33,8 @@ class _DoctorProfileState extends State @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(TranslationBase.of(context).bookAppo), - actions: [ - IconButton( - icon: Icon( - Icons.today, - color: Colors.white, - ), - onPressed: () { - print('Login'); - }, - ) - ], - ), + return AppScaffold( + appBarTitle: TranslationBase.of(context).bookAppo, bottomSheet: showFooterButton ? Container( width: MediaQuery.of(context).size.width, @@ -55,11 +51,9 @@ class _DoctorProfileState extends State textColor: Colors.white, disabledTextColor: Colors.white, disabledColor: new Color(0xFFbcc2c4), - onPressed: () { - navigateToBookConfirm(context); - }, - child: - Text(TranslationBase.of(context).bookNow, style: TextStyle(fontSize: 18.0)), + onPressed: goToBookConfirm, + child: Text(TranslationBase.of(context).bookNow, + style: TextStyle(fontSize: 18.0)), ), ), ) @@ -80,17 +74,16 @@ class _DoctorProfileState extends State alignment: Alignment.center, child: ClipRRect( borderRadius: BorderRadius.circular(100.0), - child: Image.network( - "https://hmgwebservices.com/Images/MobileImages/OALAY/2477.png", - fit: BoxFit.fill, - height: 120.0, - width: 120.0), + child: Image.network(widget.doctor.doctorImageURL, + fit: BoxFit.fill, height: 120.0, width: 120.0), ), ), Container( margin: EdgeInsets.only(top: 10.0), alignment: Alignment.center, - child: Text("Dr. EYAD ISMAIL ABU-JAYAD", + child: Text( + widget.doctor.doctorTitle + " " + widget.doctor.name, + textAlign: TextAlign.center, style: TextStyle( fontSize: 20.0, color: Colors.grey[900], @@ -99,9 +92,9 @@ class _DoctorProfileState extends State Container( margin: EdgeInsets.only(top: 10.0), alignment: Alignment.center, - child: Text("INTERNAL MEDICINE CLINIC", + child: Text(widget.doctor.clinicName, style: TextStyle( - fontSize: 12.0, + fontSize: 13.0, color: Colors.grey[900], letterSpacing: 1.0)), ), @@ -109,7 +102,8 @@ class _DoctorProfileState extends State margin: EdgeInsets.only(top: 5.0), alignment: Alignment.center, child: RatingBar.readOnly( - initialRating: 4.0, + initialRating: + widget.doctor.actualDoctorRate.toDouble(), size: 35.0, filledColor: Colors.yellow[700], emptyColor: Colors.grey[500], @@ -122,7 +116,10 @@ class _DoctorProfileState extends State Container( margin: EdgeInsets.only(top: 5.0), alignment: Alignment.center, - child: Text("(2322 Reviews)", + child: Text( + "(" + + widget.doctor.noOfPatientsRate.toString() + + " Reviews)", style: TextStyle( fontSize: 14.0, color: Colors.blue[800], @@ -160,10 +157,13 @@ class _DoctorProfileState extends State ), ), Container( - height: MediaQuery.of(context).size.height * 0.68, + height: MediaQuery.of(context).size.height, child: TabBarView( physics: NeverScrollableScrollPhysics(), - children: [DoctorInformation(), DocAvailableAppointments()], + children: [ + DoctorInformation(docProfileList: widget.docProfileList), + DocAvailableAppointments(doctor: widget.doctor) + ], controller: _tabController, ), ), @@ -174,8 +174,21 @@ class _DoctorProfileState extends State ); } + void goToBookConfirm() { + if (DocAvailableAppointments.areSlotsAvailable) + navigateToBookConfirm(context); + else + AppToast.showErrorToast(message: "Please select Time Slot to continue"); + } + Future navigateToBookConfirm(context) async { Navigator.push( - context, MaterialPageRoute(builder: (context) => BookConfirm())); + context, + MaterialPageRoute( + builder: (context) => BookConfirm( + doctor: widget.doctor, + selectedDateTime: DocAvailableAppointments.selectedAppoDateTime, + selectedDate: DocAvailableAppointments.selectedDate, + selectedTime: DocAvailableAppointments.selectedTime))); } } diff --git a/lib/pages/BookAppointment/SearchResults.dart b/lib/pages/BookAppointment/SearchResults.dart index 1fc356c5..57a88991 100644 --- a/lib/pages/BookAppointment/SearchResults.dart +++ b/lib/pages/BookAppointment/SearchResults.dart @@ -1,24 +1,45 @@ +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'widgets/DoctorView.dart'; -class SearchResults extends StatelessWidget { +class SearchResults extends StatefulWidget { + List doctorsList = []; + + SearchResults({@required this.doctorsList}); + + @override + _SearchResultsState createState() => _SearchResultsState(); +} + +class _SearchResultsState extends State { + @override + void initState() { + // TODO: implement initState + super.initState(); + } + @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(TranslationBase.of(context).bookAppo), - ), + return AppScaffold( + appBarTitle: TranslationBase.of(context).bookAppo, + isShowAppBar: true, body: Container( + margin: EdgeInsets.only(bottom: 10.0), child: SingleChildScrollView( - child: Column( - children: [ - DoctorView(), - DoctorView(), - DoctorView(), - DoctorView(), - ], + child: ListView.builder( + scrollDirection: Axis.vertical, + shrinkWrap: true, + physics: ScrollPhysics(), + padding: EdgeInsets.all(0.0), + itemCount: widget.doctorsList.length, + itemBuilder: (context, index) { + return DoctorView( + doctor: widget.doctorsList[index], + ); + }, ), ), ), diff --git a/lib/pages/BookAppointment/components/DocAvailableAppointments.dart b/lib/pages/BookAppointment/components/DocAvailableAppointments.dart index 851b6615..307e8ed7 100644 --- a/lib/pages/BookAppointment/components/DocAvailableAppointments.dart +++ b/lib/pages/BookAppointment/components/DocAvailableAppointments.dart @@ -1,12 +1,24 @@ -import 'dart:convert'; - +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/Appointments/FreeSlot.dart'; +import 'package:diplomaticquarterapp/models/Appointments/timeSlot.dart'; +import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; +import 'package:intl/intl.dart'; import 'package:table_calendar/table_calendar.dart'; import '../../../uitl/date_uitl.dart'; class DocAvailableAppointments extends StatefulWidget { + DoctorList doctor; + static bool areSlotsAvailable = false; + static DateTime selectedAppoDateTime; + static String selectedDate; + static String selectedTime; + + DocAvailableAppointments({@required this.doctor}); + @override _DocAvailableAppointmentsState createState() => _DocAvailableAppointmentsState(); @@ -19,9 +31,17 @@ class _DocAvailableAppointmentsState extends State CalendarController _calendarController; var selectedDate = ""; - var jsonFreeSlots; + dynamic selectedDateJSON; + dynamic jsonFreeSlots; + + List docFreeSlots = []; + List dayEvents = []; - List docFreeSlots = []; + int selectedButtonIndex = 0; + + dynamic freeSlotsResponse; + + ScrollController _scrollController; @override void initState() { @@ -29,22 +49,18 @@ class _DocAvailableAppointmentsState extends State super.initState(); final _selectedDay = DateTime.now(); - this.selectedDate = DateUtil.getMonthDayYearDateFormatted(DateTime.now()); + _scrollController = new ScrollController(); _events = { _selectedDay: ['Event A0'] }; - _getJSONSlots().then((value) => { - setState(() => {_events.clear(), _events = value}) - }); + getDoctorFreeSlots(context, widget.doctor); -// _selectedEvents = _events[_selectedDay] ?? []; _calendarController = CalendarController(); - _animationController = AnimationController( vsync: this, - duration: const Duration(milliseconds: 400), + duration: const Duration(milliseconds: 50), ); _animationController.forward(); @@ -58,10 +74,12 @@ class _DocAvailableAppointmentsState extends State } void _onDaySelected(DateTime day, List events) { - print('CALLBACK: _onDaySelected'); + final DateFormat formatter = DateFormat('yyyy-MM-dd'); setState(() { -// _selectedEvents = events; - this.selectedDate = DateUtil.getMonthDayYearDateFormatted(day); + this.selectedDate = DateUtil.getMonthDayYearDateFormatted(day); + openTimeSlotsPickerForDate(day, docFreeSlots); + DocAvailableAppointments.selectedDate = formatter.format(day); + print(DocAvailableAppointments.selectedDate); }); } @@ -80,9 +98,7 @@ class _DocAvailableAppointmentsState extends State return SingleChildScrollView( child: Container( decoration: BoxDecoration( - color: Colors.white, - borderRadius: BorderRadius.circular(20.0) - ), + color: Colors.white, borderRadius: BorderRadius.circular(10.0)), margin: EdgeInsets.all(20.0), padding: EdgeInsets.only(bottom: 10.0, top: 10.0), child: Column( @@ -90,6 +106,33 @@ class _DocAvailableAppointmentsState extends State children: [ Text(selectedDate, style: TextStyle(fontSize: 18.0, fontWeight: FontWeight.bold)), + Container( + height: 50, + margin: EdgeInsets.all(20.0), + child: ListView.builder( + controller: _scrollController, + scrollDirection: Axis.horizontal, + itemCount: dayEvents.length, + itemBuilder: (context, index) { + return Container( + margin: EdgeInsets.only(right: 10.0), + child: ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(5.0), + side: BorderSide( + color: Colors.blue[400], //Color of the border + style: BorderStyle.solid, //Style of the border + width: 1.5, //width of the border + ), + ), + minWidth: MediaQuery.of(context).size.width * 0.2, + child: index == selectedButtonIndex + ? getSelectedButton(index) + : getNormalButton(index)), + ); + }, + ), + ), _buildTableCalendarWithBuilders(), ], ), @@ -97,28 +140,11 @@ class _DocAvailableAppointmentsState extends State ); } - Future> _getJSONSlots() async { - Map _eventsParsed; - List slotsList = []; - String data = await DefaultAssetBundle.of(context) - .loadString("assets/json/freeSlots.json"); - jsonFreeSlots = json.decode(data.toString()); - for (var i = 0; i < 4000; i++) { - slotsList.add(FreeSlot( - DateUtil.convertStringToDate(jsonFreeSlots['FreeTimeSlots'][i]), - ['slot'])); - } - _eventsParsed = - Map.fromIterable(slotsList, key: (e) => e.slot, value: (e) => e.event); - return _eventsParsed; - } - Widget _buildTableCalendarWithBuilders() { return TableCalendar( locale: 'en_US', calendarController: _calendarController, events: _events, -// holidays: _holidays, initialCalendarFormat: CalendarFormat.month, startDay: DateTime.now(), formatAnimation: FormatAnimation.slide, @@ -160,14 +186,24 @@ class _DocAvailableAppointmentsState extends State }, todayDayBuilder: (context, date, _) { return Container( - margin: const EdgeInsets.all(4.0), - padding: const EdgeInsets.only(top: 5.0, left: 6.0), - color: Colors.amber[400], - width: 0, - height: 0, - child: Text( - '${date.day}', - style: TextStyle().copyWith(fontSize: 16.0), + decoration: BoxDecoration( + shape: BoxShape.circle, + color: _calendarController.isSelected(date) + ? Colors.green[400] + : _calendarController.isToday(date) + ? Colors.brown[300] + : Colors.blue[400], + ), + width: 40.0, + height: 40.0, + child: Center( + child: Text( + '${date.day}', + style: TextStyle().copyWith( + color: Colors.white, + fontSize: 14.0, + ), + ), ), ); }, @@ -196,9 +232,115 @@ class _DocAvailableAppointmentsState extends State ); } + openTimeSlotsPickerForDate(DateTime dateStart, List freeSlots) { + dayEvents.clear(); + DateTime dateStartObj = new DateTime( + dateStart.year, dateStart.month, dateStart.day, 0, 0, 0, 0, 0); + + freeSlots.forEach((v) { + if (v.start == dateStartObj) dayEvents.add(v); + }); + + setState(() { + if (dayEvents.length != 0) + DocAvailableAppointments.areSlotsAvailable = true; + else + DocAvailableAppointments.areSlotsAvailable = false; + + selectedButtonIndex = 0; + + DocAvailableAppointments.selectedTime = + dayEvents[selectedButtonIndex].isoTime; + + _scrollController.animateTo(0.0, duration: new Duration(seconds: 1), curve: Curves.ease); + + }); + } + + Future> _getJSONSlots() async { + Map _eventsParsed; + List slotsList = []; + DateTime date; + final DateFormat formatter = DateFormat('HH:mm'); + for (var i = 0; i < freeSlotsResponse.length; i++) { + date = DateUtil.convertStringToDate(freeSlotsResponse[i]); + slotsList.add(FreeSlot(date, ['slot'])); + docFreeSlots.add(TimeSlot( + isoTime: formatter.format(date), + start: new DateTime(date.year, date.month, date.day, 0, 0, 0, 0), + end: date)); + } + _eventsParsed = + Map.fromIterable(slotsList, key: (e) => e.slot, value: (e) => e.event); + setState(() { + selectedDate = DateUtil.getMonthDayYearDateFormatted( + DateUtil.convertStringToDate(freeSlotsResponse[0])); + selectedDateJSON = freeSlotsResponse[0]; + }); + openTimeSlotsPickerForDate( + DateUtil.convertStringToDate(selectedDateJSON), docFreeSlots); + _calendarController + .setFocusedDay(DateUtil.convertStringToDate(selectedDateJSON)); + return _eventsParsed; + } + + Widget getNormalButton(int index) { + return RaisedButton( + color: Colors.white, + textColor: new Color(0xFF60686b), + onPressed: () { + setState(() { + selectedButtonIndex = index; + DocAvailableAppointments.selectedTime = + dayEvents[index].isoTime; + print(DocAvailableAppointments.selectedTime); + }); + }, + child: Text(dayEvents[index].isoTime, + style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold)), + ); + } + + Widget getSelectedButton(int index) { + return RaisedButton( + color: Colors.blue[400], + textColor: Colors.white, + onPressed: () { + setState(() { + selectedButtonIndex = index; + DocAvailableAppointments.selectedTime = + dayEvents[index].isoTime; + print(DocAvailableAppointments.selectedTime); + }); + }, + child: Text(dayEvents[index].isoTime, + style: TextStyle(fontSize: 16.0, fontWeight: FontWeight.bold)), + ); + } + + getDoctorFreeSlots(context, DoctorList docObject) { + DoctorsListService service = new DoctorsListService(); + service + .getDoctorFreeSlots( + docObject.doctorID, docObject.clinicID, docObject.projectID) + .then((res) { + if (res['MessageStatus'] == 1) { + if (res['FreeTimeSlots'].length != 0) { + freeSlotsResponse = res['FreeTimeSlots']; + _getJSONSlots().then((value) => { + setState(() => {_events.clear(), _events = value}) + }); + } else {} + } else { + AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + } + }).catchError((err) { + print(err); + }); + } + Widget _buildEventsMarker(DateTime date, List events) { return Container( -// duration: const Duration(milliseconds: 10), decoration: BoxDecoration( shape: BoxShape.circle, color: _calendarController.isSelected(date) diff --git a/lib/pages/BookAppointment/components/DocInfo.dart b/lib/pages/BookAppointment/components/DocInfo.dart index 8416357b..ff24b1ca 100644 --- a/lib/pages/BookAppointment/components/DocInfo.dart +++ b/lib/pages/BookAppointment/components/DocInfo.dart @@ -1,7 +1,13 @@ +import 'package:diplomaticquarterapp/models/Appointments/DoctorProfile.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:flutter/material.dart'; class DoctorInformation extends StatelessWidget { + + DoctorProfileList docProfileList; + + DoctorInformation({@required this.docProfileList}); + @override Widget build(BuildContext context) { return Container( @@ -41,8 +47,8 @@ class DoctorInformation extends StatelessWidget { TableCell(child: _getHeadingText(TranslationBase.of(context).nationality)), ]), TableRow(children: [ - TableCell(child: _getNormalText("Male")), - TableCell(child: _getNormalTextWithIcon("Palestinian")), + TableCell(child: _getNormalText(docProfileList.genderDescription)), + TableCell(child: _getNormalTextWithIcon(docProfileList.nationalityName, docProfileList.nationalityFlagURL)), ]), ], ), @@ -56,7 +62,7 @@ class DoctorInformation extends StatelessWidget { crossAxisAlignment: CrossAxisAlignment.start, children: [ _getHeadingText(TranslationBase.of(context).clinic), - _getNormalText("INTERNAL MEDICINE CLINIC") + _getNormalText(docProfileList.clinicDescription) ], ), ) @@ -88,12 +94,10 @@ class DoctorInformation extends StatelessWidget { ), ), Container( - margin: EdgeInsets.fromLTRB(10.0, 5.0, 10.0, 10.0), + margin: EdgeInsets.fromLTRB(20.0, 0.0, 10.0, 5.0), child: Column( - crossAxisAlignment: CrossAxisAlignment.start, children: [ - _getHeadingText(TranslationBase.of(context).clinic), - _getNormalText("INTERNAL MEDICINE CLINIC") + _getNormalText(docProfileList.doctorProfileInfo) ], ), ) @@ -127,14 +131,14 @@ class DoctorInformation extends StatelessWidget { ); } - _getNormalTextWithIcon(text) { + _getNormalTextWithIcon(String text, icon) { return Container( margin: EdgeInsets.only(top: 5.0), child: Row( mainAxisAlignment: MainAxisAlignment.start, mainAxisSize: MainAxisSize.max, children: [ - Text(text, + Text(text.trim(), style: TextStyle( fontSize: 13, fontFamily: 'Open-Sans', @@ -143,7 +147,7 @@ class DoctorInformation extends StatelessWidget { Container( margin: EdgeInsets.only(left: 5.0, right: 5.0), child: Image.network( - "https://hmgwebservices.com/Images/flag/PSE.png", + icon, width: 18.0, height: 18.0), ), diff --git a/lib/pages/BookAppointment/components/SearchByClinic.dart b/lib/pages/BookAppointment/components/SearchByClinic.dart index d09fde11..1c871c40 100644 --- a/lib/pages/BookAppointment/components/SearchByClinic.dart +++ b/lib/pages/BookAppointment/components/SearchByClinic.dart @@ -1,9 +1,13 @@ +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/Clinics/ClinicListResponse.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/services/clinic_services/get_clinic_service.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:flutter/material.dart'; +import '../SearchResults.dart'; + class SearchByClinic extends StatefulWidget { @override _SearchByClinicState createState() => _SearchByClinicState(); @@ -96,18 +100,31 @@ class _SearchByClinicState extends State { } getDoctorsList() { + List doctorsList = []; DoctorsListService service = new DoctorsListService(); service.getDoctorsList(int.parse(dropdownValue), 0).then((res) { - print(res['DoctorList']); -// if (res['MessageStatus'] == 1) { -// setState(() { -// res['ListClinicCentralized'].forEach((v) { -// clinicsList.add(new ListClinicCentralized.fromJson(v)); -// }); -// }); -// } else {} + if (res['MessageStatus'] == 1) { + setState(() { + if (res['DoctorList'].length != 0) { + doctorsList.clear(); + res['DoctorList'].forEach((v) { + doctorsList.add(new DoctorList.fromJson(v)); + }); + } else {} + }); + navigateToSearchResults(context, doctorsList); + } else { + AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + } }).catchError((err) { print(err); }); } + + Future navigateToSearchResults(context, docList) async { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => SearchResults(doctorsList: docList))); + } } diff --git a/lib/pages/BookAppointment/components/SearchByDoctor.dart b/lib/pages/BookAppointment/components/SearchByDoctor.dart index 95ef0100..27b7166d 100644 --- a/lib/pages/BookAppointment/components/SearchByDoctor.dart +++ b/lib/pages/BookAppointment/components/SearchByDoctor.dart @@ -1,4 +1,6 @@ +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:flutter/material.dart'; @@ -75,17 +77,21 @@ class _SearchByDoctorState extends State { } getDoctorsList() { + List doctorsList = []; DoctorsListService service = new DoctorsListService(); service.getDoctorsListByName(doctorNameController.text).then((res) { - print(res['DoctorList']); if (res['MessageStatus'] == 1) { -// setState(() { -// res['ListClinicCentralized'].forEach((v) { -// clinicsList.add(new ListClinicCentralized.fromJson(v)); -// }); -// }); - navigateToSearchResults(context); - } else {} + setState(() { + if(res['DoctorList'].length != 0) { + res['DoctorList'].forEach((v) { + doctorsList.add(new DoctorList.fromJson(v)); + }); + } else {} + }); + navigateToSearchResults(context, doctorsList); + } else { + AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + } }).catchError((err) { print(err); }); @@ -109,8 +115,10 @@ class _SearchByDoctorState extends State { getDoctorsList(); } - Future navigateToSearchResults(context) async { + Future navigateToSearchResults(context, List docList) async { Navigator.push( - context, MaterialPageRoute(builder: (context) => SearchResults())); + context, + MaterialPageRoute( + builder: (context) => SearchResults(doctorsList: docList))); } } diff --git a/lib/pages/BookAppointment/widgets/DoctorView.dart b/lib/pages/BookAppointment/widgets/DoctorView.dart index 6c13c205..fd1ded27 100644 --- a/lib/pages/BookAppointment/widgets/DoctorView.dart +++ b/lib/pages/BookAppointment/widgets/DoctorView.dart @@ -1,14 +1,23 @@ +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +import 'package:diplomaticquarterapp/models/Appointments/DoctorProfile.dart'; +import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:flutter/material.dart'; import 'package:rating_bar/rating_bar.dart'; import '../DoctorProfile.dart'; class DoctorView extends StatelessWidget { + DoctorList doctor; + + DoctorView({@required this.doctor}); + @override Widget build(BuildContext context) { - return GestureDetector( + return InkWell( onTap: () { - navigateToDoctorProfile(context); +// navigateToDoctorProfile(context); + getDoctorsProfile(context, doctor); }, child: Card( margin: EdgeInsets.fromLTRB(20.0, 16.0, 20.0, 8.0), @@ -25,11 +34,8 @@ class DoctorView extends StatelessWidget { children: [ ClipRRect( borderRadius: BorderRadius.circular(100.0), - child: Image.network( - "https://hmgwebservices.com/Images/MobileImages/OALAY/2477.png", - fit: BoxFit.fill, - height: 60.0, - width: 60.0), + child: Image.network(this.doctor.doctorImageURL, + fit: BoxFit.fill, height: 60.0, width: 60.0), ), Container( width: MediaQuery.of(context).size.width * 0.6, @@ -37,14 +43,14 @@ class DoctorView extends StatelessWidget { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text("Dr. EYAD ISMAIL ABU-JAYAD", + Text(this.doctor.doctorTitle + " " + this.doctor.name, style: TextStyle( fontSize: 14.0, color: Colors.grey[700], letterSpacing: 1.0)), Container( margin: EdgeInsets.only(top: 3.0), - child: Text("INTERNAL MEDICINE CLINIC", + child: Text(this.doctor.clinicName, style: TextStyle( fontSize: 12.0, color: Colors.grey[600], @@ -52,7 +58,8 @@ class DoctorView extends StatelessWidget { ), Container( margin: EdgeInsets.only(top: 3.0, bottom: 3.0), - child: Text("General Practioner", + child: Text( + getDoctorSpeciality(this.doctor.speciality).trim(), style: TextStyle( fontSize: 12.0, color: Colors.grey[600], @@ -63,7 +70,8 @@ class DoctorView extends StatelessWidget { mainAxisSize: MainAxisSize.max, children: [ RatingBar.readOnly( - initialRating: 4.0, + initialRating: + this.doctor.actualDoctorRate.toDouble(), size: 20.0, filledColor: Colors.yellow[700], emptyColor: Colors.grey[500], @@ -73,10 +81,8 @@ class DoctorView extends StatelessWidget { emptyIcon: Icons.star, ), Container( - child: Image.network( - "https://hmgwebservices.com/Images/flag/PSE.png", - width: 25.0, - height: 25.0), + child: Image.network(this.doctor.nationalityFlagURL, + width: 25.0, height: 25.0), ), ], ), @@ -90,9 +96,41 @@ class DoctorView extends StatelessWidget { ); } - Future navigateToDoctorProfile(context) async { - Navigator.push( - context, MaterialPageRoute(builder: (context) => DoctorProfile())); + String getDoctorSpeciality(List docSpecial) { + String docSpeciality = ""; + docSpecial.forEach((v) { + docSpeciality = docSpeciality + v + "\n"; + }); + return docSpeciality; } + getDoctorsProfile(context, DoctorList docObject) { + List docProfileList = []; + DoctorsListService service = new DoctorsListService(); + service + .getDoctorsProfile( + docObject.doctorID, docObject.clinicID, docObject.projectID) + .then((res) { + if (res['MessageStatus'] == 1) { + if (res['DoctorProfileList'].length != 0) { + res['DoctorProfileList'].forEach((v) { + docProfileList.add(new DoctorProfileList.fromJson(v)); + }); + } else {} + navigateToDoctorProfile(context, docObject, docProfileList[0]); + } else { + AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + } + }).catchError((err) { + print(err); + }); + } + + Future navigateToDoctorProfile(context, docObject, docProfile) async { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => + DoctorProfile(doctor: docObject, docProfileList: docProfile))); + } } diff --git a/lib/pages/ToDoList/ToDo.dart b/lib/pages/ToDoList/ToDo.dart index 85ce348d..a6621333 100644 --- a/lib/pages/ToDoList/ToDo.dart +++ b/lib/pages/ToDoList/ToDo.dart @@ -1,5 +1,6 @@ import 'package:diplomaticquarterapp/pages/ToDoList/widgets/upcomingCard.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; class ToDo extends StatefulWidget { @@ -10,10 +11,8 @@ class ToDo extends StatefulWidget { class _ToDoState extends State { @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text(TranslationBase.of(context).todoList), - ), + return AppScaffold( + appBarTitle: TranslationBase.of(context).todoList, body: SingleChildScrollView( child: Container( child: Column( diff --git a/lib/services/appointment_services/GetDoctorsList.dart b/lib/services/appointment_services/GetDoctorsList.dart index 5743a577..0c929a81 100644 --- a/lib/services/appointment_services/GetDoctorsList.dart +++ b/lib/services/appointment_services/GetDoctorsList.dart @@ -1,6 +1,7 @@ import 'package:diplomaticquarterapp/client/base_app_client.dart'; import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; +import 'package:diplomaticquarterapp/models/Appointments/InsertAppointmentRequest.dart'; import 'package:diplomaticquarterapp/models/Request.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; @@ -19,10 +20,10 @@ class DoctorsListService { "Channel": req.Channel, "generalid": 'Cs2020@2016\$2958', "PatientOutSA": 0, - "TokenID": "", + "TokenID": "@dm!n", "DeviceTypeID": req.DeviceTypeID, "SessionID": null, - "ClinicID": 21, + "ClinicID": clinicID, "ProjectID": 0, "ContinueDentalPlan": false, "IsSearchAppointmnetByClinicID": true, @@ -78,11 +79,126 @@ class DoctorsListService { await BaseAppClient.post(GET_DOCTORS_LIST_URL, onSuccess: (response, statusCode) async { - localRes = response; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request); + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: request); return Future.value(localRes); } + Future getDoctorsProfile(int docID, int clinicID, int projectID) async { + Map request; + var languageID = await sharedPref.getString(APP_LANGUAGE); + Request req = appGlobal.getPublicRequest(); + request = { + "LanguageID": languageID == 'ar' ? 1 : 2, + "IPAdress": "10.20.10.20", + "VersionID": req.VersionID, + "Channel": req.Channel, + "generalid": 'Cs2020@2016\$2958', + "PatientOutSA": 0, + "TokenID": "", + "DeviceTypeID": req.DeviceTypeID, + "SessionID": null, + "doctorID": docID, + "ClinicID": clinicID, + "PatientID": 0, + "License": true, + "IsRegistered": true, + "ProjectID": projectID, + "isDentalAllowedBackend": false + }; + + dynamic localRes; + + await BaseAppClient.post(GET_DOCTOR_PROFILE, + onSuccess: (response, statusCode) async { + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: request); + return Future.value(localRes); + } + + Future getDoctorFreeSlots(int docID, int clinicID, int projectID) async { + Map request; + var languageID = await sharedPref.getString(APP_LANGUAGE); + Request req = appGlobal.getPublicRequest(); + request = { + "DoctorID": docID, + "IsBookingForLiveCare": 0, + "ClinicID": clinicID, + "ProjectID": projectID, + "OriginalClinicID": clinicID, + "days": 0, + "isReschadual": false, + "VersionID": req.VersionID, + "Channel": 3, + "LanguageID": languageID == 'ar' ? 1 : 2, + "IPAdress": "10.20.10.20", + "generalid": "Cs2020@2016\$2958", + "PatientOutSA": 0, + "SessionID": null, + "isDentalAllowedBackend": false, + "DeviceTypeID": 1 + }; + + dynamic localRes; + + await BaseAppClient.post(GET_DOCTOR_FREE_SLOTS, + onSuccess: (response, statusCode) async { + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: request); + return Future.value(localRes); + } + + Future insertAppointment(int docID, int clinicID, int projectID, String selectedTime, String selectedDate) async { + Map request; + var languageID = await sharedPref.getString(APP_LANGUAGE); + Request req = appGlobal.getPublicRequest(); + + InsertAppointmentRequest insertAppointmentRequest = + new InsertAppointmentRequest(); + + insertAppointmentRequest.VersionID = req.VersionID; + insertAppointmentRequest.Channel = "3"; + insertAppointmentRequest.LanguageID = languageID == 'ar' ? 1 : 2; + insertAppointmentRequest.IPAdress = "10.20.10.20"; + insertAppointmentRequest.generalid = "Cs2020@2016\$2958"; + insertAppointmentRequest.PatientOutSA = 0; + insertAppointmentRequest.SessionID = ""; + insertAppointmentRequest.isDentalAllowedBackend = false; + insertAppointmentRequest.DeviceTypeID = 1; + insertAppointmentRequest.DeviceType = "Android"; + + insertAppointmentRequest.DoctorID = docID; + insertAppointmentRequest.ClinicID = clinicID; + insertAppointmentRequest.ProjectID = projectID; + insertAppointmentRequest.IsForLiveCare = false; + insertAppointmentRequest.BookedBy = 102; + insertAppointmentRequest.IsVirtual = false; + insertAppointmentRequest.PatientID = "1231755"; + insertAppointmentRequest.VisitFor = 1; + insertAppointmentRequest.VisitType = 1; + insertAppointmentRequest.PatientType = 1; + insertAppointmentRequest.PatientTypeID = 1; + insertAppointmentRequest.InitialSlotDuration = 0; + + insertAppointmentRequest.EndTime = selectedTime; + insertAppointmentRequest.StartTime = selectedTime; + insertAppointmentRequest.SelectedTime = selectedTime; + insertAppointmentRequest.StrAppointmentDate = selectedDate; + + dynamic localRes; + + await BaseAppClient.post(GET_DOCTOR_FREE_SLOTS, + onSuccess: (response, statusCode) async { + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: request); + return Future.value(localRes); + } } diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 056258c1..8c0b1c9d 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -95,6 +95,12 @@ class TranslationBase { String get appoActions => localizedValues['appoActions'][locale.languageCode]; String get appointment => localizedValues['appointment'][locale.languageCode]; + + String get hospital => localizedValues['hospital'][locale.languageCode]; + + String get date => localizedValues['date'][locale.languageCode]; + + String get time => localizedValues['time'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/others/app_scaffold_widget.dart b/lib/widgets/others/app_scaffold_widget.dart index c6fc690b..edd085d1 100644 --- a/lib/widgets/others/app_scaffold_widget.dart +++ b/lib/widgets/others/app_scaffold_widget.dart @@ -1,23 +1,26 @@ import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/providers/project_provider.dart'; import 'package:diplomaticquarterapp/widgets/data_display/text.dart'; -import '../progress_indicator/app_loader_widget.dart'; -import 'arrow_back.dart'; import 'package:flutter/material.dart'; import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:provider/provider.dart'; +import '../progress_indicator/app_loader_widget.dart'; +import 'arrow_back.dart'; + class AppScaffold extends StatelessWidget { final String appBarTitle; final Widget body; final bool isLoading; final bool isShowAppBar; + final Widget bottomSheet; AppScaffold( {@required this.body, this.appBarTitle = '', this.isLoading = false, - this.isShowAppBar = true}); + this.isShowAppBar = true, + this.bottomSheet}); @override Widget build(BuildContext context) { @@ -66,6 +69,7 @@ class AppScaffold extends StatelessWidget { ], ), ), + bottomSheet: bottomSheet, ); } From f5ddfabf5057c52fd06740a824b811797462f81d Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Tue, 28 Jul 2020 17:29:42 +0300 Subject: [PATCH 02/13] Todo list implemented, Appointment details implemented, Appointment Reschedule implemented, Appointment Confirmed implemented --- .../pay_online_button_arabic_disabled.png | Bin 0 -> 5719 bytes .../new-design/pay_online_button_disabled.png | Bin 0 -> 5089 bytes lib/config/config.dart | 3 + lib/config/localized_values.dart | 14 + .../AppoimentAllHistoryResultList.dart | 26 +- .../Appointments/DoctorListResponse.dart | 2 +- .../MyAppointments/AppointmentDetails.dart | 105 ++++- .../Components/AppointmentActions.dart | 3 +- .../MyAppointments/models/BookedButtons.dart | 10 +- lib/pages/ToDoList/ToDo.dart | 430 +++++++++++++++++- lib/pages/ToDoList/widgets/upcomingCard.dart | 182 +++++++- .../appointment_services/GetDoctorsList.dart | 37 +- lib/uitl/translations_delegate_base.dart | 36 ++ .../bottom_navigation/bottom_nav_bar.dart | 2 +- lib/widgets/mobile-no/mobile_no.dart | 1 - 15 files changed, 774 insertions(+), 77 deletions(-) create mode 100644 assets/images/new-design/pay_online_button_arabic_disabled.png create mode 100644 assets/images/new-design/pay_online_button_disabled.png diff --git a/assets/images/new-design/pay_online_button_arabic_disabled.png b/assets/images/new-design/pay_online_button_arabic_disabled.png new file mode 100644 index 0000000000000000000000000000000000000000..0cb6dbf7960119f512b2f69ac985da31bdfb2df6 GIT binary patch literal 5719 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 I`;JHd8>`!%CjbBd literal 0 HcmV?d00001 diff --git a/lib/config/config.dart b/lib/config/config.dart index a68b6f6a..eeb9e6d3 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -31,6 +31,9 @@ const GET_PATIENT_SHARE = "Services/Doctors.svc/REST/GetCheckinScreenAppointment //URL to get patient appointment history const GET_PATIENT_APPOINTMENT_HISTORY = "Services/Doctors.svc/REST/PateintHasAppoimentHistory"; +//URL to confirm appointment +const CONFIRM_APPOINTMENT = "Services/MobileNotifications.svc/REST/ConfirmAppointment"; + const GET_PHARMCY_ITEMS = "/Lists.svc/REST/GetPharmcyItems_Region"; const GET_PHARMACY_LIST = "/Patients.svc/REST/GetPharmcyList"; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 594c8cdb..b513cc35 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -11,6 +11,7 @@ const Map> localizedValues = { 'services': {'en': 'SERVICES', 'ar': 'الخدمات'}, 'mySchedule': {'en': 'My Schedule', 'ar': 'جدولي'}, 'logout': {'en': 'Logout', 'ar': 'تسجيل خروج'}, + 'bookAppo': {'en': 'Book Appointment', 'ar': 'حجز موعد'}, 'searchBy': {'en': 'Search By:', 'ar': 'البحث عن طريق:'}, 'clinic': {'en': 'Clinic', 'ar': 'العيادة'}, @@ -43,7 +44,20 @@ const Map> localizedValues = { 'appoActions': {'en': 'Appointment Actions', 'ar': 'إجراءات الموعد'}, 'date': {'en': 'Date', 'ar': 'التاريخ'}, 'time': {'en': 'Time', 'ar': 'الوقت'}, + 'pendingPayment': {'en': 'Pending for payment', 'ar': 'في انتظار الدفع'}, + 'payNow': {'en': 'Pay Now', 'ar': 'ادفع الآن'}, + 'viewQR': {'en': 'View QR Code', 'ar': 'عرض رمز الاستجابة السريعة'}, + 'instruction': {'en': 'Instructions', 'ar': 'تعليمات'}, + 'livecare': {'en': 'LiveCare', 'ar': 'لايف كير'}, + 'upcoming-noAction': {'en': 'No Action Required', 'ar': 'لا يوجد إجراء مطلوب'}, + 'upcoming-confirm': {'en': 'Please confirm the appointment to avoid cancellation', 'ar': 'يرجى تأكيد الموعد لتفادي الإلغاء'}, + 'upcoming-payment-pending': {'en': 'Online Payment will be Activated before 24 Hours of Appointment Time', 'ar': 'سيتم تفعيل خدمة الدفع الالكتروني قبل 24 ساعة من موعد الحجز'}, + 'upcoming-payment-now': {'en': 'Pay Online now to avoid long waiting queue', 'ar': 'ادفع الآن لتفادي الانتظار'}, + 'upcoming-QR': {'en': 'Use the QR Code to Check-In in hospital', 'ar': 'استخدم الرمز لتسجيل الحضور في المستشفى'}, + 'upcoming-virtual': {'en': 'This is a virtual appointment, Please adhere to the instructions for a seamless experience.', 'ar': 'هذا موعد اتصال مرئي عن بعد ، يرجى اتباع تعليمات الخدمة.'}, + 'upcoming-livecare': {'en': 'This is a LiveCare appointment', 'ar': 'هذا موعد لايف كير'}, + 'upcoming-details': {'en': 'More Details', 'ar': 'المزيد'}, 'login': {'en': 'Login', 'ar': 'تسجيل الدخول'}, 'loginregister': {'en': 'Login / Register', 'ar': 'دخولتسجيل'}, diff --git a/lib/models/Appointments/AppoimentAllHistoryResultList.dart b/lib/models/Appointments/AppoimentAllHistoryResultList.dart index b4f62d1d..4fa19576 100644 --- a/lib/models/Appointments/AppoimentAllHistoryResultList.dart +++ b/lib/models/Appointments/AppoimentAllHistoryResultList.dart @@ -3,7 +3,7 @@ class AppoitmentAllHistoryResultList { int projectID; int appointmentNo; String appointmentDate; - Null appointmentDateN; + dynamic appointmentDateN; int appointmentType; String bookDate; int patientType; @@ -20,18 +20,18 @@ class AppoitmentAllHistoryResultList { int companyID; int bookedBy; String bookedOn; - Null confirmedBy; - Null confirmedOn; - Null arrivalChangedBy; - Null arrivedOn; - Null editedBy; - Null editedOn; - Null doctorName; - Null doctorNameN; + dynamic confirmedBy; + dynamic confirmedOn; + dynamic arrivalChangedBy; + dynamic arrivedOn; + dynamic editedBy; + dynamic editedOn; + dynamic doctorName; + dynamic doctorNameN; String statusDesc; - Null statusDescN; + dynamic statusDescN; bool vitalStatus; - Null vitalSignAppointmentNo; + dynamic vitalSignAppointmentNo; int episodeID; int actualDoctorRate; String clinicName; @@ -53,8 +53,8 @@ class AppoitmentAllHistoryResultList { bool isMedicalReportRequested; bool isOnlineCheckedIN; String latitude; - Null listHISGetContactLensPerscription; - Null listHISGetGlassPerscription; + dynamic listHISGetContactLensPerscription; + dynamic listHISGetGlassPerscription; String longitude; int nextAction; int noOfPatientsRate; diff --git a/lib/models/Appointments/DoctorListResponse.dart b/lib/models/Appointments/DoctorListResponse.dart index 0d7f7bb5..301ad79a 100644 --- a/lib/models/Appointments/DoctorListResponse.dart +++ b/lib/models/Appointments/DoctorListResponse.dart @@ -28,7 +28,7 @@ class DoctorList { String nationalityName; Null nearestFreeSlot; int noOfPatientsRate; - Null originalClinicID; + int originalClinicID; int personRate; int projectDistanceInKiloMeters; String qR; diff --git a/lib/pages/MyAppointments/AppointmentDetails.dart b/lib/pages/MyAppointments/AppointmentDetails.dart index ffb5f6be..4ba8738b 100644 --- a/lib/pages/MyAppointments/AppointmentDetails.dart +++ b/lib/pages/MyAppointments/AppointmentDetails.dart @@ -1,17 +1,26 @@ +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +import 'package:diplomaticquarterapp/pages/BookAppointment/BookConfirm.dart'; import 'package:diplomaticquarterapp/pages/BookAppointment/components/DocAvailableAppointments.dart'; -import 'package:flutter/material.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; import 'package:rating_bar/rating_bar.dart'; -import 'Components/AppointmentActions.dart'; +import 'Components/AppointmentActions.dart'; class AppointmentDetails extends StatefulWidget { + AppoitmentAllHistoryResultList appo; + + AppointmentDetails({@required this.appo}); + @override _AppointmentDetailsState createState() => _AppointmentDetailsState(); } -class _AppointmentDetailsState extends State with SingleTickerProviderStateMixin { - +class _AppointmentDetailsState extends State + with SingleTickerProviderStateMixin { TabController _tabController; bool showFooterButton = false; @@ -23,10 +32,32 @@ class _AppointmentDetailsState extends State with SingleTick @override Widget build(BuildContext context) { - return Scaffold( - appBar: AppBar( - title: Text("Eyad Ismail Abu-Jayab"), - ), + return AppScaffold( + appBarTitle: widget.appo.doctorNameObj, + isShowAppBar: true, + bottomSheet: showFooterButton + ? Container( + width: MediaQuery.of(context).size.width, + height: 50.0, + margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0), + child: ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), + minWidth: MediaQuery.of(context).size.width * 0.7, + height: 45.0, + child: RaisedButton( + color: new Color(0xFF60686b), + textColor: Colors.white, + disabledTextColor: Colors.white, + disabledColor: new Color(0xFFbcc2c4), + onPressed: goToBookConfirm, + child: Text(TranslationBase.of(context).bookNow, + style: TextStyle(fontSize: 18.0)), + ), + ), + ) + : null, body: Container( color: new Color(0xFFf6f6f6), child: SingleChildScrollView( @@ -43,17 +74,17 @@ class _AppointmentDetailsState extends State with SingleTick alignment: Alignment.center, child: ClipRRect( borderRadius: BorderRadius.circular(100.0), - child: Image.network( - "https://hmgwebservices.com/Images/MobileImages/OALAY/2477.png", - fit: BoxFit.fill, - height: 120.0, - width: 120.0), + child: Image.network(widget.appo.doctorImageURL, + fit: BoxFit.fill, height: 120.0, width: 120.0), ), ), Container( margin: EdgeInsets.only(top: 10.0), alignment: Alignment.center, - child: Text("Dr. EYAD ISMAIL ABU-JAYAD", + child: Text( + widget.appo.doctorTitle + + " " + + widget.appo.doctorNameObj, style: TextStyle( fontSize: 20.0, color: Colors.grey[900], @@ -62,7 +93,7 @@ class _AppointmentDetailsState extends State with SingleTick Container( margin: EdgeInsets.only(top: 10.0), alignment: Alignment.center, - child: Text("INTERNAL MEDICINE CLINIC", + child: Text(widget.appo.clinicName, style: TextStyle( fontSize: 12.0, color: Colors.grey[900], @@ -72,7 +103,7 @@ class _AppointmentDetailsState extends State with SingleTick margin: EdgeInsets.only(top: 5.0), alignment: Alignment.center, child: RatingBar.readOnly( - initialRating: 4.0, + initialRating: widget.appo.actualDoctorRate.toDouble(), size: 35.0, filledColor: Colors.yellow[700], emptyColor: Colors.grey[500], @@ -85,7 +116,10 @@ class _AppointmentDetailsState extends State with SingleTick Container( margin: EdgeInsets.only(top: 5.0), alignment: Alignment.center, - child: Text("(2322 Reviews)", + child: Text( + "(" + + widget.appo.noOfPatientsRate.toString() + + " Reviews)", style: TextStyle( fontSize: 14.0, color: Colors.blue[800], @@ -126,7 +160,10 @@ class _AppointmentDetailsState extends State with SingleTick height: MediaQuery.of(context).size.height * 0.8, child: TabBarView( physics: NeverScrollableScrollPhysics(), - children: [AppointmentActions(), DocAvailableAppointments()], + children: [ + AppointmentActions(), + DocAvailableAppointments(doctor: getDoctorObject()) + ], controller: _tabController, ), ), @@ -136,4 +173,36 @@ class _AppointmentDetailsState extends State with SingleTick ), ); } + + void goToBookConfirm() { + if (DocAvailableAppointments.areSlotsAvailable) + navigateToBookConfirm(context); + else + AppToast.showErrorToast(message: "Please select Time Slot to continue"); + } + + Future navigateToBookConfirm(context) async { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => BookConfirm( + doctor: getDoctorObject(), + selectedDate: DocAvailableAppointments.selectedDate, + selectedTime: DocAvailableAppointments.selectedTime))); + } + + DoctorList getDoctorObject() { + DoctorList docObj = new DoctorList(); + docObj.doctorID = widget.appo.doctorID; + docObj.clinicID = widget.appo.clinicID; + docObj.projectID = widget.appo.projectID; + docObj.doctorTitle = widget.appo.doctorTitle; + docObj.name = widget.appo.doctorNameObj; + docObj.clinicName = widget.appo.clinicName; + docObj.speciality = widget.appo.doctorSpeciality; + docObj.actualDoctorRate = widget.appo.actualDoctorRate; + docObj.projectName = widget.appo.projectName; + docObj.originalClinicID = widget.appo.originalClinicID; + return docObj; + } } diff --git a/lib/pages/MyAppointments/Components/AppointmentActions.dart b/lib/pages/MyAppointments/Components/AppointmentActions.dart index 16f50800..6391096c 100644 --- a/lib/pages/MyAppointments/Components/AppointmentActions.dart +++ b/lib/pages/MyAppointments/Components/AppointmentActions.dart @@ -4,7 +4,6 @@ import 'package:diplomaticquarterapp/models/Appointments/appoDetailsButtons.dart import 'package:diplomaticquarterapp/pages/MyAppointments/models/AppointmentModel.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/models/AppointmentType.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/models/BookedButtons.dart'; -import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:flutter/material.dart'; class AppointmentActions extends StatefulWidget { @@ -178,8 +177,8 @@ class _AppointmentActionsState extends State { } Future> _getBookedCheckInAppoActionsList() async { -// BookedButtons.getContext(context); print("_getBookedCheckInAppoActionsList"); + print(BookedButtons.buttons); List buttonsList = []; for (var i = 0; i < BookedButtons.buttons.length; i++) { buttonsList.add(AppoDetailsButton( diff --git a/lib/pages/MyAppointments/models/BookedButtons.dart b/lib/pages/MyAppointments/models/BookedButtons.dart index f10d0a09..56102f37 100644 --- a/lib/pages/MyAppointments/models/BookedButtons.dart +++ b/lib/pages/MyAppointments/models/BookedButtons.dart @@ -1,12 +1,12 @@ +import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; class BookedButtons { - static var context; static var buttons = [ { - "title": TranslationBase.of(context).confirm, - "subtitle": TranslationBase.of(context).appointment, + "title": TranslationBase.of(AppGlobal.context).confirm, + "subtitle": TranslationBase.of(AppGlobal.context).appointment, "icon": "assets/images/new-design/confirm_icon.png", "caller": "confirmAppointment" }, @@ -53,8 +53,4 @@ class BookedButtons { "caller": "goToTodoList(31)" } ]; - - static setContext(context) { - BookedButtons.context = context; - } } diff --git a/lib/pages/ToDoList/ToDo.dart b/lib/pages/ToDoList/ToDo.dart index 4982035f..ddac2a55 100644 --- a/lib/pages/ToDoList/ToDo.dart +++ b/lib/pages/ToDoList/ToDo.dart @@ -1,22 +1,33 @@ +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; -import 'package:diplomaticquarterapp/pages/ToDoList/widgets/upcomingCard.dart'; +import 'package:diplomaticquarterapp/pages/MyAppointments/AppointmentDetails.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:diplomaticquarterapp/widgets/progress_indicator/app_circular_progress_Indeicator.dart'; import 'package:flutter/material.dart'; +import 'package:rating_bar/rating_bar.dart'; class ToDo extends StatefulWidget { DoctorsListService service; List appoList = []; + var languageID; @override _ToDoState createState() => _ToDoState(); } class _ToDoState extends State { + AppSharedPreferences sharedPref = AppSharedPreferences(); + + bool isLoading = false; + @override void initState() { + print("initState"); widget.service = new DoctorsListService(); getPatientAppointmentHistory(); super.initState(); @@ -26,29 +37,383 @@ class _ToDoState extends State { Widget build(BuildContext context) { return AppScaffold( appBarTitle: TranslationBase.of(context).todoList, - body: SingleChildScrollView( - child: Container( - child: ListView.builder( - scrollDirection: Axis.vertical, - shrinkWrap: true, - physics: ScrollPhysics(), - padding: EdgeInsets.all(0.0), - itemCount: widget.appoList.length, - itemBuilder: (context, index) { - return TodoListCard( - appo: widget.appoList[index], - ); - }, - ), - ), - ), + body: isLoading == false + ? SingleChildScrollView( + child: Container( + child: ListView.builder( + scrollDirection: Axis.vertical, + shrinkWrap: true, + physics: ScrollPhysics(), + padding: EdgeInsets.all(0.0), + itemCount: widget.appoList.length, + itemBuilder: (context, index) { + return Container( + margin: EdgeInsets.all(10.0), + child: Card( + margin: EdgeInsets.fromLTRB(8.0, 0.0, 8.0, 8.0), + color: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + child: Container( + width: MediaQuery.of(context).size.width, + padding: EdgeInsets.all(10.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + Row( + children: [ + Image.asset( + "assets/images/new-design/time_icon.png", + width: 20.0, + height: 20.0), + Container( + margin: EdgeInsets.only( + left: 10.0, right: 30.0), + child: Text( + getDate(widget + .appoList[index].appointmentDate), + style: TextStyle(fontSize: 12.0)), + ), + Image.asset( + "assets/images/new-design/hospital_address_icon.png", + width: 20.0, + height: 20.0), + Container( + margin: EdgeInsets.only( + left: 10.0, right: 10.0), + child: Text( + widget.appoList[index].projectName, + style: TextStyle(fontSize: 12.0)), + ), + ], + ), + Container( + margin: EdgeInsets.only(top: 5.0), + child: Divider( + color: Colors.grey[500], + ), + ), + Flex( + direction: Axis.horizontal, + children: [ + Expanded( + flex: 1, + child: Container( + height: + MediaQuery.of(context).size.height * + 0.1, + margin: EdgeInsets.only(top: 5.0), + child: ClipRRect( + borderRadius: + BorderRadius.circular(100.0), + child: Image.network( + widget + .appoList[index].doctorImageURL, + fit: BoxFit.fill), + ), + ), + ), + Expanded( + flex: 3, + child: Container( + margin: EdgeInsets.only( + top: 20.0, left: 20.0, right: 20.0), + child: Column( + crossAxisAlignment: + CrossAxisAlignment.start, + children: [ + Text( + widget.appoList[index] + .doctorTitle + + " " + + widget.appoList[index] + .doctorNameObj, + style: TextStyle( + fontSize: 14.0, + color: Colors.black, + fontWeight: FontWeight.bold, + letterSpacing: 1.0)), + Container( + margin: EdgeInsets.only( + top: 3.0, bottom: 3.0), + child: Text( + getDoctorSpeciality(widget + .appoList[index] + .doctorSpeciality) + .trim(), + style: TextStyle( + fontSize: 12.0, + color: Colors.grey[600], + letterSpacing: 1.0)), + ), + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + mainAxisSize: MainAxisSize.max, + children: [ + RatingBar.readOnly( + initialRating: widget.appoList[index].actualDoctorRate.toDouble(), + size: 20.0, + filledColor: Colors.yellow[700], + emptyColor: Colors.grey[500], + isHalfAllowed: true, + halfFilledIcon: Icons.star_half, + filledIcon: Icons.star, + emptyIcon: Icons.star, + ), + ], + ), + ], + ), + ), + ), + Expanded( + flex: 1, + child: InkWell( + onTap: () => performNextAction( + widget.appoList[index]), + child: Container( + margin: EdgeInsets.only(top: 20.0), + child: Column( + children: [ + Image.asset( + getNextActionImage(widget + .appoList[index] + .nextAction), + width: 50.0, + height: 50.0), + Container( + margin: EdgeInsets.only(top: 5.0), + child: Text( + getNextActionText(widget + .appoList[index] + .nextAction), + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 12.0)), + ) + ], + ), + ), + ), + ) + ], + ), + Divider( + color: Colors.grey[500], + ), + Flex( + direction: Axis.horizontal, + children: [ + Expanded( + flex: 2, + child: Container( + child: Text( + getNextActionDescription(widget + .appoList[index].nextAction), + style: TextStyle( + fontSize: 12.0, + color: Colors.grey[700])), + ), + ), + Expanded( + flex: 1, + child: GestureDetector( + onTap: () { + navigateToAppointmentDetails( + context, widget.appoList[index]); + }, + child: Container( + child: Text( + TranslationBase.of(context) + .upcomingDetails, + textAlign: TextAlign.end, + style: TextStyle( + fontSize: 12.0, + color: Colors.red[600], + decoration: + TextDecoration.underline)), + ), + ), + ) + ], + ) + ], + ), + ), + ), + ); + }, + ), + ), + ) + : AppCircularProgressIndicator(), ); } + String getNextActionImage(nextAction) { + switch (nextAction) { + case 0: + return "No Action"; + break; + case 10: + return "assets/images/new-design/confirm_button.png"; + break; + + case 15: + return widget.languageID == 'ar' + ? "assets/images/new-design/pay_online_button_arabic_disabled.png" + : "assets/images/new-design/pay_online_button_disabled.png"; + break; + + case 20: + return widget.languageID == 'ar' + ? "assets/images/new-design/pay_online_button_arabic.png" + : "assets/images/new-design/pay_online_button.png"; + break; + + case 30: + return "assets/images/new-design/qr_code_button.png"; + break; + + case 40: + return "assets/images/new-design/video_call_instruction.png"; + break; + + case 50: + return "assets/images/new-design/liveCare_logo_icon.png"; + break; + + default: + return ""; + } + } + + performNextAction(AppoitmentAllHistoryResultList appo) { + switch (appo.nextAction) { + case 10: + confirmAppointment(appo); + break; + } + } + + String getNextActionText(nextAction) { + switch (nextAction) { + case 0: + return "No Action"; + break; + case 10: + return TranslationBase.of(context).confirm; + break; + + case 15: + return TranslationBase.of(context).pendingPayment; + break; + + case 20: + return TranslationBase.of(context).payNow; + break; + + case 30: + return TranslationBase.of(context).viewQR; + break; + + case 40: + return TranslationBase.of(context).instruction; + break; + + case 50: + return TranslationBase.of(context).livecare; + break; + + default: + return ""; + } + } + + String getNextActionDescription(nextAction) { + switch (nextAction) { + case 0: + return "No Action"; + break; + case 10: + return TranslationBase.of(context).upcomingConfirm; + break; + + case 15: + return TranslationBase.of(context).upcomingPaymentPending; + break; + + case 20: + return TranslationBase.of(context).upcomingPaymentNow; + break; + + case 30: + return TranslationBase.of(context).upcomingQR; + break; + + case 40: + return TranslationBase.of(context).upcomingVirtual; + break; + + case 50: + return TranslationBase.of(context).upcomingLivecare; + break; + + default: + return ""; + } + } + + getLanguageID() async { + var languageID = await sharedPref.getString(APP_LANGUAGE); + setState(() { + widget.languageID = languageID; + }); + } + + String getDate(String date) { + DateTime dateObj = DateUtil.convertStringToDate(date); + return DateUtil.getWeekDay(dateObj.weekday) + + ", " + + dateObj.day.toString() + + " " + + DateUtil.getMonth(dateObj.month) + + " " + + dateObj.year.toString() + + " " + + dateObj.hour.toString() + + ":" + + getMinute(dateObj); + } + + String getMinute(DateTime dateObj) { + if (dateObj.minute == 0) { + return dateObj.minute.toString() + "0"; + } else { + return dateObj.minute.toString(); + } + } + + String getDoctorSpeciality(List docSpecial) { + String docSpeciality = ""; + docSpecial.forEach((v) { + docSpeciality = docSpeciality + v + "\n"; + }); + return docSpeciality; + } + + Future navigateToAppointmentDetails(context, appo) async { + Navigator.push( + context, MaterialPageRoute(builder: (context) => AppointmentDetails(appo: appo))); + } + getPatientAppointmentHistory() { + loading(true); widget.service.getPatientAppointmentHistory(true).then((res) { print(res['AppoimentAllHistoryResultList']); - if (res['MessageStatus'] == 1) { setState(() { if (res['AppoimentAllHistoryResultList'].length != 0) { @@ -59,12 +424,39 @@ class _ToDoState extends State { }); } else {} }); - print(widget.appoList.length); + loading(false); } else { AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + loading(false); } }).catchError((err) { print(err); + loading(false); + }); + } + + confirmAppointment(AppoitmentAllHistoryResultList appo) { + loading(true); + widget.service + .confirmAppointment(appo.appointmentNo, appo.clinicID, appo.projectID) + .then((res) { + if (res['MessageStatus'] == 1) { + AppToast.showSuccessToast(message: res['ErrorEndUserMessage']); + loading(false); + getPatientAppointmentHistory(); + } else { + AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + loading(false); + } + }).catchError((err) { + print(err); + loading(false); + }); + } + + loading(bool flag) { + setState(() { + isLoading = flag; }); } } diff --git a/lib/pages/ToDoList/widgets/upcomingCard.dart b/lib/pages/ToDoList/widgets/upcomingCard.dart index 324f9c3e..1b4a4cc3 100644 --- a/lib/pages/ToDoList/widgets/upcomingCard.dart +++ b/lib/pages/ToDoList/widgets/upcomingCard.dart @@ -1,22 +1,30 @@ +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/AppointmentDetails.dart'; +import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:flutter/material.dart'; import 'package:rating_bar/rating_bar.dart'; class TodoListCard extends StatefulWidget { - AppoitmentAllHistoryResultList appo; + var languageID; + final VoidCallback onListUpdated; + - TodoListCard({@required this.appo}); + TodoListCard({@required this.appo, this.onListUpdated}); @override _TodoListCardState createState() => _TodoListCardState(); } class _TodoListCardState extends State { + AppSharedPreferences sharedPref = AppSharedPreferences(); @override void initState() { +// widget.onListUpdated(); super.initState(); } @@ -25,7 +33,7 @@ class _TodoListCardState extends State { return Container( margin: EdgeInsets.all(10.0), child: Card( - margin: EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), + margin: EdgeInsets.fromLTRB(8.0, 0.0, 8.0, 8.0), color: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), @@ -43,7 +51,7 @@ class _TodoListCardState extends State { width: 20.0, height: 20.0), Container( margin: EdgeInsets.only(left: 10.0, right: 30.0), - child: Text("Monday, 31 August 2020 09:30", + child: Text(getDate(widget.appo.appointmentDate), style: TextStyle(fontSize: 12.0)), ), Image.asset( @@ -73,8 +81,7 @@ class _TodoListCardState extends State { margin: EdgeInsets.only(top: 5.0), child: ClipRRect( borderRadius: BorderRadius.circular(100.0), - child: Image.network( - widget.appo.doctorImageURL, + child: Image.network(widget.appo.doctorImageURL, fit: BoxFit.fill), ), ), @@ -87,7 +94,10 @@ class _TodoListCardState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text(widget.appo.doctorTitle + " " + widget.appo.doctorNameObj, + Text( + widget.appo.doctorTitle + + " " + + widget.appo.doctorNameObj, style: TextStyle( fontSize: 14.0, color: Colors.black, @@ -95,7 +105,7 @@ class _TodoListCardState extends State { letterSpacing: 1.0)), Container( margin: EdgeInsets.only(top: 3.0, bottom: 3.0), - child: Text("General Practioner", + child: Text(getDoctorSpeciality(widget.appo.doctorSpeciality).trim(), style: TextStyle( fontSize: 12.0, color: Colors.grey[600], @@ -124,17 +134,17 @@ class _TodoListCardState extends State { Expanded( flex: 1, child: Container( -// height: MediaQuery.of(context).size.height * 0.12, margin: EdgeInsets.only(top: 20.0), child: Column( children: [ Image.asset( - "assets/images/new-design/confirm_button.png", + getNextActionImage(widget.appo.nextAction), width: 50.0, height: 50.0), Container( margin: EdgeInsets.only(top: 5.0), - child: Text("Confirm", + child: Text( + getNextActionText(widget.appo.nextAction), textAlign: TextAlign.center, style: TextStyle(fontSize: 12.0)), ) @@ -154,7 +164,7 @@ class _TodoListCardState extends State { flex: 2, child: Container( child: Text( - "Please confirm the appointment to avoid cancellation", + getNextActionDescription(widget.appo.nextAction), style: TextStyle( fontSize: 12.0, color: Colors.grey[700])), ), @@ -166,7 +176,7 @@ class _TodoListCardState extends State { navigateToAppointmentDetails(context); }, child: Container( - child: Text("More Details", + child: Text(TranslationBase.of(context).upcomingDetails, textAlign: TextAlign.end, style: TextStyle( fontSize: 12.0, @@ -184,9 +194,153 @@ class _TodoListCardState extends State { ); } + String getNextActionImage(nextAction) { + switch (nextAction) { + case 0: + return "No Action"; + break; + case 10: + return "assets/images/new-design/confirm_button.png"; + break; + + case 15: + return widget.languageID == 'ar' + ? "assets/images/new-design/pay_online_button_arabic_disabled.png" + : "assets/images/new-design/pay_online_button_disabled.png"; + break; + + case 20: + return widget.languageID == 'ar' + ? "assets/images/new-design/pay_online_button_arabic.png" + : "assets/images/new-design/pay_online_button.png"; + break; + + case 30: + return "assets/images/new-design/qr_code_button.png"; + break; + + case 40: + return "assets/images/new-design/video_call_instruction.png"; + break; + + case 50: + return "assets/images/new-design/liveCare_logo_icon.png"; + break; + + default: + return ""; + } + } + + String getNextActionText(nextAction) { + switch (nextAction) { + case 0: + return "No Action"; + break; + case 10: + return TranslationBase.of(context).confirm; + break; + + case 15: + return TranslationBase.of(context).pendingPayment; + break; + + case 20: + return TranslationBase.of(context).payNow; + break; + + case 30: + return TranslationBase.of(context).viewQR; + break; + + case 40: + return TranslationBase.of(context).instruction; + break; + + case 50: + return TranslationBase.of(context).livecare; + break; + + default: + return ""; + } + } + + String getNextActionDescription(nextAction) { + switch (nextAction) { + case 0: + return "No Action"; + break; + case 10: + return TranslationBase.of(context).upcomingConfirm; + break; + + case 15: + return TranslationBase.of(context).upcomingPaymentPending; + break; + + case 20: + return TranslationBase.of(context).upcomingPaymentNow; + break; + + case 30: + return TranslationBase.of(context).upcomingQR; + break; + + case 40: + return TranslationBase.of(context).upcomingVirtual; + break; + + case 50: + return TranslationBase.of(context).upcomingLivecare; + break; + + default: + return ""; + } + } + + getLanguageID() async { + var languageID = await sharedPref.getString(APP_LANGUAGE); + setState(() { + widget.languageID = languageID; + }); + } + + String getDate(String date) { + DateTime dateObj = DateUtil.convertStringToDate(date); + return DateUtil.getWeekDay(dateObj.weekday) + + ", " + + dateObj.day.toString() + + " " + + DateUtil.getMonth(dateObj.month) + + " " + + dateObj.year.toString() + + " " + + dateObj.hour.toString() + + ":" + + getMinute(dateObj); + } + + String getMinute(DateTime dateObj) { + if(dateObj.minute == 0) { + return dateObj.minute.toString() + "0"; + } else { + return dateObj.minute.toString(); + } + } + + + String getDoctorSpeciality(List docSpecial) { + String docSpeciality = ""; + docSpecial.forEach((v) { + docSpeciality = docSpeciality + v + "\n"; + }); + return docSpeciality; + } + Future navigateToAppointmentDetails(context) async { Navigator.push( context, MaterialPageRoute(builder: (context) => AppointmentDetails())); } - } diff --git a/lib/services/appointment_services/GetDoctorsList.dart b/lib/services/appointment_services/GetDoctorsList.dart index 387d06d5..6511c189 100644 --- a/lib/services/appointment_services/GetDoctorsList.dart +++ b/lib/services/appointment_services/GetDoctorsList.dart @@ -1,7 +1,6 @@ import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart'; -import 'package:diplomaticquarterapp/models/Appointments/InsertAppointmentRequest.dart'; import 'package:diplomaticquarterapp/models/Request.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; @@ -270,4 +269,40 @@ class DoctorsListService extends BaseService { return Future.value(localRes); } + Future confirmAppointment(int appoNo, int clinicID, int projectID) async { + Map request; + var languageID = await sharedPref.getString(APP_LANGUAGE); + Request req = appGlobal.getPublicRequest(); + + request = { + "AppointmentNumber": appoNo, + "ClinicID": clinicID, + "ProjectID": projectID, + "ConfirmationBy": 102, + "VersionID": req.VersionID, + "Channel": req.Channel, + "LanguageID": languageID == 'ar' ? 1 : 2, + "IPAdress": req.IPAdress, + "generalid": req.generalid, + "PatientOutSA": 0, + "SessionID": "YckwoXhUmWBsnHKEKig", + "isDentalAllowedBackend": false, + "DeviceTypeID": 1, + "PatientID": 1231755, + "TokenID": "@dm!n", + "PatientTypeID": 1, + "PatientType": 1 + }; + + dynamic localRes; + + await baseAppClient.post(CONFIRM_APPOINTMENT, + onSuccess: (response, statusCode) async { + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: request); + return Future.value(localRes); + } + } diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 314dd9ba..ce4f96e5 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -155,10 +155,46 @@ class TranslationBase { String get gregorianDate => localizedValues['gregorian-date'][locale.languageCode]; + String get searchMedicine => localizedValues['searchMedicine'][locale.languageCode]; + String get searchMedicineHere => localizedValues['searchMedicineHere'][locale.languageCode]; + + String get pendingPayment => + localizedValues['pendingPayment'][locale.languageCode]; + + String get payNow => localizedValues['payNow'][locale.languageCode]; + + String get viewQR => localizedValues['viewQR'][locale.languageCode]; + + String get instruction => localizedValues['instruction'][locale.languageCode]; + + String get livecare => localizedValues['livecare'][locale.languageCode]; + + String get upcomingNoAction => + localizedValues['upcoming-noAction'][locale.languageCode]; + + String get upcomingConfirm => + localizedValues['upcoming-confirm'][locale.languageCode]; + + String get upcomingPaymentPending => + localizedValues['upcoming-payment-pending'][locale.languageCode]; + + String get upcomingPaymentNow => + localizedValues['upcoming-payment-now'][locale.languageCode]; + + String get upcomingQR => localizedValues['upcoming-QR'][locale.languageCode]; + + String get upcomingVirtual => + localizedValues['upcoming-virtual'][locale.languageCode]; + + String get upcomingLivecare => + localizedValues['upcoming-livecare'][locale.languageCode]; + + String get upcomingDetails => + localizedValues['upcoming-details'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/bottom_navigation/bottom_nav_bar.dart b/lib/widgets/bottom_navigation/bottom_nav_bar.dart index 5966ec46..dd186c56 100644 --- a/lib/widgets/bottom_navigation/bottom_nav_bar.dart +++ b/lib/widgets/bottom_navigation/bottom_nav_bar.dart @@ -97,7 +97,7 @@ class _BottomNavBarState extends State { changeIndex: _changeIndex, index: _index, currentIndex: 3, - name: TranslationBase.of(context).services, + name: TranslationBase.of(context).todoList, ) ], ), diff --git a/lib/widgets/mobile-no/mobile_no.dart b/lib/widgets/mobile-no/mobile_no.dart index 2c17a669..d916f570 100644 --- a/lib/widgets/mobile-no/mobile_no.dart +++ b/lib/widgets/mobile-no/mobile_no.dart @@ -1,4 +1,3 @@ -import 'package:diplomaticquarterapp/config/size_config.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; From 049d455e3cd711e87e1f73cfefa8f7118a046dcc Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Tue, 4 Aug 2020 16:55:56 +0300 Subject: [PATCH 03/13] Implementing appointment details functions --- assets/images/new-design/Invoice.png | Bin 0 -> 2384 bytes .../new-design/generate_visit_ticket.png | Bin 0 -> 1313 bytes assets/images/new-design/survey.png | Bin 0 -> 5883 bytes lib/config/config.dart | 5 +- lib/config/localized_values.dart | 10 + lib/main.dart | 2 +- .../Appointments/DoctorListResponse.dart | 16 +- lib/pages/BookAppointment/BookConfirm.dart | 26 ++- .../components/DocAvailableAppointments.dart | 13 +- .../MyAppointments/AppointmentDetails.dart | 14 +- .../Components/AppointmentActions.dart | 200 ++++++++++++------ .../models/AppointmentType.dart | 16 +- .../MyAppointments/models/ArrivedButtons.dart | 61 ++++++ .../models/ArrivedButtonsAllowCheckIn.dart | 61 ++++++ .../MyAppointments/models/BookedButtons.dart | 33 +-- .../models/BookedButtonsAllowCheckIn.dart | 49 +++++ .../models/ConfirmedButtons.dart | 49 +++++ .../models/ConfirmedButtonsAllowCheckIn.dart | 43 ++++ lib/pages/ToDoList/ToDo.dart | 1 - .../appointment_services/GetDoctorsList.dart | 44 ++++ lib/uitl/date_uitl.dart | 11 + lib/uitl/translations_delegate_base.dart | 30 +++ lib/widgets/dialogs/confirm_dialog.dart | 56 +++++ 23 files changed, 619 insertions(+), 121 deletions(-) create mode 100644 assets/images/new-design/Invoice.png create mode 100644 assets/images/new-design/generate_visit_ticket.png create mode 100644 assets/images/new-design/survey.png create mode 100644 lib/pages/MyAppointments/models/ArrivedButtons.dart create mode 100644 lib/pages/MyAppointments/models/ArrivedButtonsAllowCheckIn.dart create mode 100644 lib/pages/MyAppointments/models/BookedButtonsAllowCheckIn.dart create mode 100644 lib/pages/MyAppointments/models/ConfirmedButtons.dart create mode 100644 lib/pages/MyAppointments/models/ConfirmedButtonsAllowCheckIn.dart create mode 100644 lib/widgets/dialogs/confirm_dialog.dart diff --git a/assets/images/new-design/Invoice.png b/assets/images/new-design/Invoice.png new file mode 100644 index 0000000000000000000000000000000000000000..f109717e1ae081bab085da55a2ac870ffc3a86e8 GIT binary patch literal 2384 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 Xn=X*%*$pHaa@G6DGz` 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 localizedValues = { 'viewQR': {'en': 'View QR Code', 'ar': 'عرض رمز الاستجابة السريعة'}, 'instruction': {'en': 'Instructions', 'ar': 'تعليمات'}, 'livecare': {'en': 'LiveCare', 'ar': 'لايف كير'}, + 'cancelAppoMsg': {'en': 'Are you sure you want to cancel this appointment?', 'ar': 'هل أنت متأكد أنك تريد إلغاء هذا الموعد؟'}, 'upcoming-noAction': {'en': 'No Action Required', 'ar': 'لا يوجد إجراء مطلوب'}, 'upcoming-confirm': {'en': 'Please confirm the appointment to avoid cancellation', 'ar': 'يرجى تأكيد الموعد لتفادي الإلغاء'}, @@ -58,6 +59,15 @@ const Map> localizedValues = { 'upcoming-virtual': {'en': 'This is a virtual appointment, Please adhere to the instructions for a seamless experience.', 'ar': 'هذا موعد اتصال مرئي عن بعد ، يرجى اتباع تعليمات الخدمة.'}, 'upcoming-livecare': {'en': 'This is a LiveCare appointment', 'ar': 'هذا موعد لايف كير'}, 'upcoming-details': {'en': 'More Details', 'ar': 'المزيد'}, + 'reschedule': {'en': 'Reschedule', 'ar': 'إعادة جدولة'}, + 'raise': {'en': 'Raise', 'ar': 'رفع'}, + 'complaint': {'en': 'Complaint', 'ar': 'شكوى'}, + 'add': {'en': 'Add', 'ar': 'إضافة'}, + 'reminder': {'en': 'Reminder', 'ar': 'تذكير'}, + 'location': {'en': 'Locations', 'ar': 'مواقعنا'}, + 'online': {'en': 'Online', 'ar': 'الالكترونية'}, + 'payment': {'en': 'Payment', 'ar': 'الدفع'}, + 'cancel-nocaps': {'en': 'Cancel', 'ar': 'الغاء'}, 'login': {'en': 'Login', 'ar': 'تسجيل الدخول'}, 'loginregister': {'en': 'Login / Register', 'ar': 'دخولتسجيل'}, diff --git a/lib/main.dart b/lib/main.dart index 06cf9652..20b8417c 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -3,10 +3,10 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:flutter/material.dart'; import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:provider/provider.dart'; + import 'config/size_config.dart'; import 'core/viewModels/project_view_model.dart'; import 'locator.dart'; -import 'pages/landing/landing_page.dart'; void main() { setupLocator(); diff --git a/lib/models/Appointments/DoctorListResponse.dart b/lib/models/Appointments/DoctorListResponse.dart index 301ad79a..2f4ee2a0 100644 --- a/lib/models/Appointments/DoctorListResponse.dart +++ b/lib/models/Appointments/DoctorListResponse.dart @@ -8,12 +8,12 @@ class DoctorList { String projectName; int actualDoctorRate; int clinicRoomNo; - Null date; - Null dayName; + dynamic date; + dynamic dayName; int doctorID; String doctorImageURL; - Null doctorProfile; - Null doctorProfileInfo; + dynamic doctorProfile; + dynamic doctorProfileInfo; int doctorRate; int gender; String genderDescription; @@ -26,18 +26,18 @@ class DoctorList { String nationalityFlagURL; String nationalityID; String nationalityName; - Null nearestFreeSlot; + dynamic nearestFreeSlot; int noOfPatientsRate; int originalClinicID; int personRate; int projectDistanceInKiloMeters; String qR; - Null qRString; + dynamic qRString; int rateNumber; - Null serviceID; + dynamic serviceID; String setupID; List speciality; - Null workingHours; + dynamic workingHours; DoctorList( {this.clinicID, diff --git a/lib/pages/BookAppointment/BookConfirm.dart b/lib/pages/BookAppointment/BookConfirm.dart index 2666f327..c59cdd12 100644 --- a/lib/pages/BookAppointment/BookConfirm.dart +++ b/lib/pages/BookAppointment/BookConfirm.dart @@ -1,9 +1,11 @@ +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; @@ -354,6 +356,20 @@ class _BookConfirmState extends State { ); } + cancelAppointment(DoctorList docObject, AppoitmentAllHistoryResultList appo) { + ConfirmDialog.closeAlertDialog(context); + DoctorsListService service = new DoctorsListService(); + service.cancelAppointment(appo).then((res) { + if (res['MessageStatus'] == 1) { + insertAppointment(context, docObject); + } else { + AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + } + }).catchError((err) { + print(err); + }); + } + insertAppointment(context, DoctorList docObject) { widget.service .insertAppointment(docObject.doctorID, docObject.clinicID, @@ -368,7 +384,14 @@ class _BookConfirmState extends State { AppToast.showErrorToast(message: res['ErrorEndUserMessage']); } }).catchError((err) { - print(err); + ConfirmDialog dialog = new ConfirmDialog( + context: context, + confirmMessage: err, + okText: TranslationBase.of(context).confirm, + cancelText: TranslationBase.of(context).cancel_nocaps, + okFunction: () => {cancelAppointment(docObject, err)}, + cancelFunction: () => {}); + dialog.showAlertDialog(context); }); } @@ -427,7 +450,6 @@ class _BookConfirmState extends State { Future navigateToBookSuccess(context, DoctorList docObject, PatientShareResponse patientShareResponse) async { - print(widget.appoDateFormatted); // print(widget.appoTimeFormatted); diff --git a/lib/pages/BookAppointment/components/DocAvailableAppointments.dart b/lib/pages/BookAppointment/components/DocAvailableAppointments.dart index df5d1b75..6a4ce655 100644 --- a/lib/pages/BookAppointment/components/DocAvailableAppointments.dart +++ b/lib/pages/BookAppointment/components/DocAvailableAppointments.dart @@ -6,6 +6,7 @@ import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; +import 'package:loading_dialog/loading_dialog.dart'; import 'package:table_calendar/table_calendar.dart'; import '../../../uitl/date_uitl.dart'; @@ -252,8 +253,7 @@ class _DocAvailableAppointmentsState extends State DocAvailableAppointments.selectedTime = dayEvents[selectedButtonIndex].isoTime; - _scrollController.animateTo(0.0, duration: new Duration(seconds: 1), curve: Curves.ease); - +// _scrollController.animateTo(0.0, duration: new Duration(seconds: 1), curve: Curves.ease); }); } @@ -274,7 +274,8 @@ class _DocAvailableAppointmentsState extends State _eventsParsed = Map.fromIterable(slotsList, key: (e) => e.slot, value: (e) => e.event); setState(() { - DocAvailableAppointments.selectedDate = dateFormatter.format(DateUtil.convertStringToDate(freeSlotsResponse[0])); + DocAvailableAppointments.selectedDate = dateFormatter + .format(DateUtil.convertStringToDate(freeSlotsResponse[0])); selectedDate = DateUtil.getMonthDayYearDateFormatted( DateUtil.convertStringToDate(freeSlotsResponse[0])); selectedDateJSON = freeSlotsResponse[0]; @@ -293,8 +294,7 @@ class _DocAvailableAppointmentsState extends State onPressed: () { setState(() { selectedButtonIndex = index; - DocAvailableAppointments.selectedTime = - dayEvents[index].isoTime; + DocAvailableAppointments.selectedTime = dayEvents[index].isoTime; print(DocAvailableAppointments.selectedTime); }); }, @@ -310,8 +310,7 @@ class _DocAvailableAppointmentsState extends State onPressed: () { setState(() { selectedButtonIndex = index; - DocAvailableAppointments.selectedTime = - dayEvents[index].isoTime; + DocAvailableAppointments.selectedTime = dayEvents[index].isoTime; print(DocAvailableAppointments.selectedTime); }); }, diff --git a/lib/pages/MyAppointments/AppointmentDetails.dart b/lib/pages/MyAppointments/AppointmentDetails.dart index 4ba8738b..4e409cb5 100644 --- a/lib/pages/MyAppointments/AppointmentDetails.dart +++ b/lib/pages/MyAppointments/AppointmentDetails.dart @@ -12,6 +12,7 @@ import 'Components/AppointmentActions.dart'; class AppointmentDetails extends StatefulWidget { AppoitmentAllHistoryResultList appo; + static bool isLoading = false; AppointmentDetails({@required this.appo}); @@ -21,7 +22,7 @@ class AppointmentDetails extends StatefulWidget { class _AppointmentDetailsState extends State with SingleTickerProviderStateMixin { - TabController _tabController; + static TabController _tabController; bool showFooterButton = false; @override @@ -30,6 +31,13 @@ class _AppointmentDetailsState extends State super.initState(); } + @override + void dispose() { + // TODO: implement dispose + super.dispose(); + _tabController.dispose(); + } + @override Widget build(BuildContext context) { return AppScaffold( @@ -161,7 +169,7 @@ class _AppointmentDetailsState extends State child: TabBarView( physics: NeverScrollableScrollPhysics(), children: [ - AppointmentActions(), + AppointmentActions(appo: widget.appo, tabController: _tabController), DocAvailableAppointments(doctor: getDoctorObject()) ], controller: _tabController, @@ -191,6 +199,8 @@ class _AppointmentDetailsState extends State selectedTime: DocAvailableAppointments.selectedTime))); } + + DoctorList getDoctorObject() { DoctorList docObj = new DoctorList(); docObj.doctorID = widget.appo.doctorID; diff --git a/lib/pages/MyAppointments/Components/AppointmentActions.dart b/lib/pages/MyAppointments/Components/AppointmentActions.dart index 6391096c..fb5fc7ff 100644 --- a/lib/pages/MyAppointments/Components/AppointmentActions.dart +++ b/lib/pages/MyAppointments/Components/AppointmentActions.dart @@ -1,27 +1,34 @@ -import 'dart:convert'; - +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/appoDetailsButtons.dart'; -import 'package:diplomaticquarterapp/pages/MyAppointments/models/AppointmentModel.dart'; +import 'package:diplomaticquarterapp/pages/MyAppointments/AppointmentDetails.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/models/AppointmentType.dart'; +import 'package:diplomaticquarterapp/pages/MyAppointments/models/ArrivedButtons.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/models/BookedButtons.dart'; +import 'package:diplomaticquarterapp/pages/MyAppointments/models/BookedButtonsAllowCheckIn.dart'; +import 'package:diplomaticquarterapp/pages/MyAppointments/models/ConfirmedButtons.dart'; +import 'package:diplomaticquarterapp/pages/MyAppointments/models/ConfirmedButtonsAllowCheckIn.dart'; +import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:flutter/material.dart'; class AppointmentActions extends StatefulWidget { + AppoitmentAllHistoryResultList appo; + TabController tabController; + + AppointmentActions({@required this.appo, @required this.tabController}); + @override _AppointmentActionsState createState() => _AppointmentActionsState(); } class _AppointmentActionsState extends State { List appoButtonsList = []; - var appointment = new AppointmentModel(); @override void initState() { - appointment.PatientStatusType = 0; - appointment.IsOnlineCheckedIN = true; - _getAppointmentActionButtons(); - super.initState(); } @@ -86,9 +93,9 @@ class _AppointmentActionsState extends State { Container( alignment: Alignment.bottomRight, margin: - EdgeInsets.fromLTRB(0.0, 20.0, 10.0, 8.0), + EdgeInsets.fromLTRB(0.0, 10.0, 10.0, 8.0), child: Image.asset(e.icon, - width: 40.0, height: 40.0), + width: 45.0, height: 45.0), ), ], ), @@ -104,12 +111,33 @@ class _AppointmentActionsState extends State { _handleButtonClicks(AppoDetailsButton) { print(AppoDetailsButton.caller); + + switch (AppoDetailsButton.caller) { + case "openReschedule": + widget.tabController.animateTo((widget.tabController.index + 1) % 2); + break; + + case "onCancelAppointment": + ConfirmDialog dialog = new ConfirmDialog( + context: context, + confirmMessage: TranslationBase.of(context).cancelAppoMsg, + okText: TranslationBase.of(context).confirm, + cancelText: TranslationBase.of(context).cancel_nocaps, + okFunction: () => {cancelAppointment()}, + cancelFunction: () => {}); + dialog.showAlertDialog(context); + break; + + case "confirmAppointment": + confirmAppointment(); + break; + } } _getAppointmentActionButtons() { - if (appointment != null) { + if (widget.appo != null) { if (isConfirmed()) { - if (appointment.IsOnlineCheckedIN) { + if (widget.appo.isOnlineCheckedIN) { _getConfirmedCheckInAppoActionsList(); } else { _getConfirmedAppoActionsList(); @@ -118,7 +146,7 @@ class _AppointmentActionsState extends State { print("isConfirmed Null"); } if (isBooked()) { - if (appointment.IsOnlineCheckedIN) { + if (widget.appo.isOnlineCheckedIN) { _getBookedCheckInAppoActionsList(); } else { _getBookedAppoActionsList(); @@ -127,7 +155,7 @@ class _AppointmentActionsState extends State { print("isBooked Null"); } if (isArrived()) { - if (appointment.ClinicID == 17) { + if (widget.appo.clinicID == 17) { _getArrivedInvoiceAppoActionsList(); } else { _getArrivedAppoActionsList(); @@ -141,34 +169,31 @@ class _AppointmentActionsState extends State { } bool isConfirmed() { - return AppointmentType.isConfirmed(this.appointment); + return AppointmentType.isConfirmed(widget.appo); } bool isArrived() { - return AppointmentType.isArrived(this.appointment); + return AppointmentType.isArrived(widget.appo); } bool isCheckedIn() { - return this.appointment.IsOnlineCheckedIN; + return widget.appo.isOnlineCheckedIN; } bool isBooked() { - return AppointmentType.isBooked(this.appointment); + return AppointmentType.isBooked(widget.appo); } Future> _getBookedAppoActionsList() async { print("_getBookedAppoActionsList"); - var bookButtonsJson; + print(BookedButtons.buttons); List buttonsList = []; - String data = await DefaultAssetBundle.of(context) - .loadString("assets/json/bookedButtons.json"); - bookButtonsJson = json.decode(data); - for (var i = 0; i < bookButtonsJson.length; i++) { + for (var i = 0; i < BookedButtons.buttons.length; i++) { buttonsList.add(AppoDetailsButton( - title: bookButtonsJson[i]['title'], - subtitle: bookButtonsJson[i]['subtitle'], - icon: bookButtonsJson[i]['icon'], - caller: bookButtonsJson[i]['caller'], + title: BookedButtons.buttons[i]['title'], + subtitle: BookedButtons.buttons[i]['subtitle'], + icon: BookedButtons.buttons[i]['icon'], + caller: BookedButtons.buttons[i]['caller'], )); } setState(() { @@ -178,14 +203,14 @@ class _AppointmentActionsState extends State { Future> _getBookedCheckInAppoActionsList() async { print("_getBookedCheckInAppoActionsList"); - print(BookedButtons.buttons); + print(BookedButtonsAllowCheckIn.buttons); List buttonsList = []; - for (var i = 0; i < BookedButtons.buttons.length; i++) { + for (var i = 0; i < BookedButtonsAllowCheckIn.buttons.length; i++) { buttonsList.add(AppoDetailsButton( - title: BookedButtons.buttons[i]['title'], - subtitle: BookedButtons.buttons[i]['subtitle'], - icon: BookedButtons.buttons[i]['icon'], - caller: BookedButtons.buttons[i]['caller'], + title: BookedButtonsAllowCheckIn.buttons[i]['title'], + subtitle: BookedButtonsAllowCheckIn.buttons[i]['subtitle'], + icon: BookedButtonsAllowCheckIn.buttons[i]['icon'], + caller: BookedButtonsAllowCheckIn.buttons[i]['caller'], )); } setState(() { @@ -194,17 +219,15 @@ class _AppointmentActionsState extends State { } Future> _getConfirmedAppoActionsList() async { - var bookButtonsJson; + print("_getConfirmedAppoActionsList"); + print(ConfirmedButtons.buttons); List buttonsList = []; - String data = await DefaultAssetBundle.of(context) - .loadString("assets/json/bookedButtons.json"); - bookButtonsJson = json.decode(data); - for (var i = 0; i < bookButtonsJson.length; i++) { + for (var i = 0; i < ConfirmedButtons.buttons.length; i++) { buttonsList.add(AppoDetailsButton( - title: bookButtonsJson[i]['title'], - subtitle: bookButtonsJson[i]['subtitle'], - icon: bookButtonsJson[i]['icon'], - caller: bookButtonsJson[i]['caller'], + title: ConfirmedButtons.buttons[i]['title'], + subtitle: ConfirmedButtons.buttons[i]['subtitle'], + icon: ConfirmedButtons.buttons[i]['icon'], + caller: ConfirmedButtons.buttons[i]['caller'], )); } setState(() { @@ -213,17 +236,15 @@ class _AppointmentActionsState extends State { } Future> _getConfirmedCheckInAppoActionsList() async { - var bookButtonsJson; + print("_getConfirmedAllowCheckInAppoActionsList"); + print(ConfirmedButtonsAllowCheckIn.buttons); List buttonsList = []; - String data = await DefaultAssetBundle.of(context) - .loadString("assets/json/bookedButtons.json"); - bookButtonsJson = json.decode(data); - for (var i = 0; i < bookButtonsJson.length; i++) { + for (var i = 0; i < ConfirmedButtonsAllowCheckIn.buttons.length; i++) { buttonsList.add(AppoDetailsButton( - title: bookButtonsJson[i]['title'], - subtitle: bookButtonsJson[i]['subtitle'], - icon: bookButtonsJson[i]['icon'], - caller: bookButtonsJson[i]['caller'], + title: ConfirmedButtonsAllowCheckIn.buttons[i]['title'], + subtitle: ConfirmedButtonsAllowCheckIn.buttons[i]['subtitle'], + icon: ConfirmedButtonsAllowCheckIn.buttons[i]['icon'], + caller: ConfirmedButtonsAllowCheckIn.buttons[i]['caller'], )); } setState(() { @@ -232,17 +253,15 @@ class _AppointmentActionsState extends State { } Future> _getArrivedAppoActionsList() async { - var bookButtonsJson; + print("_getArrivedAppoActionsList"); + print(ArrivedButtons.buttons); List buttonsList = []; - String data = await DefaultAssetBundle.of(context) - .loadString("assets/json/bookedButtons.json"); - bookButtonsJson = json.decode(data); - for (var i = 0; i < bookButtonsJson.length; i++) { + for (var i = 0; i < ArrivedButtons.buttons.length; i++) { buttonsList.add(AppoDetailsButton( - title: bookButtonsJson[i]['title'], - subtitle: bookButtonsJson[i]['subtitle'], - icon: bookButtonsJson[i]['icon'], - caller: bookButtonsJson[i]['caller'], + title: ArrivedButtons.buttons[i]['title'], + subtitle: ArrivedButtons.buttons[i]['subtitle'], + icon: ArrivedButtons.buttons[i]['icon'], + caller: ArrivedButtons.buttons[i]['caller'], )); } setState(() { @@ -251,21 +270,64 @@ class _AppointmentActionsState extends State { } Future> _getArrivedInvoiceAppoActionsList() async { - var bookButtonsJson; + print("_getArrivedInvoiceAppoActionsList"); + print(ArrivedButtons.buttons); List buttonsList = []; - String data = await DefaultAssetBundle.of(context) - .loadString("assets/json/bookedButtons.json"); - bookButtonsJson = json.decode(data); - for (var i = 0; i < bookButtonsJson.length; i++) { + for (var i = 0; i < ArrivedButtons.buttons.length; i++) { buttonsList.add(AppoDetailsButton( - title: bookButtonsJson[i]['title'], - subtitle: bookButtonsJson[i]['subtitle'], - icon: bookButtonsJson[i]['icon'], - caller: bookButtonsJson[i]['caller'], + title: ArrivedButtons.buttons[i]['title'], + subtitle: ArrivedButtons.buttons[i]['subtitle'], + icon: ArrivedButtons.buttons[i]['icon'], + caller: ArrivedButtons.buttons[i]['caller'], )); } setState(() { appoButtonsList = buttonsList; }); } + + cancelAppointment() { + ConfirmDialog.closeAlertDialog(context); + loading(true); + DoctorsListService service = new DoctorsListService(); + service.cancelAppointment(widget.appo).then((res) { + print(res); + if (res['MessageStatus'] == 1) { + AppToast.showSuccessToast(message: res['ErrorEndUserMessage']); + loading(false); + } else { + AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + loading(false); + } + }).catchError((err) { + print(err); + loading(false); + }); + } + + confirmAppointment() { + loading(true); + DoctorsListService service = new DoctorsListService(); + service + .confirmAppointment(widget.appo.appointmentNo, widget.appo.clinicID, + widget.appo.projectID) + .then((res) { + if (res['MessageStatus'] == 1) { + AppToast.showSuccessToast(message: res['ErrorEndUserMessage']); + loading(false); + } else { + AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + loading(false); + } + }).catchError((err) { + print(err); + loading(false); + }); + } + + loading(bool flag) { + setState(() { + AppointmentDetails.isLoading = flag; + }); + } } diff --git a/lib/pages/MyAppointments/models/AppointmentType.dart b/lib/pages/MyAppointments/models/AppointmentType.dart index 2ac004f4..1d0cc3d3 100644 --- a/lib/pages/MyAppointments/models/AppointmentType.dart +++ b/lib/pages/MyAppointments/models/AppointmentType.dart @@ -1,3 +1,5 @@ +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; + class AppointmentType { static var BOOKED = 0; static const BOOKED_STR = 'booked'; @@ -6,23 +8,23 @@ class AppointmentType { static var ARRIVED = 43; static const ARRIVED_STR = 'arrived'; - static bool isConfirmed(appo) { + static bool isConfirmed(AppoitmentAllHistoryResultList appo) { return AppointmentType.isValid(appo) && - appo.PatientStatusType == AppointmentType.CONFIRMED; + appo.patientStatusType == AppointmentType.CONFIRMED; } - static bool isBooked(appo) { + static bool isBooked(AppoitmentAllHistoryResultList appo) { return AppointmentType.isValid(appo) && - appo.PatientStatusType == AppointmentType.BOOKED; + appo.patientStatusType == AppointmentType.BOOKED; } - static bool isArrived(appo) { + static bool isArrived(AppoitmentAllHistoryResultList appo) { return AppointmentType.isValid(appo) && - appo.PatientStatusType == AppointmentType.ARRIVED; + appo.patientStatusType == AppointmentType.ARRIVED; } static isValid(appo) { - return appo != null && appo.PatientStatusType != null; + return appo != null && appo.patientStatusType != null; } static int getType(typeName) { diff --git a/lib/pages/MyAppointments/models/ArrivedButtons.dart b/lib/pages/MyAppointments/models/ArrivedButtons.dart new file mode 100644 index 00000000..b7b1e19e --- /dev/null +++ b/lib/pages/MyAppointments/models/ArrivedButtons.dart @@ -0,0 +1,61 @@ +import 'package:diplomaticquarterapp/config/config.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; + +class ArrivedButtons { + static var buttons = [ + { + "title": "Arrived", + "subtitle": "Status", + "icon": "assets/images/new-design/waiting-room.png", + "caller": "openReschedule" + }, + { + "title": "Medicines", + "subtitle": "Prescriptions", + "icon": "assets/images/new-design/medicine_prescriptions_icon.png", + "caller": "onCancelAppointment" + }, + { + "title": "Radiology", + "subtitle": "Services", + "icon": "assets/images/new-design/radiology_service_icon.png", + "caller": "insertComplaint" + }, + { + "title": "Lab", + "subtitle": "Result", + "icon": "assets/images/new-design/lab_result_icon.png", + "caller": "addReminder" + }, + { + "title": "Vital Signs", + "subtitle": "Values", + "icon": "assets/images/new-design/location_icon.png", + "caller": "navigateToProject" + }, + { + "title": TranslationBase.of(AppGlobal.context).raise, + "subtitle": TranslationBase.of(AppGlobal.context).complaint, + "icon": "assets/images/new-design/Complaint_icon.png", + "caller": "insertComplaint" + }, + { + "title": "Insurance", + "subtitle": "Approvals", + "icon": "assets/images/new-design/insurance_approvals_icon-in.png", + "caller": "goToTodoList(31)" + }, + { + "title": "Ask Your", + "subtitle": "Doctor", + "icon": "assets/images/new-design/ask_doctor_icon.png", + "caller": "goToTodoList(31)" + }, + { + "title": "Survey", + "subtitle": "Service", + "icon": "assets/images/new-design/survey.png", + "caller": "goToTodoList(31)" + } + ]; +} diff --git a/lib/pages/MyAppointments/models/ArrivedButtonsAllowCheckIn.dart b/lib/pages/MyAppointments/models/ArrivedButtonsAllowCheckIn.dart new file mode 100644 index 00000000..b7b1e19e --- /dev/null +++ b/lib/pages/MyAppointments/models/ArrivedButtonsAllowCheckIn.dart @@ -0,0 +1,61 @@ +import 'package:diplomaticquarterapp/config/config.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; + +class ArrivedButtons { + static var buttons = [ + { + "title": "Arrived", + "subtitle": "Status", + "icon": "assets/images/new-design/waiting-room.png", + "caller": "openReschedule" + }, + { + "title": "Medicines", + "subtitle": "Prescriptions", + "icon": "assets/images/new-design/medicine_prescriptions_icon.png", + "caller": "onCancelAppointment" + }, + { + "title": "Radiology", + "subtitle": "Services", + "icon": "assets/images/new-design/radiology_service_icon.png", + "caller": "insertComplaint" + }, + { + "title": "Lab", + "subtitle": "Result", + "icon": "assets/images/new-design/lab_result_icon.png", + "caller": "addReminder" + }, + { + "title": "Vital Signs", + "subtitle": "Values", + "icon": "assets/images/new-design/location_icon.png", + "caller": "navigateToProject" + }, + { + "title": TranslationBase.of(AppGlobal.context).raise, + "subtitle": TranslationBase.of(AppGlobal.context).complaint, + "icon": "assets/images/new-design/Complaint_icon.png", + "caller": "insertComplaint" + }, + { + "title": "Insurance", + "subtitle": "Approvals", + "icon": "assets/images/new-design/insurance_approvals_icon-in.png", + "caller": "goToTodoList(31)" + }, + { + "title": "Ask Your", + "subtitle": "Doctor", + "icon": "assets/images/new-design/ask_doctor_icon.png", + "caller": "goToTodoList(31)" + }, + { + "title": "Survey", + "subtitle": "Service", + "icon": "assets/images/new-design/survey.png", + "caller": "goToTodoList(31)" + } + ]; +} diff --git a/lib/pages/MyAppointments/models/BookedButtons.dart b/lib/pages/MyAppointments/models/BookedButtons.dart index 56102f37..1a76be63 100644 --- a/lib/pages/MyAppointments/models/BookedButtons.dart +++ b/lib/pages/MyAppointments/models/BookedButtons.dart @@ -2,7 +2,6 @@ import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; class BookedButtons { - static var buttons = [ { "title": TranslationBase.of(AppGlobal.context).confirm, @@ -10,47 +9,35 @@ class BookedButtons { "icon": "assets/images/new-design/confirm_icon.png", "caller": "confirmAppointment" }, -// { -// "title": "confirm", -// "subtitle": "Appointment", -// "icon": "assets/images/new-design/confirm_icon.png", -// "caller": "confirmAppointment" -// }, { - "title": "reschedule", - "subtitle": "appointment", + "title": TranslationBase.of(AppGlobal.context).reschedule, + "subtitle": TranslationBase.of(AppGlobal.context).appointment, "icon": "assets/images/new-design/reschedule_icon.png", "caller": "openReschedule" }, { - "title": "cancel", - "subtitle": "appointment", + "title": TranslationBase.of(AppGlobal.context).cancel_nocaps, + "subtitle": TranslationBase.of(AppGlobal.context).appointment, "icon": "assets/images/new-design/cancel_icon.png", "caller": "onCancelAppointment" }, { - "title": "raise", - "subtitle": "complaint", + "title": TranslationBase.of(AppGlobal.context).raise, + "subtitle": TranslationBase.of(AppGlobal.context).complaint, "icon": "assets/images/new-design/Complaint_icon.png", "caller": "insertComplaint" }, { - "title": "add", - "subtitle": "reminder", + "title": TranslationBase.of(AppGlobal.context).add, + "subtitle": TranslationBase.of(AppGlobal.context).reminder, "icon": "assets/images/new-design/reminder_icon.png", "caller": "addReminder" }, { - "title": "hospital", - "subtitle": "locations", + "title": TranslationBase.of(AppGlobal.context).hospital, + "subtitle": TranslationBase.of(AppGlobal.context).location, "icon": "assets/images/new-design/location_icon.png", "caller": "navigateToProject" - }, - { - "title": "online", - "subtitle": "payment", - "icon": "assets/images/new-design/check-in.png", - "caller": "goToTodoList(31)" } ]; } diff --git a/lib/pages/MyAppointments/models/BookedButtonsAllowCheckIn.dart b/lib/pages/MyAppointments/models/BookedButtonsAllowCheckIn.dart new file mode 100644 index 00000000..959e8010 --- /dev/null +++ b/lib/pages/MyAppointments/models/BookedButtonsAllowCheckIn.dart @@ -0,0 +1,49 @@ +import 'package:diplomaticquarterapp/config/config.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; + +class BookedButtonsAllowCheckIn { + static var buttons = [ + { + "title": TranslationBase.of(AppGlobal.context).confirm, + "subtitle": TranslationBase.of(AppGlobal.context).appointment, + "icon": "assets/images/new-design/confirm_icon.png", + "caller": "confirmAppointment" + }, + { + "title": TranslationBase.of(AppGlobal.context).reschedule, + "subtitle": TranslationBase.of(AppGlobal.context).appointment, + "icon": "assets/images/new-design/reschedule_icon.png", + "caller": "openReschedule" + }, + { + "title": TranslationBase.of(AppGlobal.context).cancel_nocaps, + "subtitle": TranslationBase.of(AppGlobal.context).appointment, + "icon": "assets/images/new-design/cancel_icon.png", + "caller": "onCancelAppointment" + }, + { + "title": TranslationBase.of(AppGlobal.context).raise, + "subtitle": TranslationBase.of(AppGlobal.context).complaint, + "icon": "assets/images/new-design/Complaint_icon.png", + "caller": "insertComplaint" + }, + { + "title": TranslationBase.of(AppGlobal.context).add, + "subtitle": TranslationBase.of(AppGlobal.context).reminder, + "icon": "assets/images/new-design/reminder_icon.png", + "caller": "addReminder" + }, + { + "title": TranslationBase.of(AppGlobal.context).hospital, + "subtitle": TranslationBase.of(AppGlobal.context).location, + "icon": "assets/images/new-design/location_icon.png", + "caller": "navigateToProject" + }, + { + "title": TranslationBase.of(AppGlobal.context).online, + "subtitle": TranslationBase.of(AppGlobal.context).payment, + "icon": "assets/images/new-design/check-in.png", + "caller": "goToTodoList(31)" + } + ]; +} diff --git a/lib/pages/MyAppointments/models/ConfirmedButtons.dart b/lib/pages/MyAppointments/models/ConfirmedButtons.dart new file mode 100644 index 00000000..17d99002 --- /dev/null +++ b/lib/pages/MyAppointments/models/ConfirmedButtons.dart @@ -0,0 +1,49 @@ +import 'package:diplomaticquarterapp/config/config.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; + +class ConfirmedButtons { + static var buttons = [ + { + "title": TranslationBase.of(AppGlobal.context).reschedule, + "subtitle": TranslationBase.of(AppGlobal.context).appointment, + "icon": "assets/images/new-design/reschedule_icon.png", + "caller": "openReschedule" + }, + { + "title": TranslationBase.of(AppGlobal.context).cancel_nocaps, + "subtitle": TranslationBase.of(AppGlobal.context).appointment, + "icon": "assets/images/new-design/cancel_icon.png", + "caller": "onCancelAppointment" + }, + { + "title": TranslationBase.of(AppGlobal.context).raise, + "subtitle": TranslationBase.of(AppGlobal.context).complaint, + "icon": "assets/images/new-design/Complaint_icon.png", + "caller": "insertComplaint" + }, + { + "title": TranslationBase.of(AppGlobal.context).add, + "subtitle": TranslationBase.of(AppGlobal.context).reminder, + "icon": "assets/images/new-design/reminder_icon.png", + "caller": "addReminder" + }, + { + "title": TranslationBase.of(AppGlobal.context).hospital, + "subtitle": TranslationBase.of(AppGlobal.context).location, + "icon": "assets/images/new-design/location_icon.png", + "caller": "navigateToProject" + }, + { + "title": "Generate", + "subtitle": "Visit Ticket", + "icon": "assets/images/new-design/generate_visit_ticket.png", + "caller": "visitTicket" + }, + { + "title": TranslationBase.of(AppGlobal.context).online, + "subtitle": TranslationBase.of(AppGlobal.context).payment, + "icon": "assets/images/new-design/check-in.png", + "caller": "goToTodoList(31)" + } + ]; +} diff --git a/lib/pages/MyAppointments/models/ConfirmedButtonsAllowCheckIn.dart b/lib/pages/MyAppointments/models/ConfirmedButtonsAllowCheckIn.dart new file mode 100644 index 00000000..336995a8 --- /dev/null +++ b/lib/pages/MyAppointments/models/ConfirmedButtonsAllowCheckIn.dart @@ -0,0 +1,43 @@ +import 'package:diplomaticquarterapp/config/config.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; + +class ConfirmedButtonsAllowCheckIn { + static var buttons = [ + { + "title": TranslationBase.of(AppGlobal.context).reschedule, + "subtitle": TranslationBase.of(AppGlobal.context).appointment, + "icon": "assets/images/new-design/reschedule_icon.png", + "caller": "openReschedule" + }, + { + "title": TranslationBase.of(AppGlobal.context).cancel_nocaps, + "subtitle": TranslationBase.of(AppGlobal.context).appointment, + "icon": "assets/images/new-design/cancel_icon.png", + "caller": "onCancelAppointment" + }, + { + "title": TranslationBase.of(AppGlobal.context).raise, + "subtitle": TranslationBase.of(AppGlobal.context).complaint, + "icon": "assets/images/new-design/Complaint_icon.png", + "caller": "insertComplaint" + }, + { + "title": TranslationBase.of(AppGlobal.context).add, + "subtitle": TranslationBase.of(AppGlobal.context).reminder, + "icon": "assets/images/new-design/reminder_icon.png", + "caller": "addReminder" + }, + { + "title": TranslationBase.of(AppGlobal.context).hospital, + "subtitle": TranslationBase.of(AppGlobal.context).location, + "icon": "assets/images/new-design/location_icon.png", + "caller": "navigateToProject" + }, + { + "title": TranslationBase.of(AppGlobal.context).online, + "subtitle": TranslationBase.of(AppGlobal.context).payment, + "icon": "assets/images/new-design/check-in.png", + "caller": "goToTodoList(31)" + } + ]; +} diff --git a/lib/pages/ToDoList/ToDo.dart b/lib/pages/ToDoList/ToDo.dart index ddac2a55..39290d58 100644 --- a/lib/pages/ToDoList/ToDo.dart +++ b/lib/pages/ToDoList/ToDo.dart @@ -27,7 +27,6 @@ class _ToDoState extends State { @override void initState() { - print("initState"); widget.service = new DoctorsListService(); getPatientAppointmentHistory(); super.initState(); diff --git a/lib/services/appointment_services/GetDoctorsList.dart b/lib/services/appointment_services/GetDoctorsList.dart index 6511c189..04a3abd7 100644 --- a/lib/services/appointment_services/GetDoctorsList.dart +++ b/lib/services/appointment_services/GetDoctorsList.dart @@ -1,8 +1,10 @@ import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart'; +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Request.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; class DoctorsListService extends BaseService { AppSharedPreferences sharedPref = AppSharedPreferences(); @@ -305,4 +307,46 @@ class DoctorsListService extends BaseService { return Future.value(localRes); } + Future cancelAppointment(AppoitmentAllHistoryResultList appo) async { + Map request; + var languageID = await sharedPref.getString(APP_LANGUAGE); + Request req = appGlobal.getPublicRequest(); + + request = { + "AppointmentID": appo.appointmentNo, + "ClinicID": appo.clinicID, + "ProjectID": appo.projectID, + "EndTime": appo.endTime, + "StartTime": appo.startTime, + "DoctorID": appo.doctorID, + "IsForLiveCare": appo.isLiveCareAppointment, + "OriginalClinicID": appo.originalClinicID, + "OriginalProjectID": appo.originalProjectID, + "StrAppointmentDate": DateUtil.getDateFormatted(appo.appointmentDate), + "VersionID": req.VersionID, + "Channel": req.Channel, + "LanguageID": languageID == 'ar' ? 1 : 2, + "IPAdress": req.IPAdress, + "generalid": req.generalid, + "PatientOutSA": 0, + "SessionID": "YckwoXhUmWBsnHKEKig", + "isDentalAllowedBackend": false, + "DeviceTypeID": 1, + "PatientID": 1231755, + "TokenID": "@dm!n", + "PatientTypeID": 1, + "PatientType": 1 + }; + + dynamic localRes; + + await baseAppClient.post(CANCEL_APPOINTMENT, + onSuccess: (response, statusCode) async { + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: request); + return Future.value(localRes); + } + } diff --git a/lib/uitl/date_uitl.dart b/lib/uitl/date_uitl.dart index c70e05b7..6b18428d 100644 --- a/lib/uitl/date_uitl.dart +++ b/lib/uitl/date_uitl.dart @@ -39,6 +39,17 @@ class DateUtil { return "Old Date"; } + static String getDateFormatted(String date) { + DateTime dateObj = DateUtil.convertStringToDate(date); + return DateUtil.getWeekDay(dateObj.weekday) + + ", " + + dateObj.day.toString() + + " " + + DateUtil.getMonth(dateObj.month) + + " " + + dateObj.year.toString(); + } + /// get month by /// [month] convert month number in to month name static getMonth(int month) { diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index ce4f96e5..29d51f03 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -195,6 +195,36 @@ class TranslationBase { String get upcomingDetails => localizedValues['upcoming-details'][locale.languageCode]; + + String get reschedule => + localizedValues['reschedule'][locale.languageCode]; + + String get raise => + localizedValues['raise'][locale.languageCode]; + + String get complaint => + localizedValues['complaint'][locale.languageCode]; + + String get add => + localizedValues['add'][locale.languageCode]; + + String get reminder => + localizedValues['reminder'][locale.languageCode]; + + String get location => + localizedValues['location'][locale.languageCode]; + + String get online => + localizedValues['online'][locale.languageCode]; + + String get payment => + localizedValues['payment'][locale.languageCode]; + + String get cancel_nocaps => + localizedValues['cancel-nocaps'][locale.languageCode]; + + String get cancelAppoMsg => + localizedValues['cancelAppoMsg'][locale.languageCode]; } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/lib/widgets/dialogs/confirm_dialog.dart b/lib/widgets/dialogs/confirm_dialog.dart new file mode 100644 index 00000000..85116d5f --- /dev/null +++ b/lib/widgets/dialogs/confirm_dialog.dart @@ -0,0 +1,56 @@ +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; + +class ConfirmDialog { + final BuildContext context; + + final confirmMessage; + final okText; + final cancelText; + final Function okFunction; + final Function cancelFunction; + + ConfirmDialog( + {@required this.context, + @required this.confirmMessage, + @required this.okText, + @required this.cancelText, + @required this.okFunction, + @required this.cancelFunction}); + + showAlertDialog(BuildContext context) { + // set up the buttons + Widget cancelButton = FlatButton( + child: Text(this.cancelText), + onPressed: () { + Navigator.of(context).pop(); + }); + Widget continueButton = + FlatButton(child: Text(this.okText), onPressed: this.okFunction); + + // set up the AlertDialog + AlertDialog alert = AlertDialog( + title: Text(TranslationBase.of(context).confirm), + content: Text(this.confirmMessage), + actions: [ + cancelButton, + continueButton, + ], + ); + + // show the dialog + showDialog( + barrierDismissible: false, + context: context, + builder: (BuildContext context) { + return alert; + }, + ); + } + + static closeAlertDialog(BuildContext context) { + Navigator.of(context).pop(); + } + +} From 06f95c5379d5e7b486149719e977592a684ef11a Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Tue, 4 Aug 2020 18:31:41 +0300 Subject: [PATCH 04/13] Appointment Details implementation continued --- lib/config/config.dart | 31 +++++++++---------- lib/core/service/client/base_app_client.dart | 10 ++++-- lib/pages/BookAppointment/BookConfirm.dart | 31 +++++++++++++------ .../MyAppointments/AppointmentDetails.dart | 2 +- .../AppointmentActions.dart | 20 ++++++++++++ .../widgets/reminder_dialog.dart | 8 +++++ lib/pages/ToDoList/ToDo.dart | 16 ++++++++-- lib/pages/landing/landing_page.dart | 3 +- 8 files changed, 88 insertions(+), 33 deletions(-) rename lib/pages/MyAppointments/{Components => widgets}/AppointmentActions.dart (95%) create mode 100644 lib/pages/MyAppointments/widgets/reminder_dialog.dart diff --git a/lib/config/config.dart b/lib/config/config.dart index 221c407a..0d122736 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -1,29 +1,28 @@ +import 'dart:io'; + import 'package:diplomaticquarterapp/models/Request.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; -import 'dart:io'; const MAX_SMALL_SCREEN = 660; -const BASE_URL = 'https://hmgweb.com/'; +const BASE_URL = 'https://hmgwebservices.com/Services'; const GET_PROJECT = '/Lists.svc/REST/GetProject'; -//const BASE_URL = 'https://uat.hmgweb.com/'; // UAT Environment - ///Doctor const GET_MY_DOCTOR = '/Doctors.svc/REST/GetPatientDoctorAppointmentResult'; const GET_DOCTOR_PROFILE = '/Doctors.svc/REST/GetDocProfiles'; const GET_DOCTOR_RATING = '/Doctors.svc/REST/dr_GetAvgDoctorRating'; - ///Prescriptions const PRESCRIPTIONS = '/Patients.svc/REST/GetPrescriptionApptList'; -const GET_PRESCRIPTIONS_ALL_ORDERS = '/Patients.svc/REST/PatientER_GetPatientAllPresOrders'; -const GET_PRESCRIPTION_REPORT = '/Patients.svc/REST/INP_GetPrescriptionReport'; -const SEND_PRESCRIPTION_EMAIL = '/Notifications.svc/REST/SendPrescriptionEmail'; +const GET_PRESCRIPTIONS_ALL_ORDERS = + '/Patients.svc/REST/PatientER_GetPatientAllPresOrders'; +const GET_PRESCRIPTION_REPORT = '/Patients.svc/REST/INP_GetPrescriptionReport'; +const SEND_PRESCRIPTION_EMAIL = '/Notifications.svc/REST/SendPrescriptionEmail'; -//const BASE_URL = 'https://hmgweb.com/'; // Production Environment -//const BASE_URL = 'https://uat.hmgweb.com/'; // UAT Environment +//const BASE_URL = 'https://hmgwebservices.com/Services'; // Production Environment +//const BASE_URL = 'https://uat.hmgwebservices.com/Services'; // UAT Environment //URL to get clinic list const GET_CLINICS_LIST_URL = "/lists.svc/REST/GetClinicCentralized"; @@ -35,13 +34,16 @@ const GET_DOCTORS_LIST_URL = "/Doctors.svc/REST/SearchDoctorsByTime"; const GET_DOCTOR_FREE_SLOTS = "/Doctors.svc/REST/GetDoctorFreeSlots"; //URL to insert appointment -const INSERT_SPECIFIC_APPOINTMENT = "/Doctors.svc/REST/InsertSpecificAppointment"; +const INSERT_SPECIFIC_APPOINTMENT = + "/Doctors.svc/REST/InsertSpecificAppointment"; //URL to get patient share -const GET_PATIENT_SHARE = "/Doctors.svc/REST/GetCheckinScreenAppointmentDetailsByAppointmentNO"; +const GET_PATIENT_SHARE = + "/Doctors.svc/REST/GetCheckinScreenAppointmentDetailsByAppointmentNO"; //URL to get patient appointment history -const GET_PATIENT_APPOINTMENT_HISTORY = "/Doctors.svc/REST/PateintHasAppoimentHistory"; +const GET_PATIENT_APPOINTMENT_HISTORY = + "/Doctors.svc/REST/PateintHasAppoimentHistory"; //URL to confirm appointment const CONFIRM_APPOINTMENT = "/MobileNotifications.svc/REST/ConfirmAppointment"; @@ -72,7 +74,6 @@ class AppGlobal { request.generalid = 'Cs2020@2016\$2958'; request.VersionID = VERSION_ID; //5.3; //3.6; request.Channel = CHANNEL; //3; -// request.LanguageID = await sharedPref.getString(APP_LANGUAGE); request.IPAdress = IP_ADDRESS; //"10.20.10.20"; request.generalid = GENERAL_ID; //'Cs2020@2016\$2958'; request.PatientOutSA = 0; @@ -84,5 +85,3 @@ class AppGlobal { return request; } } - - diff --git a/lib/core/service/client/base_app_client.dart b/lib/core/service/client/base_app_client.dart index c48c3e3f..91182e17 100644 --- a/lib/core/service/client/base_app_client.dart +++ b/lib/core/service/client/base_app_client.dart @@ -46,14 +46,18 @@ class BaseAppClient { } // await helpers.logout(); //helpers.showErrorToast('Your session expired Please login agian'); - var asd =""; + var asd = ""; // TODO create logout fun } else if (parsed['MessageStatus'] == 1 || parsed['SMSLoginRequired'] == true) { onSuccess(parsed, statusCode); } else { - onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], - statusCode); + if (parsed['SameClinicApptList'] != null) { + onSuccess(parsed, statusCode); + } else { + onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], + statusCode); + } } } } else { diff --git a/lib/pages/BookAppointment/BookConfirm.dart b/lib/pages/BookAppointment/BookConfirm.dart index c59cdd12..5b4b9975 100644 --- a/lib/pages/BookAppointment/BookConfirm.dart +++ b/lib/pages/BookAppointment/BookConfirm.dart @@ -371,6 +371,7 @@ class _BookConfirmState extends State { } insertAppointment(context, DoctorList docObject) { + AppoitmentAllHistoryResultList appo; widget.service .insertAppointment(docObject.doctorID, docObject.clinicID, docObject.projectID, widget.selectedTime, widget.selectedDate) @@ -381,17 +382,29 @@ class _BookConfirmState extends State { getPatientShare(context, res['AppointmentNo'], docObject.clinicID, docObject.projectID, docObject); } else { - AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + appo = new AppoitmentAllHistoryResultList(); + appo.appointmentNo = res['SameClinicApptList'][0]['AppointmentNo']; + appo.clinicID = res['SameClinicApptList'][0]['DoctorID']; + appo.projectID = res['SameClinicApptList'][0]['ProjectID']; + appo.endTime = res['SameClinicApptList'][0]['EndTime']; + appo.startTime = res['SameClinicApptList'][0]['StartTime']; + appo.doctorID = res['SameClinicApptList'][0]['DoctorID']; + appo.isLiveCareAppointment = false; + appo.originalClinicID = 0; + appo.originalProjectID = 0; + appo.appointmentDate = res['SameClinicApptList'][0]['AppointmentDate']; + + ConfirmDialog dialog = new ConfirmDialog( + context: context, + confirmMessage: res['ErrorEndUserMessage'], + okText: TranslationBase.of(context).confirm, + cancelText: TranslationBase.of(context).cancel_nocaps, + okFunction: () => {cancelAppointment(docObject, appo)}, + cancelFunction: () => {}); + dialog.showAlertDialog(context); } }).catchError((err) { - ConfirmDialog dialog = new ConfirmDialog( - context: context, - confirmMessage: err, - okText: TranslationBase.of(context).confirm, - cancelText: TranslationBase.of(context).cancel_nocaps, - okFunction: () => {cancelAppointment(docObject, err)}, - cancelFunction: () => {}); - dialog.showAlertDialog(context); + print(err); }); } diff --git a/lib/pages/MyAppointments/AppointmentDetails.dart b/lib/pages/MyAppointments/AppointmentDetails.dart index 4e409cb5..4f94c47b 100644 --- a/lib/pages/MyAppointments/AppointmentDetails.dart +++ b/lib/pages/MyAppointments/AppointmentDetails.dart @@ -8,7 +8,7 @@ import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; import 'package:rating_bar/rating_bar.dart'; -import 'Components/AppointmentActions.dart'; +import 'widgets/AppointmentActions.dart'; class AppointmentDetails extends StatefulWidget { AppoitmentAllHistoryResultList appo; diff --git a/lib/pages/MyAppointments/Components/AppointmentActions.dart b/lib/pages/MyAppointments/widgets/AppointmentActions.dart similarity index 95% rename from lib/pages/MyAppointments/Components/AppointmentActions.dart rename to lib/pages/MyAppointments/widgets/AppointmentActions.dart index fb5fc7ff..4600b9b6 100644 --- a/lib/pages/MyAppointments/Components/AppointmentActions.dart +++ b/lib/pages/MyAppointments/widgets/AppointmentActions.dart @@ -12,6 +12,7 @@ import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; import 'package:flutter/material.dart'; +import 'package:url_launcher/url_launcher.dart'; class AppointmentActions extends StatefulWidget { AppoitmentAllHistoryResultList appo; @@ -131,6 +132,11 @@ class _AppointmentActionsState extends State { case "confirmAppointment": confirmAppointment(); break; + + case "navigateToProject": + openMap(double.parse(widget.appo.latitude), + double.parse(widget.appo.longitude)); + break; } } @@ -305,6 +311,20 @@ class _AppointmentActionsState extends State { }); } + static Future openMap(double latitude, double longitude) async { + String googleUrl = + 'https://www.google.com/maps/search/?api=1&query=$latitude,$longitude'; + if (await canLaunch(googleUrl)) { + await launch(googleUrl); + } else { + throw 'Could not open the map.'; + } + } + + showReminderDialog() { + + } + confirmAppointment() { loading(true); DoctorsListService service = new DoctorsListService(); diff --git a/lib/pages/MyAppointments/widgets/reminder_dialog.dart b/lib/pages/MyAppointments/widgets/reminder_dialog.dart new file mode 100644 index 00000000..168e41aa --- /dev/null +++ b/lib/pages/MyAppointments/widgets/reminder_dialog.dart @@ -0,0 +1,8 @@ +import 'package:flutter/material.dart'; + +class ReminderDialog extends StatelessWidget { + @override + Widget build(BuildContext context) { + return Container(); + } +} diff --git a/lib/pages/ToDoList/ToDo.dart b/lib/pages/ToDoList/ToDo.dart index 39290d58..a9d49e6a 100644 --- a/lib/pages/ToDoList/ToDo.dart +++ b/lib/pages/ToDoList/ToDo.dart @@ -27,6 +27,7 @@ class _ToDoState extends State { @override void initState() { + print("initState!!!!!"); widget.service = new DoctorsListService(); getPatientAppointmentHistory(); super.initState(); @@ -153,7 +154,10 @@ class _ToDoState extends State { mainAxisSize: MainAxisSize.max, children: [ RatingBar.readOnly( - initialRating: widget.appoList[index].actualDoctorRate.toDouble(), + initialRating: widget + .appoList[index] + .actualDoctorRate + .toDouble(), size: 20.0, filledColor: Colors.yellow[700], emptyColor: Colors.grey[500], @@ -406,12 +410,18 @@ class _ToDoState extends State { Future navigateToAppointmentDetails(context, appo) async { Navigator.push( - context, MaterialPageRoute(builder: (context) => AppointmentDetails(appo: appo))); + context, + MaterialPageRoute( + builder: (context) => AppointmentDetails(appo: appo))) + .then((value) { + getPatientAppointmentHistory(); + }); } getPatientAppointmentHistory() { loading(true); - widget.service.getPatientAppointmentHistory(true).then((res) { + DoctorsListService service = new DoctorsListService(); + service.getPatientAppointmentHistory(true).then((res) { print(res['AppoimentAllHistoryResultList']); if (res['MessageStatus'] == 1) { setState(() { diff --git a/lib/pages/landing/landing_page.dart b/lib/pages/landing/landing_page.dart index 8e8f84e4..4c6d1ad5 100644 --- a/lib/pages/landing/landing_page.dart +++ b/lib/pages/landing/landing_page.dart @@ -1,5 +1,6 @@ import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/models/Authentication/select_device_imei_res.dart'; +import 'package:diplomaticquarterapp/pages/BookAppointment/BookingOptions.dart'; import 'package:diplomaticquarterapp/pages/ToDoList/ToDo.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/pages/medical/medical_profile_page.dart'; @@ -69,7 +70,7 @@ class _LandingPageState extends State { body: PageView( physics: NeverScrollableScrollPhysics(), controller: pageController, - children: [Container(), MedicalProfilePage(), MyAdmissionsPage(), ToDo()], + children: [Container(), MedicalProfilePage(), MyAdmissionsPage(), ToDo(), BookingOptions()], ), bottomNavigationBar: BottomNavBar(changeIndex: _changeCurrentTab), ); From b3e50478200411b092d5d458c7a76ebe819cda0c Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Wed, 5 Aug 2020 18:10:30 +0300 Subject: [PATCH 05/13] Payment method selection page created, Appointment details functions implemented --- android/app/src/main/AndroidManifest.xml | 41 +-- assets/images/new-design/check_icon.png | Bin 0 -> 3358 bytes assets/images/new-design/installment.png | Bin 0 -> 41513 bytes assets/images/new-design/mada.png | Bin 0 -> 17068 bytes assets/images/new-design/mastercard.png | Bin 0 -> 59419 bytes assets/images/new-design/sadad.png | Bin 0 -> 23578 bytes assets/images/new-design/visa.png | Bin 0 -> 83030 bytes assets/json/bookedAllowCheckInButtons.json | 2 +- lib/config/config.dart | 4 + lib/config/localized_values.dart | 11 +- lib/pages/MyAppointments/VisitTicket.dart | 79 ++++++ .../MyAppointments/models/ArrivedButtons.dart | 6 +- .../models/ArrivedButtonsAllowCheckIn.dart | 6 +- .../models/BookedButtonsAllowCheckIn.dart | 2 +- .../models/ConfirmedButtons.dart | 14 +- .../models/ConfirmedButtonsAllowCheckIn.dart | 2 +- .../widgets/AppointmentActions.dart | 29 ++- .../MyAppointments/widgets/custom_radio.dart | 94 +++++++ .../widgets/reminder_dialog.dart | 130 +++++++++- lib/pages/ToDoList/ToDo.dart | 56 +++- lib/pages/ToDoList/payment_method_select.dart | 239 ++++++++++++++++++ lib/pages/ToDoList/widgets/paymentDialog.dart | 226 +++++++++++++++++ .../appointment_services/GetDoctorsList.dart | 33 +++ lib/uitl/translations_delegate_base.dart | 12 + pubspec.yaml | 2 + 25 files changed, 944 insertions(+), 44 deletions(-) create mode 100644 assets/images/new-design/check_icon.png create mode 100644 assets/images/new-design/installment.png create mode 100644 assets/images/new-design/mada.png create mode 100644 assets/images/new-design/mastercard.png create mode 100644 assets/images/new-design/sadad.png create mode 100644 assets/images/new-design/visa.png create mode 100644 lib/pages/MyAppointments/VisitTicket.dart create mode 100644 lib/pages/MyAppointments/widgets/custom_radio.dart create mode 100644 lib/pages/ToDoList/payment_method_select.dart create mode 100644 lib/pages/ToDoList/widgets/paymentDialog.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 540276ba..f6ab4d58 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -7,49 +7,50 @@ FlutterApplication and put your custom class here. --> + android:icon="@mipmap/ic_launcher" + android:label="diplomaticquarterapp"> + android:name="io.flutter.embedding.android.NormalTheme" + android:resource="@style/NormalTheme" /> - + android:name="io.flutter.embedding.android.SplashScreenDrawable" + android:resource="@drawable/launch_background" /> + + + + + - - + + - - - - - + - - + + + + + diff --git a/assets/images/new-design/check_icon.png b/assets/images/new-design/check_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..c098b175e38081cca74544e5595731fee8b057d8 GIT binary patch literal 3358 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%0A7J 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 z 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 literal 0 HcmV?d00001 diff --git a/assets/images/new-design/sadad.png b/assets/images/new-design/sadad.png new file mode 100644 index 0000000000000000000000000000000000000000..35e0426c4a68703441198afd5e961e7e8ddfa3fb GIT binary patch literal 23578 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 literal 0 HcmV?d00001 diff --git a/assets/json/bookedAllowCheckInButtons.json b/assets/json/bookedAllowCheckInButtons.json index e969da5a..5b5c4c5c 100644 --- a/assets/json/bookedAllowCheckInButtons.json +++ b/assets/json/bookedAllowCheckInButtons.json @@ -39,6 +39,6 @@ "title": "online", "subtitle": "payment", "icon": "assets/images/new-design/check-in.png", - "caller": "goToTodoList(31)" + "caller": "goToTodoList" } ] \ No newline at end of file diff --git a/lib/config/config.dart b/lib/config/config.dart index 0d122736..09584325 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -45,6 +45,10 @@ const GET_PATIENT_SHARE = const GET_PATIENT_APPOINTMENT_HISTORY = "/Doctors.svc/REST/PateintHasAppoimentHistory"; +//URL to get patient appointment curfew history +const GET_PATIENT_APPOINTMENT_CURFEW_HISTORY = + "/Doctors.svc/REST/AppoimentHistoryForCurfew"; + //URL to confirm appointment const CONFIRM_APPOINTMENT = "/MobileNotifications.svc/REST/ConfirmAppointment"; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index c02444f4..d9425234 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -77,6 +77,7 @@ const Map> localizedValues = { 'online': {'en': 'Online', 'ar': 'الالكترونية'}, 'payment': {'en': 'Payment', 'ar': 'الدفع'}, 'cancel-nocaps': {'en': 'Cancel', 'ar': 'الغاء'}, + 'set-reminder': {'en': 'Set Reminder', 'ar': 'تعيين تذكير'}, 'login': {'en': 'Login', 'ar': 'تسجيل الدخول'}, 'loginregister': {'en': 'Login / Register', 'ar': 'دخولتسجيل'}, @@ -156,5 +157,13 @@ const Map> localizedValues = { "arabic-change": {"en": "عربي", "ar": "English"}, "notification": {"en": "Notifications", "ar": "إشعارات"}, "app-settings": {"en": "App Settings", "ar": "إعدادات التطبيق"}, - "rate-app": {"en": "Rate Our App", "ar": "قيم التطبيق"} + "rate-app": {"en": "Rate Our App", "ar": "قيم التطبيق"}, + "before": {"en": "Before", "ar": "قبل"}, + "minute": {"en": "Minutes", "ar": "دقيقة"}, + "hour": {"en": "Hour", "ar": "ساعة"}, + "reminderSuccess": {"en": "The reminder has been added successfully", "ar": "يضاف التذكير بنجاح"}, + "patientShareToDo": {"en": "Amount before tax: ", "ar": "المبلغ قبل الضريبة:"}, + "patientTaxToDo": {"en": "Tax amount: ", "ar": "قيمة الضريبة:"}, + "patientShareTotalToDo": {"en": "Total amount Due: ", "ar": "المبلغ الإجمالي المستحق:"}, + 'paymentMethod': {'en': 'Payment Method', 'ar': 'طريقة الدفع او السداد'}, }; diff --git a/lib/pages/MyAppointments/VisitTicket.dart b/lib/pages/MyAppointments/VisitTicket.dart new file mode 100644 index 00000000..a4dd0a5e --- /dev/null +++ b/lib/pages/MyAppointments/VisitTicket.dart @@ -0,0 +1,79 @@ +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +import 'package:diplomaticquarterapp/pages/BookAppointment/widgets/DoctorView.dart'; +import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:diplomaticquarterapp/widgets/progress_indicator/app_circular_progress_Indeicator.dart'; +import 'package:flutter/material.dart'; + +class VisitTicket extends StatefulWidget { + List appoList = []; + + @override + _VisitTicketState createState() => _VisitTicketState(); +} + +class _VisitTicketState extends State { + bool isLoading = false; + + @override + void initState() { + getPatientAppointmentCurfewHistory(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return AppScaffold( + appBarTitle: TranslationBase.of(context).todoList, + body: isLoading == false + ? SingleChildScrollView( + child: ListView.builder( + scrollDirection: Axis.vertical, + shrinkWrap: true, + physics: ScrollPhysics(), + padding: EdgeInsets.all(0.0), + itemCount: widget.appoList.length, + itemBuilder: (context, index) { + return DoctorView( + doctor: widget.appoList[index], + ); + }, + ), + ) + : AppCircularProgressIndicator(), + ); + } + + getPatientAppointmentCurfewHistory() { + loading(true); + DoctorsListService service = new DoctorsListService(); + service.getPatientAppointmentHistory(true).then((res) { + print(res['AppoimentAllHistoryResultList']); + if (res['MessageStatus'] == 1) { + setState(() { + if (res['AppoimentAllHistoryResultList'].length != 0) { + widget.appoList.clear(); + res['AppoimentAllHistoryResultList'].forEach((v) { + widget.appoList.add(new DoctorList.fromJson(v)); + }); + } else {} + }); + loading(false); + } else { + AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + loading(false); + } + }).catchError((err) { + print(err); + loading(false); + }); + } + + loading(bool flag) { + setState(() { + isLoading = flag; + }); + } +} diff --git a/lib/pages/MyAppointments/models/ArrivedButtons.dart b/lib/pages/MyAppointments/models/ArrivedButtons.dart index b7b1e19e..98b32def 100644 --- a/lib/pages/MyAppointments/models/ArrivedButtons.dart +++ b/lib/pages/MyAppointments/models/ArrivedButtons.dart @@ -43,19 +43,19 @@ class ArrivedButtons { "title": "Insurance", "subtitle": "Approvals", "icon": "assets/images/new-design/insurance_approvals_icon-in.png", - "caller": "goToTodoList(31)" + "caller": "goToTodoList" }, { "title": "Ask Your", "subtitle": "Doctor", "icon": "assets/images/new-design/ask_doctor_icon.png", - "caller": "goToTodoList(31)" + "caller": "goToTodoList" }, { "title": "Survey", "subtitle": "Service", "icon": "assets/images/new-design/survey.png", - "caller": "goToTodoList(31)" + "caller": "goToTodoList" } ]; } diff --git a/lib/pages/MyAppointments/models/ArrivedButtonsAllowCheckIn.dart b/lib/pages/MyAppointments/models/ArrivedButtonsAllowCheckIn.dart index b7b1e19e..98b32def 100644 --- a/lib/pages/MyAppointments/models/ArrivedButtonsAllowCheckIn.dart +++ b/lib/pages/MyAppointments/models/ArrivedButtonsAllowCheckIn.dart @@ -43,19 +43,19 @@ class ArrivedButtons { "title": "Insurance", "subtitle": "Approvals", "icon": "assets/images/new-design/insurance_approvals_icon-in.png", - "caller": "goToTodoList(31)" + "caller": "goToTodoList" }, { "title": "Ask Your", "subtitle": "Doctor", "icon": "assets/images/new-design/ask_doctor_icon.png", - "caller": "goToTodoList(31)" + "caller": "goToTodoList" }, { "title": "Survey", "subtitle": "Service", "icon": "assets/images/new-design/survey.png", - "caller": "goToTodoList(31)" + "caller": "goToTodoList" } ]; } diff --git a/lib/pages/MyAppointments/models/BookedButtonsAllowCheckIn.dart b/lib/pages/MyAppointments/models/BookedButtonsAllowCheckIn.dart index 959e8010..374ebf45 100644 --- a/lib/pages/MyAppointments/models/BookedButtonsAllowCheckIn.dart +++ b/lib/pages/MyAppointments/models/BookedButtonsAllowCheckIn.dart @@ -43,7 +43,7 @@ class BookedButtonsAllowCheckIn { "title": TranslationBase.of(AppGlobal.context).online, "subtitle": TranslationBase.of(AppGlobal.context).payment, "icon": "assets/images/new-design/check-in.png", - "caller": "goToTodoList(31)" + "caller": "goToTodoList" } ]; } diff --git a/lib/pages/MyAppointments/models/ConfirmedButtons.dart b/lib/pages/MyAppointments/models/ConfirmedButtons.dart index 17d99002..d5b7836e 100644 --- a/lib/pages/MyAppointments/models/ConfirmedButtons.dart +++ b/lib/pages/MyAppointments/models/ConfirmedButtons.dart @@ -33,17 +33,17 @@ class ConfirmedButtons { "icon": "assets/images/new-design/location_icon.png", "caller": "navigateToProject" }, - { - "title": "Generate", - "subtitle": "Visit Ticket", - "icon": "assets/images/new-design/generate_visit_ticket.png", - "caller": "visitTicket" - }, +// { +// "title": "Generate", +// "subtitle": "Visit Ticket", +// "icon": "assets/images/new-design/generate_visit_ticket.png", +// "caller": "visitTicket" +// }, { "title": TranslationBase.of(AppGlobal.context).online, "subtitle": TranslationBase.of(AppGlobal.context).payment, "icon": "assets/images/new-design/check-in.png", - "caller": "goToTodoList(31)" + "caller": "goToTodoList" } ]; } diff --git a/lib/pages/MyAppointments/models/ConfirmedButtonsAllowCheckIn.dart b/lib/pages/MyAppointments/models/ConfirmedButtonsAllowCheckIn.dart index 336995a8..1368e3f3 100644 --- a/lib/pages/MyAppointments/models/ConfirmedButtonsAllowCheckIn.dart +++ b/lib/pages/MyAppointments/models/ConfirmedButtonsAllowCheckIn.dart @@ -37,7 +37,7 @@ class ConfirmedButtonsAllowCheckIn { "title": TranslationBase.of(AppGlobal.context).online, "subtitle": TranslationBase.of(AppGlobal.context).payment, "icon": "assets/images/new-design/check-in.png", - "caller": "goToTodoList(31)" + "caller": "goToTodoList" } ]; } diff --git a/lib/pages/MyAppointments/widgets/AppointmentActions.dart b/lib/pages/MyAppointments/widgets/AppointmentActions.dart index 4600b9b6..2aaf13d1 100644 --- a/lib/pages/MyAppointments/widgets/AppointmentActions.dart +++ b/lib/pages/MyAppointments/widgets/AppointmentActions.dart @@ -7,6 +7,7 @@ import 'package:diplomaticquarterapp/pages/MyAppointments/models/BookedButtons.d import 'package:diplomaticquarterapp/pages/MyAppointments/models/BookedButtonsAllowCheckIn.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/models/ConfirmedButtons.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/models/ConfirmedButtonsAllowCheckIn.dart'; +import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/reminder_dialog.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; @@ -137,6 +138,14 @@ class _AppointmentActionsState extends State { openMap(double.parse(widget.appo.latitude), double.parse(widget.appo.longitude)); break; + + case "addReminder": + showReminderDialog(widget.appo); + break; + + case "goToTodoList": + Navigator.of(context).pop(); + break; } } @@ -321,8 +330,24 @@ class _AppointmentActionsState extends State { } } - showReminderDialog() { - + showReminderDialog(AppoitmentAllHistoryResultList appo) { + showGeneralDialog( + barrierColor: Colors.black.withOpacity(0.5), + transitionBuilder: (context, a1, a2, widget) { + final curvedValue = Curves.easeInOutBack.transform(a1.value) - 1.0; + return Transform( + transform: Matrix4.translationValues(0.0, curvedValue * 200, 0.0), + child: Opacity( + opacity: a1.value, + child: ReminderDialog(appo: appo), + ), + ); + }, + transitionDuration: Duration(milliseconds: 500), + barrierDismissible: true, + barrierLabel: '', + context: context, + pageBuilder: (context, animation1, animation2) {}); } confirmAppointment() { diff --git a/lib/pages/MyAppointments/widgets/custom_radio.dart b/lib/pages/MyAppointments/widgets/custom_radio.dart new file mode 100644 index 00000000..2d13c1ee --- /dev/null +++ b/lib/pages/MyAppointments/widgets/custom_radio.dart @@ -0,0 +1,94 @@ +import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/reminder_dialog.dart'; +import 'package:flutter/material.dart'; + +class CustomRadio extends StatefulWidget { + @override + createState() { + return new CustomRadioState(); + } +} + +class CustomRadioState extends State { + List sampleData = new List(); + + @override + void initState() { + super.initState(); + sampleData.add(new RadioModel(false, "Before 30 Mins", 30)); + sampleData.add(new RadioModel(false, 'Before 1 Hour', 60)); + sampleData.add(new RadioModel(false, 'Before 2 Hours', 120)); + sampleData.add(new RadioModel(false, 'Before 4 Hours', 240)); + } + + @override + Widget build(BuildContext context) { + return Column( + children: [ + ListView.builder( + shrinkWrap: true, + itemCount: sampleData.length, + itemBuilder: (BuildContext context, int index) { + return new InkWell( + //highlightColor: Colors.red, + splashColor: Colors.transparent, + onTap: () { + setState(() { + sampleData.forEach((element) => element.isSelected = false); + sampleData[index].isSelected = true; + ReminderDialog.selectedDuration = + sampleData[index].duration * 60000; + }); + }, + child: new RadioItem(sampleData[index]), + ); + }, + ), + ], + ); + } +} + +class RadioItem extends StatelessWidget { + final RadioModel _item; + + RadioItem(this._item); + + @override + Widget build(BuildContext context) { + return new Container( + margin: new EdgeInsets.all(15.0), + child: new Row( + mainAxisSize: MainAxisSize.max, + children: [ + new Container( + height: 30.0, + width: 30.0, + child: new Center( + child: Image.asset("assets/images/new-design/check_icon.png", + width: 15.0, height: 15.0), + ), + decoration: new BoxDecoration( + color: _item.isSelected ? Colors.blue : Colors.transparent, + border: new Border.all( + width: 1.0, + color: _item.isSelected ? Colors.blue : Colors.grey), + borderRadius: const BorderRadius.all(const Radius.circular(50.0)), + ), + ), + new Container( + margin: new EdgeInsets.only(left: 15.0), + child: new Text(_item.text, style: TextStyle(fontSize: 16.0)), + ), + ], + ), + ); + } +} + +class RadioModel { + bool isSelected; + final String text; + final int duration; + + RadioModel(this.isSelected, this.text, this.duration); +} diff --git a/lib/pages/MyAppointments/widgets/reminder_dialog.dart b/lib/pages/MyAppointments/widgets/reminder_dialog.dart index 168e41aa..238d41d7 100644 --- a/lib/pages/MyAppointments/widgets/reminder_dialog.dart +++ b/lib/pages/MyAppointments/widgets/reminder_dialog.dart @@ -1,8 +1,134 @@ +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/custom_radio.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:flutter/material.dart'; +import 'package:manage_calendar_events/manage_calendar_events.dart'; + +class ReminderDialog extends StatefulWidget { + static var selectedDuration; + + AppoitmentAllHistoryResultList appo; + + ReminderDialog({@required this.appo}); + + @override + _ReminderDialogState createState() => _ReminderDialogState(); +} + +class _ReminderDialogState extends State { + final CalendarPlugin _myPlugin = CalendarPlugin(); -class ReminderDialog extends StatelessWidget { @override Widget build(BuildContext context) { - return Container(); + return Container( + child: Dialog( + shape: + RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)), + child: Container( + height: MediaQuery.of(context).size.height * 0.55, + width: 450.0, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + Container( + margin: EdgeInsets.all(20.0), + child: Text(TranslationBase.of(context).setReminder, + style: TextStyle( + fontSize: 20.0, + fontWeight: FontWeight.bold, + fontFamily: "Open-Sans-Bold")), + ), + Container( + transform: Matrix4.translationValues(0.0, -30.0, 0.0), + child: CustomRadio(), + ), + Container( + width: MediaQuery.of(context).size.width, + height: 40.0, + margin: EdgeInsets.only(left: 30.0, top: 0.0, right: 30.0), + child: RaisedButton( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + side: BorderSide(color: Colors.blue)), + color: Colors.blue, + onPressed: () { + print(ReminderDialog.selectedDuration); + createCalendarEvent(); + }, + child: Text(TranslationBase.of(context).confirm, + style: TextStyle( + color: Colors.white, + fontWeight: FontWeight.bold, + fontFamily: 'Open-Sans-Bold')), + ), + ), + Container( + width: MediaQuery.of(context).size.width, + margin: EdgeInsets.only(left: 100.0, top: 20.0, right: 100.0), + child: OutlineButton( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0)), + color: Colors.red, + borderSide: BorderSide(color: Colors.red), + highlightColor: Colors.red, + highlightedBorderColor: Colors.red, + onPressed: () { + Navigator.of(context).pop(); + }, + child: Text(TranslationBase.of(context).cancel_nocaps, + style: TextStyle( + color: Colors.red, + fontWeight: FontWeight.bold, + fontFamily: 'Open-Sans-Bold')), + ), + ), + ]), + ), + ), + ); + } + + createCalendarEvent() { + _myPlugin.hasPermissions().then((value) { + if (!value) { + _myPlugin.requestPermissions(); + } else { + _myPlugin.getCalendars().then((value) => {print(value.length)}); + } + }); + + CalendarEvent calendarEvent = new CalendarEvent( + eventId: widget.appo.appointmentNo.toString(), + title: "Doctor Appointment", + description: "You have an appointment with " + + widget.appo.doctorTitle + + " " + + widget.appo.doctorNameObj, + startDate: DateUtil.convertStringToDate(widget.appo.appointmentDate) + .subtract( + new Duration(microseconds: ReminderDialog.selectedDuration)), + endDate: DateUtil.convertStringToDate(widget.appo.appointmentDate), + location: widget.appo.projectName, + duration: new Duration(minutes: 15).inMinutes, + isAllDay: false, + hasAlarm: true); + + _myPlugin + .createEvent(calendarId: "207749556", event: calendarEvent) + .then((value) { + print("Cal event"); + print(value); + if (int.parse(value) == widget.appo.appointmentNo) { + AppToast.showSuccessToast(message: TranslationBase.of(context).reminderSuccess); + } + Navigator.of(context).pop(); + }).catchError((err) { + print("Cal Error"); + print(err); + Navigator.of(context).pop(); + }); } } diff --git a/lib/pages/ToDoList/ToDo.dart b/lib/pages/ToDoList/ToDo.dart index a9d49e6a..b916ee22 100644 --- a/lib/pages/ToDoList/ToDo.dart +++ b/lib/pages/ToDoList/ToDo.dart @@ -1,6 +1,8 @@ import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/AppointmentDetails.dart'; +import 'package:diplomaticquarterapp/pages/ToDoList/widgets/paymentDialog.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; @@ -12,7 +14,7 @@ import 'package:flutter/material.dart'; import 'package:rating_bar/rating_bar.dart'; class ToDo extends StatefulWidget { - DoctorsListService service; + PatientShareResponse patientShareResponse; List appoList = []; var languageID; @@ -28,7 +30,7 @@ class _ToDoState extends State { @override void initState() { print("initState!!!!!"); - widget.service = new DoctorsListService(); + widget.patientShareResponse = new PatientShareResponse(); getPatientAppointmentHistory(); super.initState(); } @@ -299,6 +301,10 @@ class _ToDoState extends State { case 10: confirmAppointment(appo); break; + + case 20: + getPatientShare(context, appo); + break; } } @@ -444,9 +450,53 @@ class _ToDoState extends State { }); } + getPatientShare(context, AppoitmentAllHistoryResultList appo) { + loading(true); + DoctorsListService service = new DoctorsListService(); + service + .getPatientShare( + appo.appointmentNo.toString(), appo.clinicID, appo.projectID) + .then((res) { + loading(false); + widget.patientShareResponse = new PatientShareResponse.fromJson(res); + openPaymentDialog(appo, widget.patientShareResponse); + }).catchError((err) { + loading(false); + print(err); + }); + } + + openPaymentDialog(AppoitmentAllHistoryResultList appo, + PatientShareResponse patientShareResponse) { + showGeneralDialog( + barrierColor: Colors.black.withOpacity(0.5), + transitionBuilder: (context, a1, a2, widget) { + final curvedValue = + Curves.easeInOutBack.transform(a1.value) - 1.0; + return Transform( + transform: + Matrix4.translationValues(0.0, curvedValue * 200, 0.0), + child: Opacity( + opacity: a1.value, + child: PaymentDialog( + appo: appo, patientShareResponse: patientShareResponse), + ), + ); + }, + transitionDuration: Duration(milliseconds: 500), + barrierDismissible: false, + barrierLabel: '', + context: context, + pageBuilder: (context, animation1, animation2) {}) + .then((value) { + getPatientAppointmentHistory(); + }); + } + confirmAppointment(AppoitmentAllHistoryResultList appo) { loading(true); - widget.service + DoctorsListService service = new DoctorsListService(); + service .confirmAppointment(appo.appointmentNo, appo.clinicID, appo.projectID) .then((res) { if (res['MessageStatus'] == 1) { diff --git a/lib/pages/ToDoList/payment_method_select.dart b/lib/pages/ToDoList/payment_method_select.dart new file mode 100644 index 00000000..6ee0daef --- /dev/null +++ b/lib/pages/ToDoList/payment_method_select.dart @@ -0,0 +1,239 @@ +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; + +class PaymentMethod extends StatefulWidget { + @override + _PaymentMethodState createState() => _PaymentMethodState(); +} + +class _PaymentMethodState extends State { + String selectedPaymentMethod = "mada"; + + @override + Widget build(BuildContext context) { + return AppScaffold( + appBarTitle: TranslationBase.of(context).paymentMethod, + isShowAppBar: true, + body: Container( + margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 10.0), + child: SingleChildScrollView( + child: Container( + child: Column( + mainAxisSize: MainAxisSize.max, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Container( + margin: EdgeInsets.fromLTRB(0.0, 15.0, 0.0, 0.0), + alignment: Alignment.center, + child: Text("Select Payment Method", + style: TextStyle( + fontSize: 26.0, fontWeight: FontWeight.bold)), + ), + Container( + margin: EdgeInsets.only(top: 25.0), + child: Flex( + direction: Axis.horizontal, + children: [ + Expanded( + child: Container( + child: InkWell( + onTap: () { + updateSelectedPaymentMethod("mada"); + }, + child: Card( + elevation: 3.0, + margin: EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), + color: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + side: selectedPaymentMethod == "mada" + ? BorderSide( + color: Colors.green, width: 5.0) + : BorderSide( + color: Colors.transparent, width: 0.0), + ), + child: Container( + height: 120.0, + padding: EdgeInsets.all(7.0), + width: MediaQuery.of(context).size.width * 0.45, + child: Image.asset( + "assets/images/new-design/mada.png"), + ), + ), + ), + ), + ), + Expanded( + child: Container( + child: InkWell( + onTap: () { + updateSelectedPaymentMethod("sadad"); + }, + child: Card( + elevation: 3.0, + margin: EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), + color: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + side: selectedPaymentMethod == "sadad" + ? BorderSide( + color: Colors.green, width: 5.0) + : BorderSide( + color: Colors.transparent, width: 0.0), + ), + child: Container( + height: 120.0, + padding: EdgeInsets.all(7.0), + width: MediaQuery.of(context).size.width * 0.45, + child: Image.asset( + "assets/images/new-design/sadad.png"), + ), + ), + ), + ), + ), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 25.0), + child: Flex( + direction: Axis.horizontal, + children: [ + Expanded( + child: Container( + child: InkWell( + onTap: () { + updateSelectedPaymentMethod("visa"); + }, + child: Card( + elevation: 3.0, + margin: EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), + color: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + side: selectedPaymentMethod == "visa" + ? BorderSide( + color: Colors.green, width: 5.0) + : BorderSide( + color: Colors.transparent, width: 0.0), + ), + child: Container( + height: 120.0, + padding: EdgeInsets.all(7.0), + width: MediaQuery.of(context).size.width * 0.45, + child: Image.asset( + "assets/images/new-design/visa.png"), + ), + ), + ), + ), + ), + Expanded( + child: Container( + child: InkWell( + onTap: () { + updateSelectedPaymentMethod("mastercard"); + }, + child: Card( + elevation: 3.0, + margin: EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), + color: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + side: selectedPaymentMethod == "mastercard" + ? BorderSide( + color: Colors.green, width: 5.0) + : BorderSide( + color: Colors.transparent, width: 0.0), + ), + child: Container( + height: 120.0, + padding: EdgeInsets.all(7.0), + width: MediaQuery.of(context).size.width * 0.45, + child: Image.asset( + "assets/images/new-design/mastercard.png"), + ), + ), + ), + ), + ), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 25.0), + child: Flex( + direction: Axis.horizontal, + children: [ + Expanded( + child: Container( + child: InkWell( + onTap: () { + updateSelectedPaymentMethod("installment"); + }, + child: Card( + elevation: 3.0, + margin: EdgeInsets.fromLTRB(8.0, 16.0, 8.0, 8.0), + color: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + side: selectedPaymentMethod == "installment" + ? BorderSide( + color: Colors.green, width: 5.0) + : BorderSide( + color: Colors.transparent, width: 0.0), + ), + child: Container( + height: 120.0, + padding: EdgeInsets.all(7.0), + width: MediaQuery.of(context).size.width * 0.45, + child: Image.asset( + "assets/images/new-design/installment.png"), + ), + ), + ), + ), + ), + ], + ), + ), + ], + ), + ), + ), + ), + bottomSheet: Container( + width: MediaQuery.of(context).size.width, + height: 50.0, + margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 20.0), + child: ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), + minWidth: MediaQuery.of(context).size.width * 0.7, + height: 45.0, + child: RaisedButton( + color: new Color(0xFF60686b), + textColor: Colors.white, + disabledTextColor: Colors.white, + disabledColor: new Color(0xFFbcc2c4), + onPressed: () { +// navigateToBookSuccess(context); +// insertAppointment(context, widget.doctor); + }, + child: Text(TranslationBase.of(context).confirm, + style: TextStyle(fontSize: 18.0)), + ), + ), + ), + ); + } + + updateSelectedPaymentMethod(String selectedMethod) { + setState(() { + selectedPaymentMethod = selectedMethod; + }); + } +} diff --git a/lib/pages/ToDoList/widgets/paymentDialog.dart b/lib/pages/ToDoList/widgets/paymentDialog.dart new file mode 100644 index 00000000..8341c6de --- /dev/null +++ b/lib/pages/ToDoList/widgets/paymentDialog.dart @@ -0,0 +1,226 @@ +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.dart'; +import 'package:diplomaticquarterapp/pages/ToDoList/payment_method_select.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:flutter/material.dart'; + +class PaymentDialog extends StatefulWidget { + AppoitmentAllHistoryResultList appo; + PatientShareResponse patientShareResponse; + + PaymentDialog({@required this.appo, this.patientShareResponse}); + + @override + _PaymentDialogState createState() => _PaymentDialogState(); +} + +class _PaymentDialogState extends State { + @override + Widget build(BuildContext context) { + return Container( + child: Dialog( + shape: + RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)), + child: Container( + height: MediaQuery.of(context).size.height * 0.62, + width: 450.0, + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + Container( + margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 5.0), + child: Text("Invoice Detail", + style: TextStyle( + fontSize: 25.0, + fontWeight: FontWeight.bold, + fontFamily: "Open-Sans-Bold")), + ), + Divider( + color: Colors.grey, + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), + child: Text("Appointment Details", + style: TextStyle( + fontSize: 15.0, + fontWeight: FontWeight.bold, + fontFamily: "Open-Sans-Bold")), + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), + child: Text( + widget.appo.doctorTitle + " " + widget.appo.doctorNameObj, + style: TextStyle( + color: Colors.grey[700], + fontSize: 15.0, + fontWeight: FontWeight.bold, + fontFamily: "Open-Sans-Bold")), + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), + child: Text(getDate(widget.appo.appointmentDate), + style: getTextStyle()), + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 5.0, 20.0, 5.0), + child: Text(widget.appo.projectName, style: getTextStyle()), + ), + Divider( + color: Colors.grey, + ), + Container( + margin: EdgeInsets.fromLTRB(20.0, 0.0, 20.0, 5.0), + child: Table( + children: [ + TableRow(children: [ + TableCell( + child: _getNormalText( + TranslationBase.of(context).patientShareToDo)), + TableCell( + child: _getNormalText(widget + .patientShareResponse.patientShare + .toString())), + ]), + TableRow(children: [ + TableCell( + child: _getNormalText( + TranslationBase.of(context).patientTaxToDo)), + TableCell( + child: _getNormalText(widget + .patientShareResponse.patientTaxAmount + .toString())), + ]), + TableRow(children: [ + TableCell( + child: _getNormalText(TranslationBase.of(context) + .patientShareTotalToDo)), + TableCell( + child: _getNormalText(widget + .patientShareResponse.patientShareWithTax + .toString())), + ]), + ], + ), + ), + Container( + alignment: Alignment.center, + margin: EdgeInsets.fromLTRB(20.0, 20.0, 20.0, 5.0), + child: Text("You can pay by following options: ", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 16.0, + fontWeight: FontWeight.bold, + fontFamily: "Open-Sans")), + ), + Container( + alignment: Alignment.center, + margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 5.0), + child: Image.asset( + "assets/images/new-design/payment_options_invoice_confirmation.png", + width: 300), + ), + Container( + alignment: Alignment.center, + margin: EdgeInsets.fromLTRB(20.0, 10.0, 20.0, 15.0), + child: Text( + "Are You Sure You Want To Make payment for this Appointment?", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 14.0, + color: Colors.red[700], + fontFamily: "Open-Sans")), + ), + Divider( + color: Colors.grey, + ), + Container( + alignment: Alignment.center, + height: 40.0, + child: Flex( + direction: Axis.horizontal, + children: [ + Expanded( + child: InkWell( + onTap: () { + Navigator.of(context).pop(); + }, + child: Container( + child: Text("Cancel", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 18.0, color: Colors.red[700])), + ), + ), + ), + Expanded( + child: InkWell( + onTap: () { + Navigator.of(context).pop(); + naviagetToPaymentMethod(context); + }, + child: Container( + child: Text("Ok", + textAlign: TextAlign.center, + style: TextStyle( + fontSize: 18.0, + )), + ), + ), + ), + ], + ), + ), + ]), + ), + ), + ); + } + + _getNormalText(text) { + return Container( + margin: EdgeInsets.only(top: 10.0, right: 10.0), + child: Text(text, + textAlign: TextAlign.end, + style: TextStyle( + fontSize: 15, + fontFamily: 'Open-Sans', + letterSpacing: 0.5, + color: Colors.grey[700])), + ); + } + + TextStyle getTextStyle() { + return TextStyle( + color: Colors.grey[700], fontSize: 15.0, fontFamily: "Open-Sans-Bold"); + } + + Future naviagetToPaymentMethod(context) async { + Navigator.push( + context, MaterialPageRoute(builder: (context) => PaymentMethod())); + } + + String getDate(String date) { + DateTime dateObj = DateUtil.convertStringToDate(date); + return DateUtil.getWeekDay(dateObj.weekday) + + ", " + + dateObj.day.toString() + + " " + + DateUtil.getMonth(dateObj.month) + + " " + + dateObj.year.toString() + + " " + + dateObj.hour.toString() + + ":" + + getMinute(dateObj); + } + + String getMinute(DateTime dateObj) { + if (dateObj.minute == 0) { + return dateObj.minute.toString() + "0"; + } else { + return dateObj.minute.toString(); + } + } +} diff --git a/lib/services/appointment_services/GetDoctorsList.dart b/lib/services/appointment_services/GetDoctorsList.dart index 04a3abd7..f4494d2f 100644 --- a/lib/services/appointment_services/GetDoctorsList.dart +++ b/lib/services/appointment_services/GetDoctorsList.dart @@ -271,6 +271,39 @@ class DoctorsListService extends BaseService { return Future.value(localRes); } + Future getPatientAppointmentCurfewHistory(bool isActiveAppointment) async { + Map request; + var languageID = await sharedPref.getString(APP_LANGUAGE); + Request req = appGlobal.getPublicRequest(); + + request = { + "IsActiveAppointment": isActiveAppointment, + "VersionID": req.VersionID, + "Channel": req.Channel, + "LanguageID": languageID == 'ar' ? 1 : 2, + "IPAdress": req.IPAdress, + "generalid": req.generalid, + "PatientOutSA": 0, + "SessionID": "YckwoXhUmWBsnHKEKig", + "isDentalAllowedBackend": false, + "DeviceTypeID": 1, + "PatientID": 1231755, + "TokenID": "@dm!n", + "PatientTypeID": 1, + "PatientType": 1 + }; + + dynamic localRes; + + await baseAppClient.post(GET_PATIENT_APPOINTMENT_CURFEW_HISTORY, + onSuccess: (response, statusCode) async { + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: request); + return Future.value(localRes); + } + Future confirmAppointment(int appoNo, int clinicID, int projectID) async { Map request; var languageID = await sharedPref.getString(APP_LANGUAGE); diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 76b3f2c5..81efd65b 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -259,6 +259,18 @@ class TranslationBase { localizedValues['notification'][locale.languageCode]; String get appsetting => localizedValues['app-settings'][locale.languageCode]; String get rateApp => localizedValues['rate-app'][locale.languageCode]; + String get setReminder => localizedValues['set-reminder'][locale.languageCode]; + String get before => localizedValues['before'][locale.languageCode]; + String get minute => localizedValues['minute'][locale.languageCode]; + String get hour => localizedValues['hour'][locale.languageCode]; + String get reminderSuccess => localizedValues['reminderSuccess'][locale.languageCode]; + String get patientShareToDo => localizedValues['patientShareToDo'][locale.languageCode]; + String get patientTaxToDo => localizedValues['patientTaxToDo'][locale.languageCode]; + String get patientShareTotalToDo => localizedValues['patientShareTotalToDo'][locale.languageCode]; + String get paymentMethod => localizedValues['paymentMethod'][locale.languageCode]; + + + } class TranslationBaseDelegate extends LocalizationsDelegate { diff --git a/pubspec.yaml b/pubspec.yaml index 50784aa5..464d6ef4 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -81,6 +81,8 @@ dependencies: # Location Helper map_launcher: ^0.8.1 + manage_calendar_events: ^1.0.2 + From 192a3835d69b2a7a6ab39f6a505cd25f5b13087a Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Sun, 9 Aug 2020 09:13:15 +0300 Subject: [PATCH 06/13] implemented payment method selection & payment details dialog. Added Calendar events to add remindar in calendar for appointment. --- lib/pages/BookAppointment/BookSuccess.dart | 2 + lib/pages/ToDoList/payment_method_select.dart | 17 ++++- lib/widgets/in_app_browser/InAppBrowser.dart | 67 +++++++++++++++++++ pubspec.yaml | 4 ++ 4 files changed, 88 insertions(+), 2 deletions(-) create mode 100644 lib/widgets/in_app_browser/InAppBrowser.dart diff --git a/lib/pages/BookAppointment/BookSuccess.dart b/lib/pages/BookAppointment/BookSuccess.dart index 4745abe3..7025a90e 100644 --- a/lib/pages/BookAppointment/BookSuccess.dart +++ b/lib/pages/BookAppointment/BookSuccess.dart @@ -257,6 +257,8 @@ class _BookSuccessState extends State { ); } + + _getTextStyling() { return TextStyle(fontSize: 14.0, color: Colors.white, letterSpacing: 0.7); } diff --git a/lib/pages/ToDoList/payment_method_select.dart b/lib/pages/ToDoList/payment_method_select.dart index 6ee0daef..5f3eff18 100644 --- a/lib/pages/ToDoList/payment_method_select.dart +++ b/lib/pages/ToDoList/payment_method_select.dart @@ -1,6 +1,8 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; +import 'package:flutter_inappwebview/flutter_inappwebview.dart'; class PaymentMethod extends StatefulWidget { @override @@ -181,9 +183,9 @@ class _PaymentMethodState extends State { borderRadius: BorderRadius.circular(10), side: selectedPaymentMethod == "installment" ? BorderSide( - color: Colors.green, width: 5.0) + color: Colors.green, width: 5.0) : BorderSide( - color: Colors.transparent, width: 0.0), + color: Colors.transparent, width: 0.0), ), child: Container( height: 120.0, @@ -222,6 +224,7 @@ class _PaymentMethodState extends State { onPressed: () { // navigateToBookSuccess(context); // insertAppointment(context, widget.doctor); + openPayment(); }, child: Text(TranslationBase.of(context).confirm, style: TextStyle(fontSize: 18.0)), @@ -231,6 +234,16 @@ class _PaymentMethodState extends State { ); } + openPayment() { + MyInAppBrowser browser = new MyInAppBrowser(onExitCallback: onBrowserExit); + + browser.openUrl(url: "data:text/html;base64,PGh0bWw+IDxoZWFkPjwvaGVhZD48Ym9keT48Zm9ybSBpZD0icGF5bWVudEZvcm0iIGFjdGlvbj0iaHR0cHM6Ly9obWd3ZWJzZXJ2aWNlcy5jb20vUGF5Rm9ydFdlYkxpdmUvcGFnZXMvU2VuZFBheUZvcnRSZXF1ZXN0LmFzcHgiIG1ldGhvZD0icG9zdCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQW1vdW50IiB2YWx1ZT0iMTIyIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJQcm9qSUQiIHZhbHVlPSIxMiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iT3JkZXJfRGVzYyIgdmFsdWU9IkFkdmFuY2UgUGF5bWVudCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iT3JkZXJJRCIgdmFsdWU9IjEyLTEyMzE3NTUtMTU5NjY0MDY0MSI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUGF5bWVudE9wdGlvbiIgdmFsdWU9Ik1BREEiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkVtYWlsIiB2YWx1ZT0iVGFtZXIuZmFuYXNoZWhAZ21haWwuY29tIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTZXJ2SUQiIHZhbHVlPSIzIiAgPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNoYW5uZWxJRCIgdmFsdWU9IjIiICA+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTGFuZyIgdmFsdWU9IkVOIiAgPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlJldHVyblVSTCIgdmFsdWU9IiIgID48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDdXN0TmFtZSIgdmFsdWU9IlRBKioqKiIgPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlBhdGllbnRPdXRTQSIgdmFsdWU9ImZhbHNlIiA+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUGF0aWVudFR5cGVJRCIgdmFsdWU9IjEiID48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJEZXZpY2VUb2tlbiIgdmFsdWU9InVuZGVmaW5lZCx1bmRlZmluZWQiID48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJMb25naXR1ZGUiIHZhbHVlPSJ1bmRlZmluZWQiID48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJMYXRpdHVkZSIgdmFsdWU9InVuZGVmaW5lZCIgPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkxpdmVfU2VydmljZUlEIiB2YWx1ZT0idW5kZWZpbmVkIiA+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ3VzdElEIiB2YWx1ZT0iMTIzMTc1NSIgID48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJSZXNwb25zZUNvbnRpbnVlVVJMIiB2YWx1ZT0iaHR0cDovL2htZy5jb20vRG9jdW1lbnRzL3N1Y2Nlc3MuaHRtbCIgPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkJhY2tDbGlja1VybCIgdmFsdWU9Imh0dHA6Ly9obWcuY29tL0RvY3VtZW50cy9zdWNjZXNzLmh0bWwiID48L2Zvcm0+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGF5bWVudEZvcm0iKS5zdWJtaXQoKTsgPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4="); + } + + onBrowserExit() { + print("onBrowserExit Called!!!!"); + } + updateSelectedPaymentMethod(String selectedMethod) { setState(() { selectedPaymentMethod = selectedMethod; diff --git a/lib/widgets/in_app_browser/InAppBrowser.dart b/lib/widgets/in_app_browser/InAppBrowser.dart new file mode 100644 index 00000000..4f0dd644 --- /dev/null +++ b/lib/widgets/in_app_browser/InAppBrowser.dart @@ -0,0 +1,67 @@ +import 'package:flutter_inappwebview/flutter_inappwebview.dart'; + +class MyInAppBrowser extends InAppBrowser { + static List successURLS = ['success', 'PayFortResponse', 'PayFortSucess']; + + static List errorURLS = ['PayfortCancel']; + + final Function onExitCallback; + + MyInAppBrowser({this.onExitCallback}); + + Future onBrowserCreated() async { + print("\n\nBrowser Created!\n\n"); + } + + @override + Future onLoadStart(String url) async { + print("\n\nStarted $url\n\n"); + } + + @override + Future onLoadStop(String url) async { + print("\n\nStopped $url\n\n"); + } + + @override + void onLoadError(String url, int code, String message) { + print("Can't load $url.. Error: $message"); + } + + @override + void onProgressChanged(int progress) { + print("Progress: $progress"); + } + + @override + void onExit() { + print("\n\nBrowser closed!\n\n"); + onExitCallback(); + } + + @override + Future shouldOverrideUrlLoading( + ShouldOverrideUrlLoadingRequest shouldOverrideUrlLoadingRequest) async { + print("\n\n override ${shouldOverrideUrlLoadingRequest.url}\n\n"); + return ShouldOverrideUrlLoadingAction.ALLOW; + } + + @override + void onLoadResource(LoadedResource response) { + print("Started at: " + + response.startTime.toString() + + "ms ---> duration: " + + response.duration.toString() + + "ms " + + response.url); + } + + @override + void onConsoleMessage(ConsoleMessage consoleMessage) { + print(""" + console output: + message: ${consoleMessage.message} + messageLevel: ${consoleMessage.messageLevel.toValue()} + """); + } +} diff --git a/pubspec.yaml b/pubspec.yaml index 464d6ef4..1b6090af 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -81,8 +81,12 @@ dependencies: # Location Helper map_launcher: ^0.8.1 + #Calendar Events manage_calendar_events: ^1.0.2 + #InAppBrowser + flutter_inappwebview: ^4.0.0+4 + From 28fde5c5001040d735281c4301d6eceea000be11 Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Sun, 9 Aug 2020 19:41:06 +0300 Subject: [PATCH 07/13] My Appointments implemented, Appointment Details functionality updated, Logged In User details added in APIs & other updates --- assets/images/medical/my_appointment_icon.png | Bin 0 -> 1766 bytes assets/images/new-design/arrow.png | Bin 0 -> 2214 bytes .../images/new-design/noAppointmentIcon.png | Bin 0 -> 3274 bytes lib/config/config.dart | 8 +- lib/config/localized_values.dart | 16 + lib/pages/BookAppointment/BookConfirm.dart | 35 +- lib/pages/BookAppointment/BookSuccess.dart | 501 ++++++++++++++---- lib/pages/BookAppointment/QRCode.dart | 297 +++++++++++ lib/pages/BookAppointment/Search.dart | 3 +- .../components/DocAvailableAppointments.dart | 5 +- .../components/SearchByClinic.dart | 12 +- .../components/SearchByDoctor.dart | 10 +- .../BookAppointment/widgets/DoctorView.dart | 3 +- .../MyAppointments/AppointmentDetails.dart | 3 +- lib/pages/MyAppointments/MyAppointments.dart | 243 +++++++++ lib/pages/MyAppointments/VisitTicket.dart | 6 +- .../MyAppointments/models/ArrivedButtons.dart | 2 +- .../models/ArrivedButtonsAllowCheckIn.dart | 2 +- .../widgets/AppointmentActions.dart | 8 +- .../widgets/AppointmentCardView.dart | 144 +++++ lib/pages/ToDoList/ToDo.dart | 470 ++++++++-------- lib/pages/ToDoList/payment_method_select.dart | 1 - lib/pages/ToDoList/widgets/paymentDialog.dart | 14 +- lib/pages/medical/medical_profile_page.dart | 30 +- .../appointment_services/GetDoctorsList.dart | 357 ++++++++++--- .../authentication/auth_provider.dart | 17 +- .../clinic_services/get_clinic_service.dart | 6 +- lib/uitl/translations_delegate_base.dart | 26 +- lib/uitl/utils.dart | 34 ++ lib/widgets/in_app_browser/InAppBrowser.dart | 21 +- lib/widgets/others/app_scaffold_widget.dart | 2 + no-wait-queue.png | Bin 0 -> 3314 bytes pubspec.yaml | 3 + 33 files changed, 1795 insertions(+), 484 deletions(-) create mode 100644 assets/images/medical/my_appointment_icon.png create mode 100644 assets/images/new-design/arrow.png create mode 100644 assets/images/new-design/noAppointmentIcon.png create mode 100644 lib/pages/BookAppointment/QRCode.dart create mode 100644 lib/pages/MyAppointments/MyAppointments.dart create mode 100644 lib/pages/MyAppointments/widgets/AppointmentCardView.dart create mode 100644 no-wait-queue.png diff --git a/assets/images/medical/my_appointment_icon.png b/assets/images/medical/my_appointment_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..f5e4c7d4d3368f21ebe925d9240438ee1c117010 GIT binary patch literal 1766 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 literal 0 HcmV?d00001 diff --git a/assets/images/new-design/noAppointmentIcon.png b/assets/images/new-design/noAppointmentIcon.png new file mode 100644 index 0000000000000000000000000000000000000000..a52b5011607e08bc28d41572fe2e44ea4a922080 GIT binary patch literal 3274 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 literal 0 HcmV?d00001 diff --git a/lib/config/config.dart b/lib/config/config.dart index 41c76242..1f47a03d 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -5,7 +5,7 @@ import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; const MAX_SMALL_SCREEN = 660; -const BASE_URL = 'https://uat.hmgwebservices.com/Services'; +const BASE_URL = 'https://hmgwebservices.com/Services'; const GET_PROJECT = '/Lists.svc/REST/GetProject'; @@ -55,6 +55,12 @@ const CONFIRM_APPOINTMENT = "/MobileNotifications.svc/REST/ConfirmAppointment"; //URL to cancel appointment const CANCEL_APPOINTMENT = "/Doctors.svc/REST/CancelAppointment"; +//URL get appointment QR +const GENERATE_QR_APPOINTMENT = "/Doctors.svc/REST/GenerateQRAppointmentNo"; + +//URL send email appointment QR +const EMAIL_QR_APPOINTMENT = "/Notifications.svc/REST/sendEmailForOnLineCheckin"; + //URL to get medicine and pharmacies list const CHANNEL = 3; const GENERAL_ID = 'Cs2020@2016\$2958'; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index d9425234..3611298d 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -166,4 +166,20 @@ const Map> localizedValues = { "patientTaxToDo": {"en": "Tax amount: ", "ar": "قيمة الضريبة:"}, "patientShareTotalToDo": {"en": "Total amount Due: ", "ar": "المبلغ الإجمالي المستحق:"}, 'paymentMethod': {'en': 'Payment Method', 'ar': 'طريقة الدفع او السداد'}, + 'noNeedToWaitInLine': {'en': 'No need to stand in line.', 'ar': 'لا داعي للوقوف في الطابور.'}, + 'useQRAppoAttend': {'en': 'Use the QR code to register the appointment attendance.', 'ar': 'استخدم الكود لتسجيل الحضور في المستشفى.'}, + 'passQRAppoAttend': {'en': 'Pass the QR code through the attendance devices available in the Hospital.', 'ar': 'تمرير الكود من خلال اجهزة تسجيل الحضور المتوفرة في الفرع.'}, + 'sitWaitingQR': {'en': 'Sit in the waiting rooms until called by the nurse.', 'ar': 'الجلوس في غرف الانتظار لحين منادتك من قبل الممرضة.'}, + 'attendRegisterCode': {'en': 'Attendance registration code', 'ar': 'رمز تسجيل الحضور'}, + 'scanQRHospital': {'en': 'Scan above QR Code to Check-In on the Machine in Hospital', 'ar': 'مسح فوق رمز الاستجابة السريعة للتحقق في الجهاز في المستشفى'}, + "sendEmail": {"en": "Send Email", "ar": "ارسال نسخة"}, + "close": {"en": "Close", "ar": "مغلق"}, + "booked": {"en": "Booked", "ar": "محجوز"}, + "confirmed": {"en": "Confirmed", "ar": "مؤكد"}, + "arrived": {"en": "Arrived", "ar": "تم الحضور"}, + "payNowBookSuccess": {"en": "Pay now via Al Habib App", "ar": "ادفع الآن عبر تطبيق الحبيب"}, + "payNowBookSuccesstext1": {"en": "Pay Now using online payment service From secure payment gateways", "ar": "ادفع الآن باستخدام خدمة الدفع عبر الإنترنت من بوابات الدفع الآمنة"}, + "payNowBookSuccesstext2": {"en": "You can also Pay Later via online payment Or in Hospital", "ar": "يمكنك أيضًا الدفع لاحقًا عبر الدفع عبر الإنترنت أو في المستشفى"}, + 'payLater': {'en': 'Pay Later', 'ar': 'ادفع لاحقا'}, + }; diff --git a/lib/pages/BookAppointment/BookConfirm.dart b/lib/pages/BookAppointment/BookConfirm.dart index 5b4b9975..a31292fa 100644 --- a/lib/pages/BookAppointment/BookConfirm.dart +++ b/lib/pages/BookAppointment/BookConfirm.dart @@ -1,7 +1,10 @@ +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.dart'; +import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; @@ -28,6 +31,8 @@ class BookConfirm extends StatefulWidget { DoctorsListService service; PatientShareResponse patientShareResponse; + AuthenticatedUser authUser; + @override _BookConfirmState createState() => _BookConfirmState(); @@ -36,6 +41,8 @@ class BookConfirm extends StatefulWidget { class _BookConfirmState extends State { @override void initState() { + widget.authUser = new AuthenticatedUser(); + getPatientData(); widget.service = new DoctorsListService(); widget.patientShareResponse = new PatientShareResponse(); super.initState(); @@ -296,14 +303,14 @@ class _BookConfirmState extends State { child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ - Text("TAMER FANASHEH", + Text(widget.authUser.firstName + " " + widget.authUser.lastName, style: TextStyle( fontSize: 14.0, color: Colors.grey[900], letterSpacing: 1.0)), Container( margin: EdgeInsets.only(top: 5.0), - child: Text("Gender: Male", + child: Text("Gender: " + widget.authUser.genderDescription, style: TextStyle( fontSize: 12.0, color: Colors.grey[600], @@ -311,7 +318,7 @@ class _BookConfirmState extends State { ), Container( margin: EdgeInsets.only(top: 5.0, bottom: 3.0), - child: Text("Age: 33", + child: Text("Age: " + widget.authUser.age.toString(), style: TextStyle( fontSize: 12.0, color: Colors.grey[600], @@ -356,10 +363,10 @@ class _BookConfirmState extends State { ); } - cancelAppointment(DoctorList docObject, AppoitmentAllHistoryResultList appo) { + cancelAppointment(DoctorList docObject, AppoitmentAllHistoryResultList appo, BuildContext context) { ConfirmDialog.closeAlertDialog(context); DoctorsListService service = new DoctorsListService(); - service.cancelAppointment(appo).then((res) { + service.cancelAppointment(appo, context).then((res) { if (res['MessageStatus'] == 1) { insertAppointment(context, docObject); } else { @@ -374,7 +381,7 @@ class _BookConfirmState extends State { AppoitmentAllHistoryResultList appo; widget.service .insertAppointment(docObject.doctorID, docObject.clinicID, - docObject.projectID, widget.selectedTime, widget.selectedDate) + docObject.projectID, widget.selectedTime, widget.selectedDate, context) .then((res) { if (res['MessageStatus'] == 1) { AppToast.showSuccessToast(message: "Appointment Booked Successfully"); @@ -399,7 +406,7 @@ class _BookConfirmState extends State { confirmMessage: res['ErrorEndUserMessage'], okText: TranslationBase.of(context).confirm, cancelText: TranslationBase.of(context).cancel_nocaps, - okFunction: () => {cancelAppointment(docObject, appo)}, + okFunction: () => {cancelAppointment(docObject, appo, context)}, cancelFunction: () => {}); dialog.showAlertDialog(context); } @@ -411,7 +418,7 @@ class _BookConfirmState extends State { getPatientShare(context, String appointmentNo, int clinicID, int projectID, DoctorList docObject) { widget.service - .getPatientShare(appointmentNo, clinicID, projectID) + .getPatientShare(appointmentNo, clinicID, projectID, context) .then((res) { print(res); widget.patientShareResponse = new PatientShareResponse.fromJson(res); @@ -461,6 +468,18 @@ class _BookConfirmState extends State { return docSpeciality; } + getPatientData() async { + AppSharedPreferences sharedPref = AppSharedPreferences(); + if (await sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await sharedPref.getObject(USER_PROFILE)); + setState(() { + print(data); + widget.authUser = data; + }); + } + } + Future navigateToBookSuccess(context, DoctorList docObject, PatientShareResponse patientShareResponse) async { print(widget.appoDateFormatted); diff --git a/lib/pages/BookAppointment/BookSuccess.dart b/lib/pages/BookAppointment/BookSuccess.dart index 7025a90e..42d46956 100644 --- a/lib/pages/BookAppointment/BookSuccess.dart +++ b/lib/pages/BookAppointment/BookSuccess.dart @@ -1,8 +1,12 @@ import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.dart'; +import 'package:diplomaticquarterapp/routes.dart'; +import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:flutter/material.dart'; +import 'QRCode.dart'; + class BookSuccess extends StatefulWidget { PatientShareResponse patientShareResponse; DoctorList docObject; @@ -21,6 +25,12 @@ class BookSuccess extends StatefulWidget { } class _BookSuccessState extends State { + @override + void initState() { + // TODO: implement initState + super.initState(); + } + @override Widget build(BuildContext context) { return Scaffold( @@ -140,125 +150,392 @@ class _BookSuccessState extends State { ], ), ), - Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.max, - children: [ - Container( - margin: EdgeInsets.only(top: 30.0, bottom: 40.0), - alignment: Alignment.center, - child: Text(TranslationBase.of(context).confirmAppo, - style: TextStyle(fontSize: 18.0, letterSpacing: 0.8)), + getNextActionWidget(), + ], + ), + ), + ); + } + + Widget getNextActionWidget() { + switch (widget.patientShareResponse.nextAction) { + case 0: + return Container(); + break; + case 10: + return _getConfirmAppo(); + break; + case 15: + return _getPaymentPendingAppo(); + break; + case 20: + return _getPayNowAppo(); + break; + case 30: + return _getQRAppo(); + break; + } + } + + String getNextAction() { + switch (widget.patientShareResponse.nextAction) { + case 0: + return 'No Action'; + break; + case 10: + return 'Confirm'; + break; + case 15: + return 'Payment Pending'; + break; + case 20: + return 'Pay Now'; + break; + case 30: + return 'QR Code'; + break; + } + } + + Widget _getConfirmAppo() { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + Container( + margin: EdgeInsets.only(top: 30.0, bottom: 40.0), + alignment: Alignment.center, + child: Text(TranslationBase.of(context).confirmAppo, + style: TextStyle(fontSize: 18.0, letterSpacing: 0.8)), + ), + Flex( + direction: Axis.horizontal, + children: [ + Expanded( + child: Container( + padding: EdgeInsets.only(left: 10.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + _getBulletPoint("1"), + Container( + child: Text( + "Please confirm the appointment to avoid the cancellation", + overflow: TextOverflow.fade, + style: TextStyle(fontSize: 13.0)), + ), + ], ), - Flex( - direction: Axis.horizontal, + ), + ), + ], + ), + Flex( + direction: Axis.horizontal, + children: [ + Expanded( + child: Container( + padding: EdgeInsets.only(top: 20.0, left: 10.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + mainAxisSize: MainAxisSize.max, children: [ - Expanded( - child: Container( - padding: EdgeInsets.only(left: 10.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - mainAxisSize: MainAxisSize.max, - children: [ - _getBulletPoint("1"), - Container( - child: Text( - "Please confirm the appointment to avoid the cancellation", - overflow: TextOverflow.fade, - style: TextStyle(fontSize: 13.0)), - ), - ], - ), - ), + _getBulletPoint("2"), + Container( + width: MediaQuery.of(context).size.width * 0.8, + child: Text( + "The online payment process will be available 24 hours before the appointment.", + overflow: TextOverflow.clip, + style: TextStyle(fontSize: 13.0)), ), ], ), - Flex( - direction: Axis.horizontal, + ), + ), + ], + ), + Container( + margin: EdgeInsets.fromLTRB(50.0, 20.0, 50.0, 20.0), + child: Image.asset("assets/images/new-design/payment-method.png"), + ), + Container( + alignment: Alignment.bottomCenter, + height: MediaQuery.of(context).size.height * 0.32, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), + minWidth: MediaQuery.of(context).size.width * 0.7, + height: 45.0, + child: RaisedButton( + color: new Color(0xFF60686b), + textColor: Colors.white, + disabledTextColor: Colors.white, + disabledColor: new Color(0xFFbcc2c4), + onPressed: () {}, + child: Text(TranslationBase.of(context).confirm.toUpperCase(), + style: TextStyle(fontSize: 18.0)), + ), + ), + ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), + minWidth: MediaQuery.of(context).size.width * 0.7, + height: 45.0, + child: RaisedButton( + color: new Color(0xFFc5272d), + textColor: Colors.white, + disabledTextColor: Colors.white, + disabledColor: new Color(0xFFbcc2c4), + onPressed: () { + navigateToHome(context); + }, + child: Text( + TranslationBase.of(context).confirmLater.toUpperCase(), + style: TextStyle(fontSize: 18.0)), + ), + ), + ], + ), + ), + ], + ); + } + + Widget _getPaymentPendingAppo() { + return Container(); + } + + Widget _getPayNowAppo() { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + Container( + margin: EdgeInsets.only(top: 20.0, bottom: 0.0), + alignment: Alignment.center, + child: Text(TranslationBase.of(context).payNowBookSuccess, + style: TextStyle(fontSize: 20.0, letterSpacing: 0.8, fontWeight: FontWeight.bold)), + ), + Container( + alignment: Alignment.center, + child: Image.asset("assets/images/new-design/no-wait-queue.png", width: 120.0, + height: 120.0), + ), + Flex( + direction: Axis.horizontal, + children: [ + Expanded( + child: Container( + padding: EdgeInsets.only(left: 10.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + mainAxisSize: MainAxisSize.max, children: [ - Expanded( - child: Container( - padding: EdgeInsets.only(top: 20.0, left: 10.0), - child: Row( - mainAxisAlignment: MainAxisAlignment.start, - mainAxisSize: MainAxisSize.max, - children: [ - _getBulletPoint("2"), - Container( - width: MediaQuery.of(context).size.width * 0.8, - child: Text( - "The online payment process will be available 24 hours before the appointment.", - overflow: TextOverflow.clip, - style: TextStyle(fontSize: 13.0)), - ), - ], - ), - ), + _getBulletPoint("1"), + Container( + width: MediaQuery.of(context).size.width * 0.8, + child: Text( + TranslationBase.of(context).payNowBookSuccesstext1, + overflow: TextOverflow.fade, + style: TextStyle(fontSize: 13.0)), + ), + ], + ), + ), + ), + ], + ), + Container( + margin: EdgeInsets.fromLTRB(50.0, 20.0, 50.0, 20.0), + child: Image.asset("assets/images/new-design/payment-method.png"), + ), + Flex( + direction: Axis.horizontal, + children: [ + Expanded( + child: Container( + padding: EdgeInsets.only(top: 0.0, left: 10.0), + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + _getBulletPoint("2"), + Container( + width: MediaQuery.of(context).size.width * 0.8, + child: Text( + TranslationBase.of(context).payNowBookSuccesstext2, + overflow: TextOverflow.clip, + style: TextStyle(fontSize: 13.0)), ), ], ), - Container( - margin: EdgeInsets.fromLTRB(50.0, 20.0, 50.0, 20.0), - child: Image.asset( - "assets/images/new-design/payment-method.png"), + ), + ), + ], + ), + Container( + alignment: Alignment.bottomCenter, + height: MediaQuery.of(context).size.height * 0.2, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), ), - Container( - alignment: Alignment.bottomCenter, - height: MediaQuery.of(context).size.height * 0.32, - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - ButtonTheme( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10.0), - ), - minWidth: MediaQuery.of(context).size.width * 0.7, - height: 45.0, - child: RaisedButton( - color: new Color(0xFF60686b), - textColor: Colors.white, - disabledTextColor: Colors.white, - disabledColor: new Color(0xFFbcc2c4), - onPressed: () {}, - child: Text( - TranslationBase.of(context).confirm.toUpperCase(), - style: TextStyle(fontSize: 18.0)), - ), + minWidth: MediaQuery.of(context).size.width * 0.7, + height: 45.0, + child: RaisedButton( + color: new Color(0xFF60686b), + textColor: Colors.white, + disabledTextColor: Colors.white, + disabledColor: new Color(0xFFbcc2c4), + onPressed: () {}, + child: Text(TranslationBase.of(context).payNow.toUpperCase(), + style: TextStyle(fontSize: 18.0)), + ), + ), + ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), + minWidth: MediaQuery.of(context).size.width * 0.7, + height: 45.0, + child: RaisedButton( + color: new Color(0xFFc5272d), + textColor: Colors.white, + disabledTextColor: Colors.white, + disabledColor: new Color(0xFFbcc2c4), + onPressed: () { + navigateToHome(context); + }, + child: Text( + TranslationBase.of(context).payLater.toUpperCase(), + style: TextStyle(fontSize: 18.0)), + ), + ), + ], + ), + ), + ], + ); + } + + Widget _getQRAppo() { + return Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + Container( + margin: EdgeInsets.only(top: 30.0, bottom: 40.0), + alignment: Alignment.center, + child: Text(TranslationBase.of(context).noNeedToWaitInLine, + style: TextStyle(fontSize: 18.0, letterSpacing: 0.8)), + ), + Container( + alignment: Alignment.center, + child: Image.asset("assets/images/new-design/device_icon.png", width: 120.0, + height: 120.0), + ), + Flex( + direction: Axis.horizontal, + children: [ + Expanded( + child: Container( + padding: EdgeInsets.only(left: 10.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + _getBulletPoint("1"), + Container( + width: MediaQuery.of(context).size.width * 0.8, + child: Text( + TranslationBase.of(context).useQRAppoAttend, + overflow: TextOverflow.fade, + style: TextStyle(fontSize: 13.0)), + ), + ], ), - ButtonTheme( - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10.0), - ), - minWidth: MediaQuery.of(context).size.width * 0.7, - height: 45.0, - child: RaisedButton( - color: new Color(0xFFc5272d), - textColor: Colors.white, - disabledTextColor: Colors.white, - disabledColor: new Color(0xFFbcc2c4), - onPressed: () { - navigateToHome(context); - }, - child: Text( - TranslationBase.of(context) - .confirmLater - .toUpperCase(), - style: TextStyle(fontSize: 18.0)), - ), + ), + Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + _getBulletPoint("2"), + Container( + width: MediaQuery.of(context).size.width * 0.8, + child: Text( + TranslationBase.of(context).passQRAppoAttend, + overflow: TextOverflow.fade, + style: TextStyle(fontSize: 13.0)), + ), + ], ), - ], - ), + ), + Container( + margin: EdgeInsets.only(top: 15.0), + child: Row( + children: [ + _getBulletPoint("3"), + Container( + width: MediaQuery.of(context).size.width * 0.8, + child: Text( + TranslationBase.of(context).sitWaitingQR, + overflow: TextOverflow.fade, + style: TextStyle(fontSize: 13.0)), + ), + ], + ), + ), + ], ), - ], + ), ), ], ), - ), + Container( + alignment: Alignment.bottomCenter, + height: MediaQuery.of(context).size.height * 0.18, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), + minWidth: MediaQuery.of(context).size.width * 0.7, + height: 45.0, + child: RaisedButton( + color: new Color(0xFF60686b), + textColor: Colors.white, + disabledTextColor: Colors.white, + disabledColor: new Color(0xFFbcc2c4), + onPressed: () { +// navigateToQR(context); + getAppoQR(context); + }, + child: Text(TranslationBase.of(context).viewQR.toUpperCase(), + style: TextStyle(fontSize: 18.0)), + ), + ), + ], + ), + ), + ], ); } - - _getTextStyling() { return TextStyle(fontSize: 14.0, color: Colors.white, letterSpacing: 0.7); } @@ -292,7 +569,29 @@ class _BookSuccessState extends State { } Future navigateToHome(context) async { - Navigator.popUntil(context, ModalRoute.withName('/')); + Navigator.of(context).pushNamed(HOME); + } + + getAppoQR(context) { + DoctorsListService service = new DoctorsListService(); + service + .generateAppointmentQR(widget.patientShareResponse, context) + .then((res) { + print(res); + navigateToQR(context, res['AppointmentQR']); + }).catchError((err) { + print(err); + }); + } + + Future navigateToQR(context, String appoQR) async { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => QRCode( + patientShareResponse: widget.patientShareResponse, + appoQR: appoQR, + ))); } _getNormalText(text) { diff --git a/lib/pages/BookAppointment/QRCode.dart b/lib/pages/BookAppointment/QRCode.dart new file mode 100644 index 00000000..a850437b --- /dev/null +++ b/lib/pages/BookAppointment/QRCode.dart @@ -0,0 +1,297 @@ +import 'dart:convert'; +import 'dart:typed_data'; + +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; +import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; +import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.dart'; +import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; +import 'package:diplomaticquarterapp/routes.dart'; +import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/dialogs/confirm_dialog.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; + +class QRCode extends StatefulWidget { + PatientShareResponse patientShareResponse; + String appoQR; + AuthenticatedUser authUser; + AppSharedPreferences sharedPref = AppSharedPreferences(); + + QRCode({@required this.patientShareResponse, @required this.appoQR}); + + @override + _QRCodeState createState() => _QRCodeState(); +} + +class _QRCodeState extends State { + Uint8List _bytes; + + @override + void initState() { + // TODO: implement initState + _bytes = base64.decode(widget.appoQR.split(',').last); + widget.authUser = new AuthenticatedUser(); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return AppScaffold( + appBarTitle: TranslationBase.of(context).attendRegisterCode, + isShowAppBar: true, + body: SingleChildScrollView( + child: Container( + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + Container( + margin: EdgeInsets.only(top: 30.0), + alignment: Alignment.center, + child: Image.memory(_bytes, scale: 0.5), + ), + Container( + margin: EdgeInsets.only(top: 20.0, left: 20.0, right: 20.0), + child: Divider( + color: Colors.red[700], + thickness: 0.8, + ), + ), + Container( + child: Row( + children: [ + Container( + margin: + EdgeInsets.only(top: 10.0, left: 40.0, bottom: 10.0), + child: Image.asset( + "assets/images/new-design/device_icon.png", + width: 120.0, + height: 120.0), + ), + Container( + width: MediaQuery.of(context).size.width * 0.5, + margin: EdgeInsets.only( + top: 15.0, bottom: 10.0, left: 20.0, right: 20.0), + child: Text(TranslationBase.of(context).scanQRHospital, + style: TextStyle( + color: Colors.red[700], + fontSize: 20.0, + fontWeight: FontWeight.bold)), + ), + ], + ), + ), + Container( + margin: EdgeInsets.only(top: 10.0, left: 20.0, right: 20.0), + child: Divider( + color: Colors.red[700], + thickness: 0.8, + ), + ), + Container( + margin: EdgeInsets.only( + top: 15.0, bottom: 10.0, left: 20.0, right: 20.0), + child: Text(TranslationBase.of(context).appoInfo, + style: TextStyle( + fontSize: 18.0, + color: Colors.grey[700], + fontWeight: FontWeight.bold)), + ), + Container( + margin: EdgeInsets.only(left: 20.0, bottom: 20.0), + decoration: BoxDecoration( + borderRadius: BorderRadius.circular(10), + color: Colors.grey[200], + boxShadow: [ + BoxShadow(color: Colors.grey, spreadRadius: 2), + ], + ), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Container( + margin: EdgeInsets.only( + top: 15.0, bottom: 10.0, left: 20.0, right: 20.0), + child: Text(widget.patientShareResponse.doctorNameObj, + style: TextStyle( + fontSize: 18.0, + color: Colors.grey[700], + fontWeight: FontWeight.bold)), + ), + Container( + margin: EdgeInsets.only( + bottom: 10.0, left: 20.0, right: 20.0), + child: Text( + getDoctorSpeciality( + widget.patientShareResponse.doctorSpeciality), + style: TextStyle( + fontSize: 18.0, color: Colors.grey[700])), + ), + Container( + margin: EdgeInsets.only( + top: 0.0, bottom: 10.0, left: 20.0, right: 20.0), + child: Text(widget.patientShareResponse.projectName, + style: TextStyle( + fontSize: 18.0, color: Colors.grey[700])), + ), + Container( + margin: EdgeInsets.only( + top: 0.0, bottom: 10.0, left: 20.0, right: 20.0), + child: Text( + getDate(widget.patientShareResponse.appointmentDate), + style: TextStyle( + fontSize: 18.0, color: Colors.grey[700])), + ), + ], + ), + ), + Container( + alignment: Alignment.bottomCenter, + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), + minWidth: MediaQuery.of(context).size.width * 0.7, + height: 45.0, + child: RaisedButton( + color: new Color(0xFF60686b), + textColor: Colors.white, + disabledTextColor: Colors.white, + disabledColor: new Color(0xFFbcc2c4), + onPressed: () { +// navigateToQR(context); +// getAppoQR(context); + sendEmail(); + }, + child: Text( + TranslationBase.of(context).sendEmail.toUpperCase(), + style: TextStyle(fontSize: 18.0)), + ), + ), + ], + ), + ), + Container( + alignment: Alignment.bottomCenter, + height: MediaQuery.of(context).size.height * 0.1, + margin: EdgeInsets.only(bottom: 20.0), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + ButtonTheme( + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10.0), + ), + minWidth: MediaQuery.of(context).size.width * 0.7, + height: 45.0, + child: RaisedButton( + color: new Color(0xFF60686b), + textColor: Colors.white, + disabledTextColor: Colors.white, + disabledColor: new Color(0xFFbcc2c4), + onPressed: () { + navigateToHome(context); + }, + child: Text( + TranslationBase.of(context).close.toUpperCase(), + style: TextStyle(fontSize: 18.0)), + ), + ), + ], + ), + ), + ], + ), + ), + ), + ); + } + + sendEmail() async { + DoctorsListService service = new DoctorsListService(); + + if (await widget.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await widget.sharedPref.getObject(USER_PROFILE)); + setState(() { + widget.authUser = data; + }); + } + + ConfirmDialog dialog = new ConfirmDialog( + context: context, + confirmMessage: "Send a copy of this QR to the email " + + widget.authUser.emailAddress + + "?", + okText: TranslationBase.of(context).confirm, + cancelText: TranslationBase.of(context).cancel_nocaps, + okFunction: () { + service + .sendAppointmentQREmail( + widget.authUser.emailAddress, + widget.patientShareResponse.appointmentDate, + widget.patientShareResponse.appointmentNo.toString(), + widget.patientShareResponse.doctorNameObj, + widget.patientShareResponse.projectName, + widget.appoQR, + getDoctorSpeciality( + widget.patientShareResponse.doctorSpeciality), + context) + .then((res) { + print(res); + ConfirmDialog.closeAlertDialog(context); + }).catchError((err) { + ConfirmDialog.closeAlertDialog(context); + AppToast.showErrorToast(message: err); + print(err); + }); + }, + cancelFunction: () => {}); + dialog.showAlertDialog(context); + } + + Future navigateToHome(context) async { + Navigator.of(context).pushNamed(HOME); + } + + getPatientShare(context, String appointmentNo, int clinicID, int projectID, + DoctorList docObject) {} + + String getDate(String appoDate) { + var appoDateFormatted = ""; + + var dateObj = DateUtil.convertStringToDate(appoDate); + + setState(() { + appoDateFormatted = DateUtil.getWeekDay(dateObj.weekday) + + ", " + + dateObj.day.toString() + + " " + + DateUtil.getMonth(dateObj.month) + + " " + + dateObj.year.toString() + + ", " + + dateObj.hour.toString() + + ":" + + dateObj.minute.toString() + + ":00"; + }); + + return appoDateFormatted; + } + + String getDoctorSpeciality(List docSpecial) { + String docSpeciality = ""; + docSpecial.forEach((v) { + docSpeciality = docSpeciality + v + "\n"; + }); + return docSpeciality; + } +} diff --git a/lib/pages/BookAppointment/Search.dart b/lib/pages/BookAppointment/Search.dart index a83dee33..55fa943e 100644 --- a/lib/pages/BookAppointment/Search.dart +++ b/lib/pages/BookAppointment/Search.dart @@ -30,7 +30,8 @@ class _SearchState extends State with SingleTickerProviderStateMixin { ], controller: _tabController, ), - title: Text(TranslationBase.of(context).bookAppo), + title: Text(TranslationBase.of(context).bookAppo, + style: TextStyle(color: Colors.white)), ), body: TabBarView( physics: NeverScrollableScrollPhysics(), diff --git a/lib/pages/BookAppointment/components/DocAvailableAppointments.dart b/lib/pages/BookAppointment/components/DocAvailableAppointments.dart index a23abccd..19c7cc79 100644 --- a/lib/pages/BookAppointment/components/DocAvailableAppointments.dart +++ b/lib/pages/BookAppointment/components/DocAvailableAppointments.dart @@ -55,7 +55,8 @@ class _DocAvailableAppointmentsState extends State _selectedDay: ['Event A0'] }; - getDoctorFreeSlots(context, widget.doctor); + WidgetsBinding.instance + .addPostFrameCallback((_) => getDoctorFreeSlots(context, widget.doctor)); _calendarController = CalendarController(); _animationController = AnimationController( @@ -322,7 +323,7 @@ class _DocAvailableAppointmentsState extends State DoctorsListService service = new DoctorsListService(); service .getDoctorFreeSlots( - docObject.doctorID, docObject.clinicID, docObject.projectID) + docObject.doctorID, docObject.clinicID, docObject.projectID, context) .then((res) { if (res['MessageStatus'] == 1) { if (res['FreeTimeSlots'].length != 0) { diff --git a/lib/pages/BookAppointment/components/SearchByClinic.dart b/lib/pages/BookAppointment/components/SearchByClinic.dart index 1c871c40..63053077 100644 --- a/lib/pages/BookAppointment/components/SearchByClinic.dart +++ b/lib/pages/BookAppointment/components/SearchByClinic.dart @@ -20,8 +20,8 @@ class _SearchByClinicState extends State { @override void initState() { - // TODO: implement initState - getClinicsList(); + WidgetsBinding.instance + .addPostFrameCallback((_) => getClinicsList()); super.initState(); } @@ -74,7 +74,7 @@ class _SearchByClinicState extends State { setState(() { dropdownValue = newValue; print(dropdownValue); - getDoctorsList(); + getDoctorsList(context); }); }, ), @@ -86,7 +86,7 @@ class _SearchByClinicState extends State { getClinicsList() { ClinicListService service = new ClinicListService(); - service.getClinicsList().then((res) { + service.getClinicsList(context).then((res) { if (res['MessageStatus'] == 1) { setState(() { res['ListClinicCentralized'].forEach((v) { @@ -99,10 +99,10 @@ class _SearchByClinicState extends State { }); } - getDoctorsList() { + getDoctorsList(BuildContext context) { List doctorsList = []; DoctorsListService service = new DoctorsListService(); - service.getDoctorsList(int.parse(dropdownValue), 0).then((res) { + service.getDoctorsList(int.parse(dropdownValue), 0, context).then((res) { if (res['MessageStatus'] == 1) { setState(() { if (res['DoctorList'].length != 0) { diff --git a/lib/pages/BookAppointment/components/SearchByDoctor.dart b/lib/pages/BookAppointment/components/SearchByDoctor.dart index 27b7166d..668426ad 100644 --- a/lib/pages/BookAppointment/components/SearchByDoctor.dart +++ b/lib/pages/BookAppointment/components/SearchByDoctor.dart @@ -69,17 +69,17 @@ class _SearchByDoctorState extends State { textColor: Colors.white, disabledTextColor: Colors.white, disabledColor: new Color(0xFFbcc2c4), - onPressed: _isButtonDisabled ? null : _searchDoctor, + onPressed: _isButtonDisabled ? null : _searchDoctor(context), child: Text(TranslationBase.of(context).search, style: TextStyle(fontSize: 18.0)), ), ); } - getDoctorsList() { + getDoctorsList(BuildContext context) { List doctorsList = []; DoctorsListService service = new DoctorsListService(); - service.getDoctorsListByName(doctorNameController.text).then((res) { + service.getDoctorsListByName(doctorNameController.text, context).then((res) { if (res['MessageStatus'] == 1) { setState(() { if(res['DoctorList'].length != 0) { @@ -111,8 +111,8 @@ class _SearchByDoctorState extends State { print(_isButtonDisabled); } - void _searchDoctor() { - getDoctorsList(); + _searchDoctor(BuildContext context) { + getDoctorsList(context); } Future navigateToSearchResults(context, List docList) async { diff --git a/lib/pages/BookAppointment/widgets/DoctorView.dart b/lib/pages/BookAppointment/widgets/DoctorView.dart index e50829a1..031f53c3 100644 --- a/lib/pages/BookAppointment/widgets/DoctorView.dart +++ b/lib/pages/BookAppointment/widgets/DoctorView.dart @@ -16,7 +16,6 @@ class DoctorView extends StatelessWidget { Widget build(BuildContext context) { return InkWell( onTap: () { -// navigateToDoctorProfile(context); getDoctorsProfile(context, doctor); }, child: Card( @@ -117,7 +116,7 @@ class DoctorView extends StatelessWidget { DoctorsListService service = new DoctorsListService(); service .getDoctorsProfile( - docObject.doctorID, docObject.clinicID, docObject.projectID) + docObject.doctorID, docObject.clinicID, docObject.projectID, context) .then((res) { if (res['MessageStatus'] == 1) { if (res['DoctorProfileList'].length != 0) { diff --git a/lib/pages/MyAppointments/AppointmentDetails.dart b/lib/pages/MyAppointments/AppointmentDetails.dart index 4f94c47b..fff6d383 100644 --- a/lib/pages/MyAppointments/AppointmentDetails.dart +++ b/lib/pages/MyAppointments/AppointmentDetails.dart @@ -165,7 +165,7 @@ class _AppointmentDetailsState extends State ), ), Container( - height: MediaQuery.of(context).size.height * 0.8, + height: MediaQuery.of(context).size.height * 0.87, child: TabBarView( physics: NeverScrollableScrollPhysics(), children: [ @@ -213,6 +213,7 @@ class _AppointmentDetailsState extends State docObj.actualDoctorRate = widget.appo.actualDoctorRate; docObj.projectName = widget.appo.projectName; docObj.originalClinicID = widget.appo.originalClinicID; + docObj.doctorImageURL = widget.appo.doctorImageURL; return docObj; } } diff --git a/lib/pages/MyAppointments/MyAppointments.dart b/lib/pages/MyAppointments/MyAppointments.dart new file mode 100644 index 00000000..122222b2 --- /dev/null +++ b/lib/pages/MyAppointments/MyAppointments.dart @@ -0,0 +1,243 @@ +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +import 'package:diplomaticquarterapp/pages/MyAppointments/models/AppointmentType.dart'; +import 'package:diplomaticquarterapp/pages/MyAppointments/widgets/AppointmentCardView.dart'; +import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; +import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; +import 'package:flutter/material.dart'; + +class MyAppointments extends StatefulWidget { + List appoList = []; + + List bookedAppoList = []; + List confirmedAppoList = []; + List arrivedAppoList = []; + + @override + _MyAppointmentsState createState() => _MyAppointmentsState(); +} + +class _MyAppointmentsState extends State + with SingleTickerProviderStateMixin { + TabController _tabController; + + bool isDataLoaded = false; + + @override + void initState() { + _tabController = new TabController(length: 3, vsync: this); + WidgetsBinding.instance + .addPostFrameCallback((_) => getPatientAppointmentHistory()); + super.initState(); + } + + @override + Widget build(BuildContext context) { + return AppScaffold( + appBarTitle: "My Appointments", + isShowAppBar: true, + body: Container( + child: Column(children: [ + /// this is will not colored with theme data + TabBar( + tabs: [ + Tab(text: TranslationBase.of(context).booked), + Tab(text: TranslationBase.of(context).confirmed), + Tab(text: TranslationBase.of(context).arrived), + ], + controller: _tabController, + ), + Divider( + color: Colors.grey[600], + thickness: 0.5, + ), + Expanded( + child: new TabBarView( + physics: NeverScrollableScrollPhysics(), + children: [ + isDataLoaded ? getBookedAppointments() : Container(), + isDataLoaded ? getConfirmedAppointments() : Container(), + isDataLoaded ? getArrivedAppointments() : Container() + ], + controller: _tabController, + ), + ), + ]), + ), + ); + } + + getPatientAppointmentHistory() { + DoctorsListService service = new DoctorsListService(); + widget.appoList.clear(); + widget.bookedAppoList.clear(); + widget.confirmedAppoList.clear(); + widget.arrivedAppoList.clear(); + service.getPatientAppointmentHistory(false, context).then((res) { + print(res['AppoimentAllHistoryResultList'].length); + if (res['MessageStatus'] == 1) { + setState(() { + if (res['AppoimentAllHistoryResultList'].length != 0) { + res['AppoimentAllHistoryResultList'].forEach((v) { + widget.appoList + .add(new AppoitmentAllHistoryResultList.fromJson(v)); + }); + sortAppointmentList(); + openAppointmentsTab(); + isDataLoaded = true; + } else {} + }); + } else { + AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + } + }).catchError((err) { + print(err); + }); + } + + bool isConfirmed(AppoitmentAllHistoryResultList appo) { + return AppointmentType.isConfirmed(appo); + } + + bool isArrived(AppoitmentAllHistoryResultList appo) { + return AppointmentType.isArrived(appo); + } + + bool isBooked(AppoitmentAllHistoryResultList appo) { + return AppointmentType.isBooked(appo); + } + + sortAppointmentList() { + widget.appoList.forEach((v) { + if (isBooked(v)) { + widget.bookedAppoList.add(v); + } + + if (isConfirmed(v)) { + widget.confirmedAppoList.add(v); + } + + if (isArrived(v)) { + widget.arrivedAppoList.add(v); + } + }); + } + + openAppointmentsTab() { + if (widget.bookedAppoList.length != 0) { + _tabController.animateTo((_tabController.index + 1) % 1); + return; + } + + if (widget.confirmedAppoList.length != 0) { + _tabController.animateTo((_tabController.index + 1) % 2); + return; + } + + if (widget.arrivedAppoList.length != 0) { + _tabController.animateTo((_tabController.index + 1) % 3); + return; + } + } + + Widget getBookedAppointments() { + return Container( + child: widget.bookedAppoList.length != 0 + ? new ListView.builder( + itemCount: widget.bookedAppoList.length, + itemBuilder: (context, i) { + return AppointmentCard( + appo: widget.bookedAppoList[i], + onReloadAppointmentHistory: getPatientAppointmentHistory, + ); + }, + ) + : Container( + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset( + "assets/images/new-design/noAppointmentIcon.png"), + Container( + margin: EdgeInsets.only(top: 10.0), + child: Text("No Booked Appointments", + style: TextStyle( + fontSize: 16.0, + )), + ), + ], + ), + ), + ), + ); + } + + Widget getConfirmedAppointments() { + return widget.confirmedAppoList.length != 0 + ? Container( + child: new ListView.builder( + itemCount: widget.confirmedAppoList.length, + itemBuilder: (context, i) { + return AppointmentCard( + appo: widget.confirmedAppoList[i], + onReloadAppointmentHistory: getPatientAppointmentHistory, + ); + }, + ), + ) + : Container( + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset("assets/images/new-design/noAppointmentIcon.png"), + Container( + margin: EdgeInsets.only(top: 10.0), + child: Text("No Confirmed Appointments", + style: TextStyle( + fontSize: 16.0, + )), + ), + ], + ), + ), + ); + } + + Widget getArrivedAppointments() { + return widget.arrivedAppoList.length != 0 + ? Container( + child: new ListView.builder( + itemCount: widget.arrivedAppoList.length, + itemBuilder: (context, i) { + return AppointmentCard( + appo: widget.arrivedAppoList[i], + onReloadAppointmentHistory: getPatientAppointmentHistory, + ); + }, + ), + ) + : Container( + child: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + crossAxisAlignment: CrossAxisAlignment.center, + children: [ + Image.asset("assets/images/new-design/noAppointmentIcon.png"), + Container( + margin: EdgeInsets.only(top: 10.0), + child: Text("No Arrived Appointments", + style: TextStyle( + fontSize: 16.0, + )), + ), + ], + ), + ), + ); + } +} diff --git a/lib/pages/MyAppointments/VisitTicket.dart b/lib/pages/MyAppointments/VisitTicket.dart index a4dd0a5e..923ef67d 100644 --- a/lib/pages/MyAppointments/VisitTicket.dart +++ b/lib/pages/MyAppointments/VisitTicket.dart @@ -19,7 +19,7 @@ class _VisitTicketState extends State { @override void initState() { - getPatientAppointmentCurfewHistory(); + getPatientAppointmentCurfewHistory(context); super.initState(); } @@ -46,10 +46,10 @@ class _VisitTicketState extends State { ); } - getPatientAppointmentCurfewHistory() { + getPatientAppointmentCurfewHistory(BuildContext context) { loading(true); DoctorsListService service = new DoctorsListService(); - service.getPatientAppointmentHistory(true).then((res) { + service.getPatientAppointmentHistory(true, context).then((res) { print(res['AppoimentAllHistoryResultList']); if (res['MessageStatus'] == 1) { setState(() { diff --git a/lib/pages/MyAppointments/models/ArrivedButtons.dart b/lib/pages/MyAppointments/models/ArrivedButtons.dart index 98b32def..00778ef7 100644 --- a/lib/pages/MyAppointments/models/ArrivedButtons.dart +++ b/lib/pages/MyAppointments/models/ArrivedButtons.dart @@ -42,7 +42,7 @@ class ArrivedButtons { { "title": "Insurance", "subtitle": "Approvals", - "icon": "assets/images/new-design/insurance_approvals_icon-in.png", + "icon": "assets/images/new-design/insurance_approvals_icon.png", "caller": "goToTodoList" }, { diff --git a/lib/pages/MyAppointments/models/ArrivedButtonsAllowCheckIn.dart b/lib/pages/MyAppointments/models/ArrivedButtonsAllowCheckIn.dart index 98b32def..00778ef7 100644 --- a/lib/pages/MyAppointments/models/ArrivedButtonsAllowCheckIn.dart +++ b/lib/pages/MyAppointments/models/ArrivedButtonsAllowCheckIn.dart @@ -42,7 +42,7 @@ class ArrivedButtons { { "title": "Insurance", "subtitle": "Approvals", - "icon": "assets/images/new-design/insurance_approvals_icon-in.png", + "icon": "assets/images/new-design/insurance_approvals_icon.png", "caller": "goToTodoList" }, { diff --git a/lib/pages/MyAppointments/widgets/AppointmentActions.dart b/lib/pages/MyAppointments/widgets/AppointmentActions.dart index 2aaf13d1..f0ff2e6f 100644 --- a/lib/pages/MyAppointments/widgets/AppointmentActions.dart +++ b/lib/pages/MyAppointments/widgets/AppointmentActions.dart @@ -303,20 +303,16 @@ class _AppointmentActionsState extends State { cancelAppointment() { ConfirmDialog.closeAlertDialog(context); - loading(true); DoctorsListService service = new DoctorsListService(); - service.cancelAppointment(widget.appo).then((res) { + service.cancelAppointment(widget.appo, context).then((res) { print(res); if (res['MessageStatus'] == 1) { AppToast.showSuccessToast(message: res['ErrorEndUserMessage']); - loading(false); } else { AppToast.showErrorToast(message: res['ErrorEndUserMessage']); - loading(false); } }).catchError((err) { print(err); - loading(false); }); } @@ -355,7 +351,7 @@ class _AppointmentActionsState extends State { DoctorsListService service = new DoctorsListService(); service .confirmAppointment(widget.appo.appointmentNo, widget.appo.clinicID, - widget.appo.projectID) + widget.appo.projectID, context) .then((res) { if (res['MessageStatus'] == 1) { AppToast.showSuccessToast(message: res['ErrorEndUserMessage']); diff --git a/lib/pages/MyAppointments/widgets/AppointmentCardView.dart b/lib/pages/MyAppointments/widgets/AppointmentCardView.dart new file mode 100644 index 00000000..e038c0af --- /dev/null +++ b/lib/pages/MyAppointments/widgets/AppointmentCardView.dart @@ -0,0 +1,144 @@ +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:flutter/material.dart'; +import 'package:rating_bar/rating_bar.dart'; + +import '../AppointmentDetails.dart'; + +class AppointmentCard extends StatefulWidget { + AppoitmentAllHistoryResultList appo; + final Function onReloadAppointmentHistory; + + AppointmentCard( + {@required this.appo, @required this.onReloadAppointmentHistory}); + + @override + _ApointmentCardState createState() => _ApointmentCardState(); +} + +class _ApointmentCardState extends State { + @override + Widget build(BuildContext context) { + return InkWell( + onTap: () { + navigateToAppointmentDetails(context, widget.appo); + }, + child: Card( + margin: EdgeInsets.fromLTRB(20.0, 16.0, 20.0, 8.0), + color: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + child: Container( + decoration: BoxDecoration(), + padding: EdgeInsets.all(7.0), + width: MediaQuery.of(context).size.width, + child: Row( + mainAxisAlignment: MainAxisAlignment.start, + children: [ + ClipRRect( + borderRadius: BorderRadius.circular(100.0), + child: Image.network(widget.appo.doctorImageURL, + fit: BoxFit.fill, height: 60.0, width: 60.0), + ), + Container( + width: MediaQuery.of(context).size.width * 0.666, + margin: EdgeInsets.fromLTRB(20.0, 10.0, 10.0, 0.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.appo.doctorTitle + + " " + + widget.appo.doctorNameObj, + style: TextStyle( + fontSize: 14.0, + color: Colors.grey[700], + letterSpacing: 1.0)), + Container( + margin: EdgeInsets.only(top: 3.0), + child: Text(widget.appo.clinicName, + style: TextStyle( + fontSize: 12.0, + color: Colors.grey[600], + letterSpacing: 1.0)), + ), + Container( + margin: EdgeInsets.only(top: 3.0), + child: Text(widget.appo.projectName, + style: TextStyle( + fontSize: 12.0, + color: Colors.grey[600], + letterSpacing: 1.0)), + ), + Container( + margin: EdgeInsets.only(top: 3.0, bottom: 3.0), + child: Text(getDate(widget.appo.appointmentDate).trim(), + style: TextStyle( + fontSize: 12.0, + color: Colors.grey[600], + letterSpacing: 1.0)), + ), + Row( + mainAxisAlignment: MainAxisAlignment.spaceBetween, + mainAxisSize: MainAxisSize.max, + children: [ + RatingBar.readOnly( + initialRating: + widget.appo.actualDoctorRate.toDouble(), + size: 20.0, + filledColor: Colors.yellow[700], + emptyColor: Colors.grey[500], + isHalfAllowed: true, + halfFilledIcon: Icons.star_half, + filledIcon: Icons.star, + emptyIcon: Icons.star, + ), + Container( + transform: Matrix4.translationValues(0.0, -40.0, 0.0), + child: Image.asset( + "assets/images/new-design/arrow.png", + width: 25.0, + height: 25.0), + ), + ], + ), + ], + ), + ), + ], + ), + ), + ), + ); + } + + String getDate(String date) { + DateTime dateObj = DateUtil.convertStringToDate(date); + return DateUtil.getWeekDay(dateObj.weekday) + + ", " + + dateObj.day.toString() + + " " + + DateUtil.getMonth(dateObj.month) + + " " + + dateObj.year.toString(); + } + + String getDoctorSpeciality(List docSpecial) { + String docSpeciality = ""; + docSpecial.forEach((v) { + docSpeciality = docSpeciality + v + "\n"; + }); + return docSpeciality; + } + + Future navigateToAppointmentDetails(context, appo) async { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => AppointmentDetails(appo: appo))) + .then((value) { + widget.onReloadAppointmentHistory(); + }); + } +} diff --git a/lib/pages/ToDoList/ToDo.dart b/lib/pages/ToDoList/ToDo.dart index b916ee22..c3b02a2c 100644 --- a/lib/pages/ToDoList/ToDo.dart +++ b/lib/pages/ToDoList/ToDo.dart @@ -1,9 +1,13 @@ import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.dart'; +import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; +import 'package:diplomaticquarterapp/pages/BookAppointment/QRCode.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/AppointmentDetails.dart'; +import 'package:diplomaticquarterapp/pages/ToDoList/payment_method_select.dart'; import 'package:diplomaticquarterapp/pages/ToDoList/widgets/paymentDialog.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; @@ -25,13 +29,16 @@ class ToDo extends StatefulWidget { class _ToDoState extends State { AppSharedPreferences sharedPref = AppSharedPreferences(); - bool isLoading = false; + AuthenticatedUser authUser; + AuthProvider authProvider = new AuthProvider(); @override void initState() { +// authUser = authProvider.getAuthenticatedUser(); print("initState!!!!!"); widget.patientShareResponse = new PatientShareResponse(); - getPatientAppointmentHistory(); + WidgetsBinding.instance + .addPostFrameCallback((_) => getPatientAppointmentHistory()); super.initState(); } @@ -39,222 +46,208 @@ class _ToDoState extends State { Widget build(BuildContext context) { return AppScaffold( appBarTitle: TranslationBase.of(context).todoList, - body: isLoading == false - ? SingleChildScrollView( - child: Container( - child: ListView.builder( - scrollDirection: Axis.vertical, - shrinkWrap: true, - physics: ScrollPhysics(), - padding: EdgeInsets.all(0.0), - itemCount: widget.appoList.length, - itemBuilder: (context, index) { - return Container( - margin: EdgeInsets.all(10.0), - child: Card( - margin: EdgeInsets.fromLTRB(8.0, 0.0, 8.0, 8.0), - color: Colors.white, - shape: RoundedRectangleBorder( - borderRadius: BorderRadius.circular(10), + body: SingleChildScrollView( + child: Container( + child: ListView.builder( + scrollDirection: Axis.vertical, + shrinkWrap: true, + physics: ScrollPhysics(), + padding: EdgeInsets.all(0.0), + itemCount: widget.appoList.length, + itemBuilder: (context, index) { + return Container( + margin: EdgeInsets.all(10.0), + child: Card( + margin: EdgeInsets.fromLTRB(8.0, 0.0, 8.0, 8.0), + color: Colors.white, + shape: RoundedRectangleBorder( + borderRadius: BorderRadius.circular(10), + ), + child: Container( + width: MediaQuery.of(context).size.width, + padding: EdgeInsets.all(10.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.max, + children: [ + Row( + children: [ + Image.asset( + "assets/images/new-design/time_icon.png", + width: 20.0, + height: 20.0), + Container( + margin: EdgeInsets.only(left: 10.0, right: 30.0), + child: Text( + getDate( + widget.appoList[index].appointmentDate), + style: TextStyle(fontSize: 12.0)), + ), + Image.asset( + "assets/images/new-design/hospital_address_icon.png", + width: 20.0, + height: 20.0), + Container( + margin: EdgeInsets.only(left: 10.0, right: 10.0), + child: Text(widget.appoList[index].projectName, + style: TextStyle(fontSize: 12.0)), + ), + ], ), - child: Container( - width: MediaQuery.of(context).size.width, - padding: EdgeInsets.all(10.0), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.max, - children: [ - Row( - children: [ - Image.asset( - "assets/images/new-design/time_icon.png", - width: 20.0, - height: 20.0), - Container( - margin: EdgeInsets.only( - left: 10.0, right: 30.0), - child: Text( - getDate(widget - .appoList[index].appointmentDate), - style: TextStyle(fontSize: 12.0)), - ), - Image.asset( - "assets/images/new-design/hospital_address_icon.png", - width: 20.0, - height: 20.0), - Container( - margin: EdgeInsets.only( - left: 10.0, right: 10.0), - child: Text( - widget.appoList[index].projectName, - style: TextStyle(fontSize: 12.0)), - ), - ], - ), - Container( + Container( + margin: EdgeInsets.only(top: 5.0), + child: Divider( + color: Colors.grey[500], + ), + ), + Flex( + direction: Axis.horizontal, + children: [ + Expanded( + flex: 1, + child: Container( + height: + MediaQuery.of(context).size.height * 0.1, margin: EdgeInsets.only(top: 5.0), - child: Divider( - color: Colors.grey[500], + child: ClipRRect( + borderRadius: BorderRadius.circular(100.0), + child: Image.network( + widget.appoList[index].doctorImageURL, + fit: BoxFit.fill), ), ), - Flex( - direction: Axis.horizontal, - children: [ - Expanded( - flex: 1, - child: Container( - height: - MediaQuery.of(context).size.height * - 0.1, - margin: EdgeInsets.only(top: 5.0), - child: ClipRRect( - borderRadius: - BorderRadius.circular(100.0), - child: Image.network( + ), + Expanded( + flex: 3, + child: Container( + margin: EdgeInsets.only( + top: 20.0, left: 20.0, right: 20.0), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + Text( + widget.appoList[index].doctorTitle + + " " + widget - .appoList[index].doctorImageURL, - fit: BoxFit.fill), - ), - ), - ), - Expanded( - flex: 3, - child: Container( + .appoList[index].doctorNameObj, + style: TextStyle( + fontSize: 14.0, + color: Colors.black, + fontWeight: FontWeight.bold, + letterSpacing: 1.0)), + Container( margin: EdgeInsets.only( - top: 20.0, left: 20.0, right: 20.0), - child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, - children: [ - Text( - widget.appoList[index] - .doctorTitle + - " " + - widget.appoList[index] - .doctorNameObj, - style: TextStyle( - fontSize: 14.0, - color: Colors.black, - fontWeight: FontWeight.bold, - letterSpacing: 1.0)), - Container( - margin: EdgeInsets.only( - top: 3.0, bottom: 3.0), - child: Text( - getDoctorSpeciality(widget - .appoList[index] - .doctorSpeciality) - .trim(), - style: TextStyle( - fontSize: 12.0, - color: Colors.grey[600], - letterSpacing: 1.0)), - ), - Row( - mainAxisAlignment: - MainAxisAlignment.spaceBetween, - mainAxisSize: MainAxisSize.max, - children: [ - RatingBar.readOnly( - initialRating: widget - .appoList[index] - .actualDoctorRate - .toDouble(), - size: 20.0, - filledColor: Colors.yellow[700], - emptyColor: Colors.grey[500], - isHalfAllowed: true, - halfFilledIcon: Icons.star_half, - filledIcon: Icons.star, - emptyIcon: Icons.star, - ), - ], - ), - ], - ), + top: 3.0, bottom: 3.0), + child: Text( + getDoctorSpeciality(widget + .appoList[index] + .doctorSpeciality) + .trim(), + style: TextStyle( + fontSize: 12.0, + color: Colors.grey[600], + letterSpacing: 1.0)), ), - ), - Expanded( - flex: 1, - child: InkWell( - onTap: () => performNextAction( - widget.appoList[index]), - child: Container( - margin: EdgeInsets.only(top: 20.0), - child: Column( - children: [ - Image.asset( - getNextActionImage(widget - .appoList[index] - .nextAction), - width: 50.0, - height: 50.0), - Container( - margin: EdgeInsets.only(top: 5.0), - child: Text( - getNextActionText(widget - .appoList[index] - .nextAction), - textAlign: TextAlign.center, - style: TextStyle( - fontSize: 12.0)), - ) - ], + Row( + mainAxisAlignment: + MainAxisAlignment.spaceBetween, + mainAxisSize: MainAxisSize.max, + children: [ + RatingBar.readOnly( + initialRating: widget + .appoList[index].actualDoctorRate + .toDouble(), + size: 20.0, + filledColor: Colors.yellow[700], + emptyColor: Colors.grey[500], + isHalfAllowed: true, + halfFilledIcon: Icons.star_half, + filledIcon: Icons.star, + emptyIcon: Icons.star, ), - ), + ], ), - ) - ], - ), - Divider( - color: Colors.grey[500], + ], + ), ), - Flex( - direction: Axis.horizontal, - children: [ - Expanded( - flex: 2, - child: Container( - child: Text( - getNextActionDescription(widget + ), + Expanded( + flex: 1, + child: InkWell( + onTap: () => + performNextAction(widget.appoList[index]), + child: Container( + margin: EdgeInsets.only(top: 20.0), + child: Column( + children: [ + Image.asset( + getNextActionImage(widget .appoList[index].nextAction), - style: TextStyle( - fontSize: 12.0, - color: Colors.grey[700])), - ), - ), - Expanded( - flex: 1, - child: GestureDetector( - onTap: () { - navigateToAppointmentDetails( - context, widget.appoList[index]); - }, - child: Container( + width: 50.0, + height: 50.0), + Container( + margin: EdgeInsets.only(top: 5.0), child: Text( - TranslationBase.of(context) - .upcomingDetails, - textAlign: TextAlign.end, - style: TextStyle( - fontSize: 12.0, - color: Colors.red[600], - decoration: - TextDecoration.underline)), - ), - ), - ) - ], - ) - ], - ), + getNextActionText(widget + .appoList[index].nextAction), + textAlign: TextAlign.center, + style: TextStyle(fontSize: 12.0)), + ) + ], + ), + ), + ), + ) + ], + ), + Divider( + color: Colors.grey[500], + ), + Flex( + direction: Axis.horizontal, + children: [ + Expanded( + flex: 2, + child: Container( + child: Text( + getNextActionDescription( + widget.appoList[index].nextAction), + style: TextStyle( + fontSize: 12.0, + color: Colors.grey[700])), + ), + ), + Expanded( + flex: 1, + child: GestureDetector( + onTap: () { + navigateToAppointmentDetails( + context, widget.appoList[index]); + }, + child: Container( + child: Text( + TranslationBase.of(context) + .upcomingDetails, + textAlign: TextAlign.end, + style: TextStyle( + fontSize: 12.0, + color: Colors.red[600], + decoration: + TextDecoration.underline)), + ), + ), + ) + ], ), - ), - ); - }, + ], + ), + ), ), - ), - ) - : AppCircularProgressIndicator(), + ); + }, + ), + ), + ), ); } @@ -305,6 +298,10 @@ class _ToDoState extends State { case 20: getPatientShare(context, appo); break; + + case 30: + getAppoQR(context, appo); + break; } } @@ -425,9 +422,8 @@ class _ToDoState extends State { } getPatientAppointmentHistory() { - loading(true); DoctorsListService service = new DoctorsListService(); - service.getPatientAppointmentHistory(true).then((res) { + service.getPatientAppointmentHistory(true, context).then((res) { print(res['AppoimentAllHistoryResultList']); if (res['MessageStatus'] == 1) { setState(() { @@ -439,33 +435,59 @@ class _ToDoState extends State { }); } else {} }); - loading(false); } else { AppToast.showErrorToast(message: res['ErrorEndUserMessage']); - loading(false); } }).catchError((err) { print(err); - loading(false); }); } getPatientShare(context, AppoitmentAllHistoryResultList appo) { - loading(true); DoctorsListService service = new DoctorsListService(); service - .getPatientShare( - appo.appointmentNo.toString(), appo.clinicID, appo.projectID) + .getPatientShare(appo.appointmentNo.toString(), appo.clinicID, + appo.projectID, context) .then((res) { - loading(false); widget.patientShareResponse = new PatientShareResponse.fromJson(res); openPaymentDialog(appo, widget.patientShareResponse); }).catchError((err) { - loading(false); print(err); }); } + getAppoQR(context, AppoitmentAllHistoryResultList appo) { + PatientShareResponse patientShareResponse = new PatientShareResponse(); + + patientShareResponse.doctorNameObj = appo.doctorNameObj; + patientShareResponse.doctorSpeciality = appo.doctorSpeciality; + patientShareResponse.projectName = appo.projectName; + patientShareResponse.appointmentDate = appo.appointmentDate; + patientShareResponse.appointmentNo = appo.appointmentNo; + patientShareResponse.clinicID = appo.clinicID; + patientShareResponse.projectID = appo.projectID; + patientShareResponse.isFollowup = appo.isFollowup; + + DoctorsListService service = new DoctorsListService(); + service.generateAppointmentQR(patientShareResponse, context).then((res) { + print(res); + navigateToQR(context, res['AppointmentQR'], patientShareResponse); + }).catchError((err) { + print(err); + }); + } + + Future navigateToQR( + context, String appoQR, PatientShareResponse patientShareResponse) async { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => QRCode( + patientShareResponse: patientShareResponse, + appoQR: appoQR, + ))); + } + openPaymentDialog(AppoitmentAllHistoryResultList appo, PatientShareResponse patientShareResponse) { showGeneralDialog( @@ -489,33 +511,29 @@ class _ToDoState extends State { context: context, pageBuilder: (context, animation1, animation2) {}) .then((value) { - getPatientAppointmentHistory(); +// getPatientAppointmentHistory(); }); } + Future navigateToPaymentMethod(context) async { + Navigator.push( + context, MaterialPageRoute(builder: (context) => PaymentMethod())); + } + confirmAppointment(AppoitmentAllHistoryResultList appo) { - loading(true); DoctorsListService service = new DoctorsListService(); service - .confirmAppointment(appo.appointmentNo, appo.clinicID, appo.projectID) + .confirmAppointment( + appo.appointmentNo, appo.clinicID, appo.projectID, context) .then((res) { if (res['MessageStatus'] == 1) { AppToast.showSuccessToast(message: res['ErrorEndUserMessage']); - loading(false); getPatientAppointmentHistory(); } else { AppToast.showErrorToast(message: res['ErrorEndUserMessage']); - loading(false); } }).catchError((err) { print(err); - loading(false); - }); - } - - loading(bool flag) { - setState(() { - isLoading = flag; }); } } diff --git a/lib/pages/ToDoList/payment_method_select.dart b/lib/pages/ToDoList/payment_method_select.dart index 5f3eff18..e9f72ed8 100644 --- a/lib/pages/ToDoList/payment_method_select.dart +++ b/lib/pages/ToDoList/payment_method_select.dart @@ -2,7 +2,6 @@ import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; import 'package:flutter/material.dart'; -import 'package:flutter_inappwebview/flutter_inappwebview.dart'; class PaymentMethod extends StatefulWidget { @override diff --git a/lib/pages/ToDoList/widgets/paymentDialog.dart b/lib/pages/ToDoList/widgets/paymentDialog.dart index 8341c6de..cc7a8748 100644 --- a/lib/pages/ToDoList/widgets/paymentDialog.dart +++ b/lib/pages/ToDoList/widgets/paymentDialog.dart @@ -9,7 +9,9 @@ class PaymentDialog extends StatefulWidget { AppoitmentAllHistoryResultList appo; PatientShareResponse patientShareResponse; - PaymentDialog({@required this.appo, this.patientShareResponse}); + final Function onPaymentMethodSelected; + + PaymentDialog({@required this.appo, @required this.onPaymentMethodSelected, this.patientShareResponse}); @override _PaymentDialogState createState() => _PaymentDialogState(); @@ -158,7 +160,7 @@ class _PaymentDialogState extends State { child: InkWell( onTap: () { Navigator.of(context).pop(); - naviagetToPaymentMethod(context); + widget.onPaymentMethodSelected(); }, child: Container( child: Text("Ok", @@ -196,10 +198,10 @@ class _PaymentDialogState extends State { color: Colors.grey[700], fontSize: 15.0, fontFamily: "Open-Sans-Bold"); } - Future naviagetToPaymentMethod(context) async { - Navigator.push( - context, MaterialPageRoute(builder: (context) => PaymentMethod())); - } +// Future navigateToPaymentMethod(context) async { +// Navigator.push( +// context, MaterialPageRoute(builder: (context) => PaymentMethod())); +// } String getDate(String date) { DateTime dateObj = DateUtil.convertStringToDate(date); diff --git a/lib/pages/medical/medical_profile_page.dart b/lib/pages/medical/medical_profile_page.dart index ceacaed4..bea8b2d1 100644 --- a/lib/pages/medical/medical_profile_page.dart +++ b/lib/pages/medical/medical_profile_page.dart @@ -1,5 +1,4 @@ -import 'dart:math'; - +import 'package:diplomaticquarterapp/pages/MyAppointments/MyAppointments.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_home_page.dart'; import 'package:diplomaticquarterapp/widgets/data_display/medical/medical_profile_item.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; @@ -47,8 +46,9 @@ class _MedicalProfilePageState extends State { Expanded( flex: 1, child: InkWell( - onTap: (){ - Navigator.push(context, FadePage(page: DoctorHomePage())); + onTap: () { + Navigator.push( + context, FadePage(page: DoctorHomePage())); }, child: MedicalProfileItem( title: 'My Doctor', @@ -60,9 +60,7 @@ class _MedicalProfilePageState extends State { Expanded( flex: 1, child: InkWell( - onTap: (){ - - }, + onTap: () {}, child: MedicalProfileItem( title: 'Lab', imagePath: 'lab_result_icon.png', @@ -85,9 +83,9 @@ class _MedicalProfilePageState extends State { Expanded( flex: 1, child: InkWell( - onTap: (){ - Navigator.push(context, FadePage(page: HomePrescriptionsPage())); - + onTap: () { + Navigator.push(context, + FadePage(page: HomePrescriptionsPage())); }, child: MedicalProfileItem( title: 'Medicines', @@ -130,7 +128,17 @@ class _MedicalProfilePageState extends State { ), Expanded( flex: 1, - child: Container(), + child: InkWell( + onTap: () { + Navigator.push( + context, FadePage(page: MyAppointments())); + }, + child: MedicalProfileItem( + title: 'My Appointments', + imagePath: 'my_appointment_icon.png', + subTitle: 'List', + ), + ), ) ], ), diff --git a/lib/services/appointment_services/GetDoctorsList.dart b/lib/services/appointment_services/GetDoctorsList.dart index f4494d2f..6d3ff1af 100644 --- a/lib/services/appointment_services/GetDoctorsList.dart +++ b/lib/services/appointment_services/GetDoctorsList.dart @@ -1,17 +1,36 @@ +import 'dart:io'; + import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/core/service/base_service.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; +import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.dart'; +import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/models/Request.dart'; +import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; +import 'package:diplomaticquarterapp/uitl/utils.dart'; +import 'package:flutter/cupertino.dart'; class DoctorsListService extends BaseService { AppSharedPreferences sharedPref = AppSharedPreferences(); AppGlobal appGlobal = new AppGlobal(); - Future getDoctorsList(int clinicID, int projectID) async { + AuthenticatedUser authUser = new AuthenticatedUser(); + AuthProvider authProvider = new AuthProvider(); + + Future getDoctorsList( + int clinicID, int projectID, BuildContext context) async { + Utils.showProgressDialog(context); Map request; + + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + var languageID = await sharedPref.getString(APP_LANGUAGE); Request req = appGlobal.getPublicRequest(); request = { @@ -28,9 +47,9 @@ class DoctorsListService extends BaseService { "ProjectID": projectID, "ContinueDentalPlan": false, "IsSearchAppointmnetByClinicID": true, - "PatientID": 0, - "gender": 0, - "age": 0, + "PatientID": authUser.patientID, + "gender": authUser.gender, + "age": authUser.age, "IsGetNearAppointment": false, "Latitude": 0, "Longitude": 0, @@ -41,15 +60,24 @@ class DoctorsListService extends BaseService { await baseAppClient.post(GET_DOCTORS_LIST_URL, onSuccess: (response, statusCode) async { - localRes = response; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request); + localRes = response; + Utils.hideProgressDialog(); + }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); + throw error; + }, body: request); return Future.value(localRes); } - Future getDoctorsListByName(String docName) async { + Future getDoctorsListByName(String docName, BuildContext context) async { Map request; + + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + var languageID = await sharedPref.getString(APP_LANGUAGE); Request req = appGlobal.getPublicRequest(); request = { @@ -67,9 +95,9 @@ class DoctorsListService extends BaseService { "ContinueDentalPlan": false, "IsSearchAppointmnetByClinicID": false, "DoctorName": docName, - "PatientID": 0, - "gender": 0, - "age": 0, + "PatientID": authUser.patientID, + "gender": authUser.gender, + "age": authUser.age, "IsGetNearAppointment": false, "Latitude": 0, "Longitude": 0, @@ -80,14 +108,15 @@ class DoctorsListService extends BaseService { await baseAppClient.post(GET_DOCTORS_LIST_URL, onSuccess: (response, statusCode) async { - localRes = response; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request); + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: request); return Future.value(localRes); } - Future getDoctorsProfile(int docID, int clinicID, int projectID) async { + Future getDoctorsProfile(int docID, int clinicID, int projectID, context) async { + Utils.showProgressDialog(context); Map request; var languageID = await sharedPref.getString(APP_LANGUAGE); Request req = appGlobal.getPublicRequest(); @@ -114,14 +143,18 @@ class DoctorsListService extends BaseService { await baseAppClient.post(GET_DOCTOR_PROFILE, onSuccess: (response, statusCode) async { - localRes = response; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request); + localRes = response; + Utils.hideProgressDialog(); + }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); + throw error; + }, body: request); return Future.value(localRes); } - Future getDoctorFreeSlots(int docID, int clinicID, int projectID) async { + Future getDoctorFreeSlots( + int docID, int clinicID, int projectID, BuildContext context) async { + Utils.showProgressDialog(context); Map request; var languageID = await sharedPref.getString(APP_LANGUAGE); Request req = appGlobal.getPublicRequest(); @@ -148,19 +181,29 @@ class DoctorsListService extends BaseService { await baseAppClient.post(GET_DOCTOR_FREE_SLOTS, onSuccess: (response, statusCode) async { - localRes = response; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request); + localRes = response; + Utils.hideProgressDialog(); + }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); + throw error; + }, body: request); return Future.value(localRes); } Future insertAppointment(int docID, int clinicID, int projectID, - String selectedTime, String selectedDate) async { + String selectedTime, String selectedDate, BuildContext context) async { + Utils.showProgressDialog(context); + Map request; + + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + var languageID = await sharedPref.getString(APP_LANGUAGE); Request req = appGlobal.getPublicRequest(); - request = { "IsForLiveCare": false, "ProjectID": projectID, @@ -172,7 +215,7 @@ class DoctorsListService extends BaseService { "InitialSlotDuration": 0, "StrAppointmentDate": selectedDate, "IsVirtual": false, - "DeviceType": "iOS", + "DeviceType": Platform.isIOS ? 'iOS' : 'Android', "BookedBy": 102, "VisitType": 1, "VisitFor": 1, @@ -181,29 +224,40 @@ class DoctorsListService extends BaseService { "LanguageID": languageID == 'ar' ? 1 : 2, "IPAdress": req.IPAdress, "generalid": req.generalid, - "PatientOutSA": 0, + "PatientOutSA": authUser.outSA, "SessionID": "YckwoXhUmWBsnHKEKig", "isDentalAllowedBackend": false, - "DeviceTypeID": 1, - "PatientID": 1231755, + "DeviceTypeID": req.DeviceTypeID, + "PatientID": authUser.patientID, "TokenID": "@dm!n", - "PatientTypeID": 1, - "PatientType": 1 + "PatientTypeID": authUser.patientType, + "PatientType": authUser.patientType }; dynamic localRes; await baseAppClient.post(INSERT_SPECIFIC_APPOINTMENT, onSuccess: (response, statusCode) async { - localRes = response; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request); + localRes = response; + Utils.hideProgressDialog(); + }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); + throw error; + }, body: request); return Future.value(localRes); } - Future getPatientShare(String appoID, int clinicID, int projectID) async { + Future getPatientShare( + String appoID, int clinicID, int projectID, BuildContext context) async { + Utils.showProgressDialog(context); Map request; + + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + var languageID = await sharedPref.getString(APP_LANGUAGE); Request req = appGlobal.getPublicRequest(); @@ -217,29 +271,40 @@ class DoctorsListService extends BaseService { "LanguageID": languageID == 'ar' ? 1 : 2, "IPAdress": req.IPAdress, "generalid": req.generalid, - "PatientOutSA": 0, + "PatientOutSA": authUser.outSA, "SessionID": "YckwoXhUmWBsnHKEKig", "isDentalAllowedBackend": false, - "DeviceTypeID": 1, - "PatientID": 1231755, + "DeviceTypeID": req.DeviceTypeID, + "PatientID": authUser.patientID, "TokenID": "@dm!n", - "PatientTypeID": 1, - "PatientType": 1 + "PatientTypeID": authUser.patientType, + "PatientType": authUser.patientType }; dynamic localRes; await baseAppClient.post(GET_PATIENT_SHARE, onSuccess: (response, statusCode) async { - localRes = response['OnlineCheckInAppointments'][0]; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request); + localRes = response['OnlineCheckInAppointments'][0]; + Utils.hideProgressDialog(); + }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); + throw error; + }, body: request); return Future.value(localRes); } - Future getPatientAppointmentHistory(bool isActiveAppointment) async { + Future getPatientAppointmentHistory( + bool isActiveAppointment, BuildContext context) async { + Utils.showProgressDialog(context); Map request; + + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + var languageID = await sharedPref.getString(APP_LANGUAGE); Request req = appGlobal.getPublicRequest(); @@ -253,25 +318,28 @@ class DoctorsListService extends BaseService { "PatientOutSA": 0, "SessionID": "YckwoXhUmWBsnHKEKig", "isDentalAllowedBackend": false, - "DeviceTypeID": 1, - "PatientID": 1231755, + "DeviceTypeID": req.DeviceTypeID, + "PatientID": authUser.patientID, "TokenID": "@dm!n", - "PatientTypeID": 1, - "PatientType": 1 + "PatientTypeID": authUser.patientType, + "PatientType": authUser.patientType }; dynamic localRes; await baseAppClient.post(GET_PATIENT_APPOINTMENT_HISTORY, onSuccess: (response, statusCode) async { - localRes = response; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request); + localRes = response; + Utils.hideProgressDialog(); + }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); + throw error; + }, body: request); return Future.value(localRes); } - Future getPatientAppointmentCurfewHistory(bool isActiveAppointment) async { + Future getPatientAppointmentCurfewHistory( + bool isActiveAppointment) async { Map request; var languageID = await sharedPref.getString(APP_LANGUAGE); Request req = appGlobal.getPublicRequest(); @@ -286,7 +354,7 @@ class DoctorsListService extends BaseService { "PatientOutSA": 0, "SessionID": "YckwoXhUmWBsnHKEKig", "isDentalAllowedBackend": false, - "DeviceTypeID": 1, + "DeviceTypeID": req.DeviceTypeID, "PatientID": 1231755, "TokenID": "@dm!n", "PatientTypeID": 1, @@ -297,15 +365,24 @@ class DoctorsListService extends BaseService { await baseAppClient.post(GET_PATIENT_APPOINTMENT_CURFEW_HISTORY, onSuccess: (response, statusCode) async { - localRes = response; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request); + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: request); return Future.value(localRes); } - Future confirmAppointment(int appoNo, int clinicID, int projectID) async { + Future confirmAppointment( + int appoNo, int clinicID, int projectID, BuildContext context) async { + Utils.showProgressDialog(context); Map request; + + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + var languageID = await sharedPref.getString(APP_LANGUAGE); Request req = appGlobal.getPublicRequest(); @@ -322,26 +399,37 @@ class DoctorsListService extends BaseService { "PatientOutSA": 0, "SessionID": "YckwoXhUmWBsnHKEKig", "isDentalAllowedBackend": false, - "DeviceTypeID": 1, - "PatientID": 1231755, + "DeviceTypeID": req.DeviceTypeID, + "PatientID": authUser.patientID, "TokenID": "@dm!n", - "PatientTypeID": 1, - "PatientType": 1 + "PatientTypeID": authUser.patientType, + "PatientType": authUser.patientType }; dynamic localRes; await baseAppClient.post(CONFIRM_APPOINTMENT, onSuccess: (response, statusCode) async { - localRes = response; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request); + localRes = response; + Utils.hideProgressDialog(); + }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); + throw error; + }, body: request); return Future.value(localRes); } - Future cancelAppointment(AppoitmentAllHistoryResultList appo) async { + Future cancelAppointment( + AppoitmentAllHistoryResultList appo, BuildContext context) async { + Utils.showProgressDialog(context); Map request; + + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + var languageID = await sharedPref.getString(APP_LANGUAGE); Request req = appGlobal.getPublicRequest(); @@ -361,25 +449,130 @@ class DoctorsListService extends BaseService { "LanguageID": languageID == 'ar' ? 1 : 2, "IPAdress": req.IPAdress, "generalid": req.generalid, - "PatientOutSA": 0, + "PatientOutSA": authUser.outSA, "SessionID": "YckwoXhUmWBsnHKEKig", "isDentalAllowedBackend": false, - "DeviceTypeID": 1, - "PatientID": 1231755, + "DeviceTypeID": req.DeviceTypeID, + "PatientID": authUser.patientID, "TokenID": "@dm!n", - "PatientTypeID": 1, - "PatientType": 1 + "PatientTypeID": authUser.patientType, + "PatientType": authUser.patientType }; dynamic localRes; await baseAppClient.post(CANCEL_APPOINTMENT, onSuccess: (response, statusCode) async { - localRes = response; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request); + localRes = response; + Utils.hideProgressDialog(); + }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); + throw error; + }, body: request); + return Future.value(localRes); + } + + Future generateAppointmentQR( + PatientShareResponse patientShareResponse, BuildContext context) async { + Utils.showProgressDialog(context); + Map request; + + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + + var languageID = await sharedPref.getString(APP_LANGUAGE); + Request req = appGlobal.getPublicRequest(); + + request = { + "AppointmentNo": patientShareResponse.appointmentNo, + "ClinicID": patientShareResponse.clinicID, + "ProjectID": patientShareResponse.projectID, + "IsFollowup": patientShareResponse.isFollowup, + "VersionID": req.VersionID, + "Channel": req.Channel, + "LanguageID": languageID == 'ar' ? 1 : 2, + "IPAdress": req.IPAdress, + "generalid": req.generalid, + "PatientOutSA": authUser.outSA, + "SessionID": "YckwoXhUmWBsnHKEKig", + "isDentalAllowedBackend": false, + "DeviceTypeID": req.DeviceTypeID, + "PatientID": authUser.patientID, + "TokenID": "@dm!n", + "PatientTypeID": authUser.patientType, + "PatientType": authUser.patientType + }; + + dynamic localRes; + + await baseAppClient.post(GENERATE_QR_APPOINTMENT, + onSuccess: (response, statusCode) async { + localRes = response; + Utils.hideProgressDialog(); + }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); + throw error; + }, body: request); return Future.value(localRes); } + Future sendAppointmentQREmail( + String to, + String appoDate, + String appoNo, + String docName, + String projName, + String QR, + String speciality, + BuildContext context) async { + Utils.showProgressDialog(context); + Map request; + + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + + var languageID = await sharedPref.getString(APP_LANGUAGE); + Request req = appGlobal.getPublicRequest(); + + request = { + "AppointmentNo": appoNo, + "AppointmentDate": appoDate, + "DoctorName": docName, + "ProjectName": projName, + "QR": QR, + "Speciality": speciality, + "To": to, + "VersionID": req.VersionID, + "Channel": req.Channel, + "LanguageID": languageID == 'ar' ? 1 : 2, + "IPAdress": req.IPAdress, + "generalid": req.generalid, + "PatientOutSA": authUser.outSA, + "SessionID": "YckwoXhUmWBsnHKEKig", + "isDentalAllowedBackend": false, + "DeviceTypeID": req.DeviceTypeID, + "PatientID": authUser.patientID, + "TokenID": "@dm!n", + "PatientTypeID": authUser.patientType, + "PatientType": authUser.patientType + }; + + dynamic localRes; + + await baseAppClient.post(EMAIL_QR_APPOINTMENT, + onSuccess: (response, statusCode) async { + localRes = response; + Utils.hideProgressDialog(); + }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); + throw error; + }, body: request); + return Future.value(localRes); + } } diff --git a/lib/services/authentication/auth_provider.dart b/lib/services/authentication/auth_provider.dart index 8f1a053e..3cb63ac3 100644 --- a/lib/services/authentication/auth_provider.dart +++ b/lib/services/authentication/auth_provider.dart @@ -1,25 +1,20 @@ -import 'dart:convert'; - import 'package:diplomaticquarterapp/config/config.dart'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; -import 'package:diplomaticquarterapp/models/Authentication/check_activation_code_request.dart'; +import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; +import 'package:diplomaticquarterapp/models/Authentication/check_activation_code_request.dart'; import 'package:diplomaticquarterapp/models/Authentication/check_activation_code_response.dart'; import 'package:diplomaticquarterapp/models/Authentication/check_paitent_authentication_req.dart'; import 'package:diplomaticquarterapp/models/Authentication/check_user_status_req.dart'; import 'package:diplomaticquarterapp/models/Authentication/checkpatient_for_registration.dart'; -import 'package:diplomaticquarterapp/models/Authentication/get_mobile_info_request.dart'; -import 'package:diplomaticquarterapp/models/Authentication/get_mobile_info_response.dart'; import 'package:diplomaticquarterapp/models/Authentication/insert_device_imei_request.dart'; import 'package:diplomaticquarterapp/models/Authentication/select_device_imei_res.dart'; -import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart'; -import 'package:diplomaticquarterapp/models/Request.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; -import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:flutter/cupertino.dart'; // SharedPreferences sharedPref = new SharedPreferences(); enum APP_STATUS { LOADING, UNAUTHENTICATED, AUTHENTICATED } + AppSharedPreferences sharedPref = new AppSharedPreferences(); const String INSERT_DEVICE_IMEI = '/Patients.svc/REST/Patient_INSERTDeviceIMEI'; @@ -40,6 +35,7 @@ class AuthProvider with ChangeNotifier { bool isLogin = false; bool isLoading = true; dynamic authenticatedUser; + AuthProvider() { getUserAuthentication(); } @@ -250,9 +246,10 @@ class AuthProvider with ChangeNotifier { } } - AuthenticatedUser getAuthenticatedUser() { + Future getAuthenticatedUser() async { this.isLogin = true; - return authenticatedUser; + return Future.value( + AuthenticatedUser.fromJson(await sharedPref.getObject(USER_PROFILE))); } Future checkPatientForRegisteration( diff --git a/lib/services/clinic_services/get_clinic_service.dart b/lib/services/clinic_services/get_clinic_service.dart index b9a023f0..05f6a2cb 100644 --- a/lib/services/clinic_services/get_clinic_service.dart +++ b/lib/services/clinic_services/get_clinic_service.dart @@ -4,12 +4,14 @@ import 'package:diplomaticquarterapp/core/service/base_service.dart'; import 'package:diplomaticquarterapp/core/service/client/base_app_client.dart'; import 'package:diplomaticquarterapp/models/Request.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; +import 'package:diplomaticquarterapp/uitl/utils.dart'; class ClinicListService extends BaseService { AppSharedPreferences sharedPref = AppSharedPreferences(); AppGlobal appGlobal = new AppGlobal(); - Future getClinicsList() async { + Future getClinicsList(context) async { + Utils.showProgressDialog(context); Map request; var languageID = await sharedPref.getString(APP_LANGUAGE); Request req = appGlobal.getPublicRequest(); @@ -30,7 +32,9 @@ class ClinicListService extends BaseService { await baseAppClient.post(GET_CLINICS_LIST_URL, onSuccess: (response, statusCode) async { localRes = response; + Utils.hideProgressDialog(); }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); throw error; }, body: request); return Future.value(localRes); diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 81efd65b..168978b5 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -268,8 +268,30 @@ class TranslationBase { String get patientTaxToDo => localizedValues['patientTaxToDo'][locale.languageCode]; String get patientShareTotalToDo => localizedValues['patientShareTotalToDo'][locale.languageCode]; String get paymentMethod => localizedValues['paymentMethod'][locale.languageCode]; - - + String get moreVerification => + localizedValues['more-verify'][locale.languageCode]; + String get welcomeBack => + localizedValues['welcome-back'][locale.languageCode]; + String get accountInfo => + localizedValues['account-info'][locale.languageCode]; + String get useAnotherAccount => + localizedValues['another-acc'][locale.languageCode]; + String get next => localizedValues['next'][locale.languageCode]; + String get noNeedToWaitInLine => localizedValues['noNeedToWaitInLine'][locale.languageCode]; + String get useQRAppoAttend => localizedValues['useQRAppoAttend'][locale.languageCode]; + String get passQRAppoAttend => localizedValues['passQRAppoAttend'][locale.languageCode]; + String get sitWaitingQR => localizedValues['sitWaitingQR'][locale.languageCode]; + String get attendRegisterCode => localizedValues['attendRegisterCode'][locale.languageCode]; + String get scanQRHospital => localizedValues['scanQRHospital'][locale.languageCode]; + String get sendEmail => localizedValues['sendEmail'][locale.languageCode]; + String get close => localizedValues['close'][locale.languageCode]; + String get booked => localizedValues['booked'][locale.languageCode]; + String get confirmed => localizedValues['confirmed'][locale.languageCode]; + String get arrived => localizedValues['arrived'][locale.languageCode]; + String get payNowBookSuccess => localizedValues['payNowBookSuccess'][locale.languageCode]; + String get payNowBookSuccesstext1 => localizedValues['payNowBookSuccesstext1'][locale.languageCode]; + String get payNowBookSuccesstext2 => localizedValues['payNowBookSuccesstext2'][locale.languageCode]; + String get payLater => localizedValues['payLater'][locale.languageCode]; } diff --git a/lib/uitl/utils.dart b/lib/uitl/utils.dart index 7a987279..0c753cbb 100644 --- a/lib/uitl/utils.dart +++ b/lib/uitl/utils.dart @@ -1,5 +1,7 @@ import 'package:connectivity/connectivity.dart'; import 'package:flutter/cupertino.dart'; +import 'package:flutter/material.dart'; +import 'package:progress_dialog/progress_dialog.dart'; import 'app_shared_preferences.dart'; import 'app_toast.dart'; @@ -7,6 +9,8 @@ import 'app_toast.dart'; AppSharedPreferences sharedPref = new AppSharedPreferences(); class Utils { + static ProgressDialog pr; + ///show custom Error Toast /// [message] to show for user static showErrorToast([String message]) { @@ -96,4 +100,34 @@ class Utils { var length = loginType == 1 ? 10 : 7; return "([0-9]{" + length.toString() + "})"; } + + static showProgressDialog(context, [String message = "Loading..."]) async { + pr = ProgressDialog(context, + type: ProgressDialogType.Normal, isDismissible: false, showLogs: false); + pr.style( + message: message, + borderRadius: 10.0, + backgroundColor: Colors.white, + elevation: 10.0, + insetAnimCurve: Curves.easeInOut, + progress: 0.0, + maxProgress: 100.0, + progressTextStyle: TextStyle( + color: Colors.black, fontSize: 13.0, fontWeight: FontWeight.w400), + messageTextStyle: TextStyle( + color: Colors.black, fontSize: 19.0, fontWeight: FontWeight.w600)); + + if (!pr.isShowing()) { + await pr.show(); + } else { + await pr.hide(); + await pr.show(); + } + } + + static hideProgressDialog() async { + if (pr.isShowing()) { + await pr.hide(); + } + } } diff --git a/lib/widgets/in_app_browser/InAppBrowser.dart b/lib/widgets/in_app_browser/InAppBrowser.dart index 406f5b76..62403454 100644 --- a/lib/widgets/in_app_browser/InAppBrowser.dart +++ b/lib/widgets/in_app_browser/InAppBrowser.dart @@ -1,10 +1,10 @@ +import 'dart:convert'; + import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; -import 'dart:convert'; - class MyInAppBrowser extends InAppBrowser { // static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT @@ -97,11 +97,18 @@ class MyInAppBrowser extends InAppBrowser { await sharedPref.getString(PUSH_TOKEN); } + getPatientData() async { + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + } + String generateURL(int amount, String orderDesc, String transactionID, String projId, String emailId, String paymentMethod, [var patientData, var servID, var LiveServID]) { - authUser = authProvider.getAuthenticatedUser(); - + getPatientData(); String currentLanguageID = getLanguageID() == 'ar' ? 'AR' : 'EN'; String form = getForm(); @@ -153,12 +160,12 @@ class MyInAppBrowser extends InAppBrowser { } Codec stringToBase64Url = utf8.fuse(base64Url); - String encoded = stringToBase64Url.encode('data:text/html;base64,' + form); // dXNlcm5hbWU6cGFzc3dvcmQ= - String decoded = stringToBase64Url.decode(encoded); // username:password + String encoded = stringToBase64Url + .encode('data:text/html;base64,' + form); // dXNlcm5hbWU6cGFzc3dvcmQ= + String decoded = stringToBase64Url.decode(encoded); // username:password print(form); print(encoded); return encoded; - } String getForm() { diff --git a/lib/widgets/others/app_scaffold_widget.dart b/lib/widgets/others/app_scaffold_widget.dart index e1a42180..3e86397a 100644 --- a/lib/widgets/others/app_scaffold_widget.dart +++ b/lib/widgets/others/app_scaffold_widget.dart @@ -14,6 +14,7 @@ class AppScaffold extends StatelessWidget { final Widget bottomSheet; final bool isLoading; final bool isShowAppBar; + final bool hasAppBarParam; final BaseViewModel baseViewModel; AppScaffold( @@ -21,6 +22,7 @@ class AppScaffold extends StatelessWidget { this.appBarTitle = '', this.isLoading = false, this.isShowAppBar = false, + this.hasAppBarParam, this.bottomSheet, this.baseViewModel}); diff --git a/no-wait-queue.png b/no-wait-queue.png new file mode 100644 index 0000000000000000000000000000000000000000..d87a172ff4a73581d7553b9076ef6af25ada57c5 GIT binary patch literal 3314 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 literal 0 HcmV?d00001 diff --git a/pubspec.yaml b/pubspec.yaml index 1b6090af..372bd628 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -87,6 +87,9 @@ dependencies: #InAppBrowser flutter_inappwebview: ^4.0.0+4 + #ProgressDialog + progress_dialog: ^1.2.4 + From 3a9fa97c91e4cb7d78e814010802fd4b8f274b0c Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Tue, 11 Aug 2020 10:05:44 +0300 Subject: [PATCH 08/13] updates --- lib/config/config.dart | 8 +- lib/core/service/client/base_app_client.dart | 31 ++-- lib/pages/ToDoList/ToDo.dart | 126 +++++++++++++- lib/pages/ToDoList/payment_method_select.dart | 36 ++-- lib/pages/ToDoList/widgets/paymentDialog.dart | 7 +- .../appointment_services/GetDoctorsList.dart | 95 ++++++++++- lib/uitl/utils.dart | 9 + lib/widgets/in_app_browser/InAppBrowser.dart | 154 +++++++++++++----- 8 files changed, 373 insertions(+), 93 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index 1f47a03d..b2f42ad7 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -5,7 +5,7 @@ import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; const MAX_SMALL_SCREEN = 660; -const BASE_URL = 'https://hmgwebservices.com/Services'; +const BASE_URL = 'https://uat.hmgwebservices.com/Services'; const GET_PROJECT = '/Lists.svc/REST/GetProject'; @@ -61,6 +61,12 @@ const GENERATE_QR_APPOINTMENT = "/Doctors.svc/REST/GenerateQRAppointmentNo"; //URL send email appointment QR const EMAIL_QR_APPOINTMENT = "/Notifications.svc/REST/sendEmailForOnLineCheckin"; +//URL check payment status +const CHECK_PAYMENT_STATUS = "/PayFort_Serv.svc/REST/GetRequestStatusByRequestID"; + +//URL create advance payment +const CREATE_ADVANCE_PAYMENT = "/Doctors.svc/REST/CreateAdvancePayment"; + //URL to get medicine and pharmacies list const CHANNEL = 3; const GENERAL_ID = 'Cs2020@2016\$2958'; diff --git a/lib/core/service/client/base_app_client.dart b/lib/core/service/client/base_app_client.dart index 91182e17..a412b035 100644 --- a/lib/core/service/client/base_app_client.dart +++ b/lib/core/service/client/base_app_client.dart @@ -40,23 +40,28 @@ class BaseAppClient { onFailure('Error While Fetching data', statusCode); } else { var parsed = json.decode(response.body.toString()); - if (!parsed['IsAuthenticated']) { - if (parsed['isSMSSent'] == true) { - onSuccess(parsed, statusCode); - } - // await helpers.logout(); - //helpers.showErrorToast('Your session expired Please login agian'); - var asd = ""; - // TODO create logout fun - } else if (parsed['MessageStatus'] == 1 || - parsed['SMSLoginRequired'] == true) { + if (parsed['Response_Message'] != null) { onSuccess(parsed, statusCode); } else { - if (parsed['SameClinicApptList'] != null) { + if (!parsed['IsAuthenticated']) { + if (parsed['isSMSSent'] == true) { + onSuccess(parsed, statusCode); + } + // await helpers.logout(); + //helpers.showErrorToast('Your session expired Please login agian'); + var asd = ""; + // TODO create logout fun + } else if (parsed['MessageStatus'] == 1 || + parsed['SMSLoginRequired'] == true) { onSuccess(parsed, statusCode); } else { - onFailure(parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], - statusCode); + if (parsed['SameClinicApptList'] != null) { + onSuccess(parsed, statusCode); + } else { + onFailure( + parsed['ErrorEndUserMessage'] ?? parsed['ErrorMessage'], + statusCode); + } } } } diff --git a/lib/pages/ToDoList/ToDo.dart b/lib/pages/ToDoList/ToDo.dart index c3b02a2c..420ae5e5 100644 --- a/lib/pages/ToDoList/ToDo.dart +++ b/lib/pages/ToDoList/ToDo.dart @@ -12,8 +12,9 @@ import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/uitl/utils.dart'; +import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; import 'package:diplomaticquarterapp/widgets/others/app_scaffold_widget.dart'; -import 'package:diplomaticquarterapp/widgets/progress_indicator/app_circular_progress_Indeicator.dart'; import 'package:flutter/material.dart'; import 'package:rating_bar/rating_bar.dart'; @@ -21,6 +22,7 @@ class ToDo extends StatefulWidget { PatientShareResponse patientShareResponse; List appoList = []; var languageID; + MyInAppBrowser browser; @override _ToDoState createState() => _ToDoState(); @@ -485,7 +487,9 @@ class _ToDoState extends State { builder: (context) => QRCode( patientShareResponse: patientShareResponse, appoQR: appoQR, - ))); + ))).then((value) { + getPatientAppointmentHistory(); + }); } openPaymentDialog(AppoitmentAllHistoryResultList appo, @@ -511,13 +515,125 @@ class _ToDoState extends State { context: context, pageBuilder: (context, animation1, animation2) {}) .then((value) { -// getPatientAppointmentHistory(); + print(value); + + if (value != null) { + navigateToPaymentMethod(context, value, appo); + } + }); + } + + openPayment( + String paymentMethod, + AuthenticatedUser authenticatedUser, + double amount, + PatientShareResponse patientShareResponse, + AppoitmentAllHistoryResultList appo) { + widget.browser = new MyInAppBrowser( + onExitCallback: onBrowserExit, + appo: appo, + onLoadStartCallback: onBrowserLoadStart); + + widget.browser.openPaymentBrowser( + amount, + "Appointment check in", + Utils.getAppointmentTransID( + appo.projectID, appo.clinicID, appo.appointmentNo), + appo.projectID.toString(), + authenticatedUser.emailAddress, + paymentMethod, + authenticatedUser, + widget.browser); + } + + onBrowserLoadStart(String url) { + print("onBrowserLoadStart"); + print(url); + + MyInAppBrowser.successURLS.forEach((element) { + if (url.contains(element)) { + if (widget.browser.isOpened()) widget.browser.close(); + MyInAppBrowser.isPaymentDone = true; + Utils.hideProgressDialog(); + return; + } + }); + + MyInAppBrowser.errorURLS.forEach((element) { + if (url.contains(element)) { + if (widget.browser.isOpened()) widget.browser.close(); + MyInAppBrowser.isPaymentDone = false; + Utils.hideProgressDialog(); + return; + } + }); + } + + onBrowserExit(AppoitmentAllHistoryResultList appo, bool isPaymentMade) { + print("onBrowserExit Called!!!!"); + if (isPaymentMade) checkPaymentStatus(appo); + } + + checkPaymentStatus(AppoitmentAllHistoryResultList appo) { + DoctorsListService service = new DoctorsListService(); + service + .checkPaymentStatus( + Utils.getAppointmentTransID( + appo.projectID, appo.clinicID, appo.appointmentNo), + context) + .then((res) { + print("Printing Payment Status Reponse!!!!"); + print(res); + String paymentInfo = res['Response_Message']; + if (paymentInfo == 'Success') { + createAdvancePayment(res, appo); + } else { + AppToast.showErrorToast(message: res['Response_Message']); + } + }).catchError((err) { + print(err); }); } - Future navigateToPaymentMethod(context) async { + createAdvancePayment(res, AppoitmentAllHistoryResultList appo) { + DoctorsListService service = new DoctorsListService(); + service + .createAdvancePayment( + appo, res['Amount'], res['Fort_id'], res['PaymentMethod'], context) + .then((res) { + print(res['OnlineCheckInAppointments']); + }).catchError((err) { + print(err); + }); + } + + Future navigateToPaymentMethod( + context, + PatientShareResponse patientShareResponse, + AppoitmentAllHistoryResultList appo) async { + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + setState(() { + authUser = data; + }); + } + Navigator.push( - context, MaterialPageRoute(builder: (context) => PaymentMethod())); + context, MaterialPageRoute(builder: (context) => PaymentMethod())) + .then((value) { + print(value); + getPatientAppointmentHistory(); + + if (value != null) { + openPayment( + value, + authUser, + double.parse(patientShareResponse.patientShareWithTax.toString()), + patientShareResponse, + appo); + } + }); } confirmAppointment(AppoitmentAllHistoryResultList appo) { diff --git a/lib/pages/ToDoList/payment_method_select.dart b/lib/pages/ToDoList/payment_method_select.dart index e9f72ed8..a44d8b3d 100644 --- a/lib/pages/ToDoList/payment_method_select.dart +++ b/lib/pages/ToDoList/payment_method_select.dart @@ -9,7 +9,7 @@ class PaymentMethod extends StatefulWidget { } class _PaymentMethodState extends State { - String selectedPaymentMethod = "mada"; + String selectedPaymentMethod = "MADA"; @override Widget build(BuildContext context) { @@ -40,7 +40,7 @@ class _PaymentMethodState extends State { child: Container( child: InkWell( onTap: () { - updateSelectedPaymentMethod("mada"); + updateSelectedPaymentMethod("MADA"); }, child: Card( elevation: 3.0, @@ -48,7 +48,7 @@ class _PaymentMethodState extends State { color: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), - side: selectedPaymentMethod == "mada" + side: selectedPaymentMethod == "MADA" ? BorderSide( color: Colors.green, width: 5.0) : BorderSide( @@ -69,7 +69,7 @@ class _PaymentMethodState extends State { child: Container( child: InkWell( onTap: () { - updateSelectedPaymentMethod("sadad"); + updateSelectedPaymentMethod("SADAD"); }, child: Card( elevation: 3.0, @@ -77,7 +77,7 @@ class _PaymentMethodState extends State { color: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), - side: selectedPaymentMethod == "sadad" + side: selectedPaymentMethod == "SADAD" ? BorderSide( color: Colors.green, width: 5.0) : BorderSide( @@ -106,7 +106,7 @@ class _PaymentMethodState extends State { child: Container( child: InkWell( onTap: () { - updateSelectedPaymentMethod("visa"); + updateSelectedPaymentMethod("VISA"); }, child: Card( elevation: 3.0, @@ -114,7 +114,7 @@ class _PaymentMethodState extends State { color: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), - side: selectedPaymentMethod == "visa" + side: selectedPaymentMethod == "VISA" ? BorderSide( color: Colors.green, width: 5.0) : BorderSide( @@ -135,7 +135,7 @@ class _PaymentMethodState extends State { child: Container( child: InkWell( onTap: () { - updateSelectedPaymentMethod("mastercard"); + updateSelectedPaymentMethod("MASTERCARD"); }, child: Card( elevation: 3.0, @@ -143,7 +143,7 @@ class _PaymentMethodState extends State { color: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), - side: selectedPaymentMethod == "mastercard" + side: selectedPaymentMethod == "MASTERCARD" ? BorderSide( color: Colors.green, width: 5.0) : BorderSide( @@ -172,7 +172,7 @@ class _PaymentMethodState extends State { child: Container( child: InkWell( onTap: () { - updateSelectedPaymentMethod("installment"); + updateSelectedPaymentMethod("Installment"); }, child: Card( elevation: 3.0, @@ -180,7 +180,7 @@ class _PaymentMethodState extends State { color: Colors.white, shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(10), - side: selectedPaymentMethod == "installment" + side: selectedPaymentMethod == "Installment" ? BorderSide( color: Colors.green, width: 5.0) : BorderSide( @@ -221,9 +221,7 @@ class _PaymentMethodState extends State { disabledTextColor: Colors.white, disabledColor: new Color(0xFFbcc2c4), onPressed: () { -// navigateToBookSuccess(context); -// insertAppointment(context, widget.doctor); - openPayment(); + Navigator.pop(context, selectedPaymentMethod); }, child: Text(TranslationBase.of(context).confirm, style: TextStyle(fontSize: 18.0)), @@ -233,16 +231,6 @@ class _PaymentMethodState extends State { ); } - openPayment() { - MyInAppBrowser browser = new MyInAppBrowser(onExitCallback: onBrowserExit); - - browser.openUrl(url: "data:text/html;base64,PGh0bWw+IDxoZWFkPjwvaGVhZD48Ym9keT48Zm9ybSBpZD0icGF5bWVudEZvcm0iIGFjdGlvbj0iaHR0cHM6Ly9obWd3ZWJzZXJ2aWNlcy5jb20vUGF5Rm9ydFdlYkxpdmUvcGFnZXMvU2VuZFBheUZvcnRSZXF1ZXN0LmFzcHgiIG1ldGhvZD0icG9zdCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQW1vdW50IiB2YWx1ZT0iMTIyIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJQcm9qSUQiIHZhbHVlPSIxMiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iT3JkZXJfRGVzYyIgdmFsdWU9IkFkdmFuY2UgUGF5bWVudCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iT3JkZXJJRCIgdmFsdWU9IjEyLTEyMzE3NTUtMTU5NjY0MDY0MSI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUGF5bWVudE9wdGlvbiIgdmFsdWU9Ik1BREEiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkVtYWlsIiB2YWx1ZT0iVGFtZXIuZmFuYXNoZWhAZ21haWwuY29tIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTZXJ2SUQiIHZhbHVlPSIzIiAgPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkNoYW5uZWxJRCIgdmFsdWU9IjIiICA+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iTGFuZyIgdmFsdWU9IkVOIiAgPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlJldHVyblVSTCIgdmFsdWU9IiIgID48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJDdXN0TmFtZSIgdmFsdWU9IlRBKioqKiIgPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlBhdGllbnRPdXRTQSIgdmFsdWU9ImZhbHNlIiA+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUGF0aWVudFR5cGVJRCIgdmFsdWU9IjEiID48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJEZXZpY2VUb2tlbiIgdmFsdWU9InVuZGVmaW5lZCx1bmRlZmluZWQiID48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJMb25naXR1ZGUiIHZhbHVlPSJ1bmRlZmluZWQiID48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJMYXRpdHVkZSIgdmFsdWU9InVuZGVmaW5lZCIgPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkxpdmVfU2VydmljZUlEIiB2YWx1ZT0idW5kZWZpbmVkIiA+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ3VzdElEIiB2YWx1ZT0iMTIzMTc1NSIgID48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJSZXNwb25zZUNvbnRpbnVlVVJMIiB2YWx1ZT0iaHR0cDovL2htZy5jb20vRG9jdW1lbnRzL3N1Y2Nlc3MuaHRtbCIgPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkJhY2tDbGlja1VybCIgdmFsdWU9Imh0dHA6Ly9obWcuY29tL0RvY3VtZW50cy9zdWNjZXNzLmh0bWwiID48L2Zvcm0+PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicGF5bWVudEZvcm0iKS5zdWJtaXQoKTsgPC9zY3JpcHQ+PC9ib2R5PjwvaHRtbD4="); - } - - onBrowserExit() { - print("onBrowserExit Called!!!!"); - } - updateSelectedPaymentMethod(String selectedMethod) { setState(() { selectedPaymentMethod = selectedMethod; diff --git a/lib/pages/ToDoList/widgets/paymentDialog.dart b/lib/pages/ToDoList/widgets/paymentDialog.dart index cc7a8748..8bd86b47 100644 --- a/lib/pages/ToDoList/widgets/paymentDialog.dart +++ b/lib/pages/ToDoList/widgets/paymentDialog.dart @@ -1,6 +1,5 @@ import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.dart'; -import 'package:diplomaticquarterapp/pages/ToDoList/payment_method_select.dart'; import 'package:diplomaticquarterapp/uitl/date_uitl.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; import 'package:flutter/material.dart'; @@ -146,7 +145,7 @@ class _PaymentDialogState extends State { Expanded( child: InkWell( onTap: () { - Navigator.of(context).pop(); + Navigator.pop(context, null); }, child: Container( child: Text("Cancel", @@ -159,8 +158,8 @@ class _PaymentDialogState extends State { Expanded( child: InkWell( onTap: () { - Navigator.of(context).pop(); - widget.onPaymentMethodSelected(); + Navigator.pop(context, widget.patientShareResponse); +// widget.onPaymentMethodSelected(); }, child: Container( child: Text("Ok", diff --git a/lib/services/appointment_services/GetDoctorsList.dart b/lib/services/appointment_services/GetDoctorsList.dart index 6d3ff1af..43590b59 100644 --- a/lib/services/appointment_services/GetDoctorsList.dart +++ b/lib/services/appointment_services/GetDoctorsList.dart @@ -115,7 +115,8 @@ class DoctorsListService extends BaseService { return Future.value(localRes); } - Future getDoctorsProfile(int docID, int clinicID, int projectID, context) async { + Future getDoctorsProfile( + int docID, int clinicID, int projectID, context) async { Utils.showProgressDialog(context); Map request; var languageID = await sharedPref.getString(APP_LANGUAGE); @@ -146,7 +147,7 @@ class DoctorsListService extends BaseService { localRes = response; Utils.hideProgressDialog(); }, onFailure: (String error, int statusCode) { - Utils.hideProgressDialog(); + Utils.hideProgressDialog(); throw error; }, body: request); return Future.value(localRes); @@ -575,4 +576,94 @@ class DoctorsListService extends BaseService { }, body: request); return Future.value(localRes); } + + Future checkPaymentStatus( + String transactionID, BuildContext context) async { + Map request; + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + var languageID = await sharedPref.getString(APP_LANGUAGE); + Request req = appGlobal.getPublicRequest(); + request = { + "ClientRequestID": transactionID, + "VersionID": req.VersionID, + "Channel": req.Channel, + "LanguageID": languageID == 'ar' ? 1 : 2, + "IPAdress": req.IPAdress, + "generalid": req.generalid, + "PatientOutSA": authUser.outSA, + "SessionID": "YckwoXhUmWBsnHKEKig", + "isDentalAllowedBackend": false, + "DeviceTypeID": req.DeviceTypeID, + "PatientID": authUser.patientID, + "TokenID": "@dm!n", + "PatientTypeID": authUser.patientType, + "PatientType": authUser.patientType + }; + dynamic localRes; + await baseAppClient.post(CHECK_PAYMENT_STATUS, + onSuccess: (response, statusCode) async { + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: request); + return Future.value(localRes); + } + + Future createAdvancePayment( + AppoitmentAllHistoryResultList appo, + double payedAmount, + String paymentReference, + String paymentMethodName, + BuildContext context) async { + Utils.showProgressDialog(context); + Map request; + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + var languageID = await sharedPref.getString(APP_LANGUAGE); + Request req = appGlobal.getPublicRequest(); + request = { + "ProjectID": appo.projectID.toString(), + "OnlineCheckInAppointment": { + "AppointmentNo": appo.appointmentNo.toString(), + "PaymentMethodName": paymentMethodName, + "PaymentAmount": payedAmount == 0 ? "0" : payedAmount.toString(), + "PaymentDate": payedAmount == 0 ? "" : "/Date(" + DateTime.now().millisecondsSinceEpoch.toString() + ")/", + "PaymentReferenceNumber": payedAmount == 0 ? "" : paymentReference, + "ProjectID": appo.projectID.toString(), + "PatientID": authUser.patientID, + "ClinicID": appo.clinicID, + "UserID": authUser.patientID, + "Status": authUser.patientType + }, + "VersionID": req.VersionID, + "Channel": req.Channel, + "LanguageID": languageID == 'ar' ? 1 : 2, + "IPAdress": req.IPAdress, + "generalid": req.generalid, + "PatientOutSA": authUser.outSA, + "SessionID": "YckwoXhUmWBsnHKEKig", + "isDentalAllowedBackend": false, + "PatientID": authUser.patientID, + "TokenID": "@dm!n", + "PatientTypeID": authUser.patientType, + "PatientType": authUser.patientType + }; + dynamic localRes; + await baseAppClient.post(CREATE_ADVANCE_PAYMENT, + onSuccess: (response, statusCode) async { + localRes = response; + Utils.hideProgressDialog(); + }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); + throw error; + }, body: request); + return Future.value(localRes); + } } diff --git a/lib/uitl/utils.dart b/lib/uitl/utils.dart index 0c753cbb..7be65a40 100644 --- a/lib/uitl/utils.dart +++ b/lib/uitl/utils.dart @@ -1,4 +1,5 @@ import 'package:connectivity/connectivity.dart'; +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:progress_dialog/progress_dialog.dart'; @@ -89,6 +90,14 @@ class Utils { } } + static String getAppointmentTransID(int projectID, int clinicID, int appoNo) { + return projectID.toString() + + '-' + + clinicID.toString() + + '-' + + appoNo.toString(); + } + bool validateIDBox(String value, type) { Pattern pattern = loginIDPattern(type); //r'^\d+(?:\.\d+)?$'; diff --git a/lib/widgets/in_app_browser/InAppBrowser.dart b/lib/widgets/in_app_browser/InAppBrowser.dart index 62403454..be2ed285 100644 --- a/lib/widgets/in_app_browser/InAppBrowser.dart +++ b/lib/widgets/in_app_browser/InAppBrowser.dart @@ -1,20 +1,25 @@ import 'dart:convert'; import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; import 'package:diplomaticquarterapp/services/authentication/auth_provider.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; +import 'package:diplomaticquarterapp/uitl/utils.dart'; +import 'package:flutter/services.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; class MyInAppBrowser extends InAppBrowser { -// static String SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT - // ignore: non_constant_identifier_names static String SERVICE_URL = - 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE + 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT + // ignore: non_constant_identifier_names +// static String SERVICE_URL = +// 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE -// static String PREAUTH_SERVICE_URL = 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort PreAuth Payment Gateway URL UAT static String PREAUTH_SERVICE_URL = - 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort PreAuth Payment Gateway URL Live Store + 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort PreAuth Payment Gateway URL UAT +// static String PREAUTH_SERVICE_URL = +// 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort PreAuth Payment Gateway URL Live Store static List successURLS = [ 'success', @@ -25,13 +30,18 @@ class MyInAppBrowser extends InAppBrowser { static List errorURLS = ['PayfortCancel']; final Function onExitCallback; + final Function onLoadStartCallback; AppSharedPreferences sharedPref = AppSharedPreferences(); AuthProvider authProvider = new AuthProvider(); + InAppBrowser browser = new InAppBrowser(); AuthenticatedUser authUser; + AppoitmentAllHistoryResultList appo; - MyInAppBrowser({this.onExitCallback}); + static bool isPaymentDone = false; + + MyInAppBrowser({this.onExitCallback, this.appo, this.onLoadStartCallback}); Future onBrowserCreated() async { print("\n\nBrowser Created!\n\n"); @@ -39,7 +49,42 @@ class MyInAppBrowser extends InAppBrowser { @override Future onLoadStart(String url) async { - print("\n\nStarted $url\n\n"); + onLoadStartCallback(url); + // print("\n\nStarted $url\n\n"); + +// if (successURLS.length != 0) { +// successURLS.forEach((element) { +// if (url.contains(element)) { +// try { +// if (browser.isOpened()) browser.close(); +// isPaymentDone = true; +// Utils.hideProgressDialog(); +// return; +// } on MissingPluginException catch (exception) { +// Utils.hideProgressDialog(); +// } catch (error) { +// Utils.hideProgressDialog(); +// } +// } +// }); +// } +// +// if (errorURLS.length != 0) { +// errorURLS.forEach((element) { +// if (url.contains(element)) { +// try { +// if (browser.isOpened()) browser.close(); +// isPaymentDone = false; +// Utils.hideProgressDialog(); +// return; +// } on MissingPluginException catch (exception) { +// Utils.hideProgressDialog(); +// } catch (error) { +// Utils.hideProgressDialog(); +// } +// } +// }); +// } } @override @@ -60,7 +105,7 @@ class MyInAppBrowser extends InAppBrowser { @override void onExit() { print("\n\nBrowser closed!\n\n"); - onExitCallback(); + onExitCallback(appo, isPaymentDone); } @override @@ -70,31 +115,13 @@ class MyInAppBrowser extends InAppBrowser { return ShouldOverrideUrlLoadingAction.ALLOW; } - @override - void onLoadResource(LoadedResource response) { - print("Started at: " + - response.startTime.toString() + - "ms ---> duration: " + - response.duration.toString() + - "ms " + - response.url); - } - - @override - void onConsoleMessage(ConsoleMessage consoleMessage) { - print(""" - console output: - message: ${consoleMessage.message} - messageLevel: ${consoleMessage.messageLevel.toValue()} - """); - } - getLanguageID() async { return await sharedPref.getString(APP_LANGUAGE); } - getDeviceToken() async { - await sharedPref.getString(PUSH_TOKEN); + Future getDeviceToken() async { + String deviceToken = await sharedPref.getString(PUSH_TOKEN); + return deviceToken; } getPatientData() async { @@ -105,12 +132,48 @@ class MyInAppBrowser extends InAppBrowser { } } - String generateURL(int amount, String orderDesc, String transactionID, - String projId, String emailId, String paymentMethod, - [var patientData, var servID, var LiveServID]) { + openPaymentBrowser( + double amount, + String orderDesc, + String transactionID, + String projId, + String emailId, + String paymentMethod, + AuthenticatedUser authenticatedUser, + InAppBrowser browser, + ) { + this.browser = browser; + this.browser.openUrl( + url: generateURL(amount, orderDesc, transactionID, projId, emailId, + paymentMethod, authenticatedUser)); + +// this.browser.openData( +// data: generateURL(amount, orderDesc, transactionID, projId, emailId, +// paymentMethod, authenticatedUser), +// baseUrl: +// "https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx"); + } + + String generateURL( + double amount, + String orderDesc, + String transactionID, + String projId, + String emailId, + String paymentMethod, + AuthenticatedUser authUser, + [var patientData, + var servID, + var LiveServID]) { getPatientData(); String currentLanguageID = getLanguageID() == 'ar' ? 'AR' : 'EN'; String form = getForm(); + String deviceToken; + + getDeviceToken().then((value) { + print(value); + deviceToken = value; + }); if (authUser != null) { form = form.replaceFirst("EMAIL_VALUE", authUser.emailAddress); @@ -125,9 +188,13 @@ class MyInAppBrowser extends InAppBrowser { form = form.replaceFirst('PROJECT_ID_VALUE', projId); form = form.replaceFirst('PAYMENT_OPTION_VALUE', paymentMethod); form = form.replaceFirst('LANG_VALUE', currentLanguageID); - form = form.replaceFirst('PATIENT_OUT_SA', authUser.outSA.toString()); - form = form.replaceFirst('PATIENT_TYPE_ID', - patientData == "" ? authUser.patientType : patientData.PatientType); + form = form.replaceFirst('PATIENT_OUT_SA', + authUser.outSA == 0 ? false.toString() : true.toString()); + form = form.replaceFirst( + 'PATIENT_TYPE_ID', + patientData == null + ? authUser.patientType.toString() + : patientData.PatientType); // form = form.replaceFirst('DEVICE_TOKEN', this.cs.sharedService.getSharedData(AuthenticationService.DEVICE_TOKEN, false) + "," + this.cs.sharedService.getSharedData(AuthenticationService.APNS_TOKEN, false)); // form = form.replaceFirst('LATITUDE_VALUE', this.cs.sharedService.getSharedData('userLat', false)); @@ -135,7 +202,8 @@ class MyInAppBrowser extends InAppBrowser { form = form.replaceFirst('LATITUDE_VALUE', "24.708488"); form = form.replaceFirst('LONGITUDE_VALUE', "46.665925"); - form = form.replaceFirst('DEVICE_TOKEN', getDeviceToken()); + form = form.replaceFirst('DEVICE_TOKEN', + "e8wKxa4EGK8:APA91bGtygxh5E22pSARVKlngyi0iQbyRUvvUWiCIsaAcbE0hiffhUR094WVx22O5bsvwc706LspzIuJthUyK_748jzuaedD-ZwDm9BX_yyYV2K2YnuFBlHQ9pOKy65RfoprtvqyTN1O"); if (servID == "4") form = form.replaceFirst( @@ -143,7 +211,7 @@ class MyInAppBrowser extends InAppBrowser { else form = form.replaceFirst('SERVICE_URL_VALUE', MyInAppBrowser.SERVICE_URL); - if (servID) { + if (servID != null) { form = form.replaceFirst('SERV_ID', servID); form = form.replaceFirst('LIVE_SERVICE_ID', LiveServID); } else { @@ -151,7 +219,7 @@ class MyInAppBrowser extends InAppBrowser { form = form.replaceFirst('LIVE_SERVICE_ID', "2"); } - if (!patientData) { + if (patientData == null) { form = form.replaceFirst('CUSTNAME_VALUE', authUser.firstName); form = form.replaceFirst('CUSTID_VALUE', authUser.patientID.toString()); } else { @@ -159,13 +227,11 @@ class MyInAppBrowser extends InAppBrowser { form = form.replaceFirst('CUSTID_VALUE', patientData.PatientID); } - Codec stringToBase64Url = utf8.fuse(base64Url); - String encoded = stringToBase64Url - .encode('data:text/html;base64,' + form); // dXNlcm5hbWU6cGFzc3dvcmQ= - String decoded = stringToBase64Url.decode(encoded); // username:password + var bytes = utf8.encode(form); + var base64Str = base64.encode(bytes); print(form); - print(encoded); - return encoded; + print('data:text/html;base64,' + base64Str); + return 'data:text/html;base64,' + base64Str; } String getForm() { From 41c922bfeb81fa4235dccf80b482c58abf24ceec Mon Sep 17 00:00:00 2001 From: Haroon Amjad Date: Tue, 11 Aug 2020 15:55:42 +0300 Subject: [PATCH 09/13] Appointment payment implemented, Book Success implemented, Appointment flow implemented --- lib/config/config.dart | 3 + lib/pages/BookAppointment/BookSuccess.dart | 184 ++++++++++++++++-- .../MyAppointments/AppointmentDetails.dart | 1 + lib/pages/MyAppointments/MyAppointments.dart | 10 +- .../widgets/AppointmentActions.dart | 3 +- .../widgets/AppointmentCardView.dart | 2 +- .../widgets/reminder_dialog.dart | 2 +- lib/pages/ToDoList/ToDo.dart | 22 ++- lib/pages/ToDoList/widgets/paymentDialog.dart | 2 +- .../appointment_services/GetDoctorsList.dart | 38 ++++ 10 files changed, 242 insertions(+), 25 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index b2f42ad7..b09dce5b 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -67,6 +67,9 @@ const CHECK_PAYMENT_STATUS = "/PayFort_Serv.svc/REST/GetRequestStatusByRequestID //URL create advance payment const CREATE_ADVANCE_PAYMENT = "/Doctors.svc/REST/CreateAdvancePayment"; + +const ADD_ADVANCE_NUMBER_REQUEST = '/PayFort_Serv.svc/REST/AddAdvancedNumberRequest'; + //URL to get medicine and pharmacies list const CHANNEL = 3; const GENERAL_ID = 'Cs2020@2016\$2958'; diff --git a/lib/pages/BookAppointment/BookSuccess.dart b/lib/pages/BookAppointment/BookSuccess.dart index 42d46956..cdad398f 100644 --- a/lib/pages/BookAppointment/BookSuccess.dart +++ b/lib/pages/BookAppointment/BookSuccess.dart @@ -1,8 +1,16 @@ +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; +import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/DoctorListResponse.dart'; import 'package:diplomaticquarterapp/models/Appointments/PatientShareResposne.dart'; +import 'package:diplomaticquarterapp/models/Authentication/authenticated_user.dart'; +import 'package:diplomaticquarterapp/pages/ToDoList/payment_method_select.dart'; import 'package:diplomaticquarterapp/routes.dart'; import 'package:diplomaticquarterapp/services/appointment_services/GetDoctorsList.dart'; +import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; +import 'package:diplomaticquarterapp/uitl/app_toast.dart'; import 'package:diplomaticquarterapp/uitl/translations_delegate_base.dart'; +import 'package:diplomaticquarterapp/uitl/utils.dart'; +import 'package:diplomaticquarterapp/widgets/in_app_browser/InAppBrowser.dart'; import 'package:flutter/material.dart'; import 'QRCode.dart'; @@ -11,6 +19,8 @@ class BookSuccess extends StatefulWidget { PatientShareResponse patientShareResponse; DoctorList docObject; + MyInAppBrowser browser; + String appoDateFormatted; String appoTimeFormatted; @@ -25,6 +35,9 @@ class BookSuccess extends StatefulWidget { } class _BookSuccessState extends State { + AppSharedPreferences sharedPref = AppSharedPreferences(); + AuthenticatedUser authUser; + @override void initState() { // TODO: implement initState @@ -34,12 +47,6 @@ class _BookSuccessState extends State { @override Widget build(BuildContext context) { return Scaffold( -// appBar: AppBar( -// title: Text("Book Success"), -// bottomOpacity: 0.0, -// elevation: 0.0, -// backgroundColor: new Color(0xFF20bc44), -// ), body: SingleChildScrollView( child: Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -320,12 +327,15 @@ class _BookSuccessState extends State { margin: EdgeInsets.only(top: 20.0, bottom: 0.0), alignment: Alignment.center, child: Text(TranslationBase.of(context).payNowBookSuccess, - style: TextStyle(fontSize: 20.0, letterSpacing: 0.8, fontWeight: FontWeight.bold)), + style: TextStyle( + fontSize: 20.0, + letterSpacing: 0.8, + fontWeight: FontWeight.bold)), ), Container( alignment: Alignment.center, - child: Image.asset("assets/images/new-design/no-wait-queue.png", width: 120.0, - height: 120.0), + child: Image.asset("assets/images/new-design/no-wait-queue.png", + width: 120.0, height: 120.0), ), Flex( direction: Axis.horizontal, @@ -396,7 +406,9 @@ class _BookSuccessState extends State { textColor: Colors.white, disabledTextColor: Colors.white, disabledColor: new Color(0xFFbcc2c4), - onPressed: () {}, + onPressed: () { + startPaymentProcess(); + }, child: Text(TranslationBase.of(context).payNow.toUpperCase(), style: TextStyle(fontSize: 18.0)), ), @@ -427,6 +439,154 @@ class _BookSuccessState extends State { ); } + startPaymentProcess() { + navigateToPaymentMethod(context, widget.patientShareResponse); + } + + Future navigateToPaymentMethod( + context, PatientShareResponse patientShareResponse) async { + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + setState(() { + authUser = data; + }); + } + + AppoitmentAllHistoryResultList appo = new AppoitmentAllHistoryResultList(); + appo.projectID = widget.patientShareResponse.projectID; + appo.clinicID = widget.patientShareResponse.clinicID; + appo.appointmentNo = widget.patientShareResponse.appointmentNo; + + Navigator.push( + context, MaterialPageRoute(builder: (context) => PaymentMethod())) + .then((value) { + print(value); + if (value != null) { + openPayment( + value, + authUser, + double.parse(patientShareResponse.patientShareWithTax.toString()), + patientShareResponse, + appo); + } + }); + } + + openPayment( + String paymentMethod, + AuthenticatedUser authenticatedUser, + double amount, + PatientShareResponse patientShareResponse, + AppoitmentAllHistoryResultList appo) { + widget.browser = new MyInAppBrowser( + onExitCallback: onBrowserExit, + appo: appo, + onLoadStartCallback: onBrowserLoadStart); + + widget.browser.openPaymentBrowser( + amount, + "Appointment check in", + Utils.getAppointmentTransID( + appo.projectID, appo.clinicID, appo.appointmentNo), + appo.projectID.toString(), + authenticatedUser.emailAddress, + paymentMethod, + authenticatedUser, + widget.browser); + } + + onBrowserLoadStart(String url) { + print("onBrowserLoadStart"); + print(url); + + MyInAppBrowser.successURLS.forEach((element) { + if (url.contains(element)) { + if (widget.browser.isOpened()) widget.browser.close(); + MyInAppBrowser.isPaymentDone = true; + Utils.hideProgressDialog(); + return; + } + }); + + MyInAppBrowser.errorURLS.forEach((element) { + if (url.contains(element)) { + if (widget.browser.isOpened()) widget.browser.close(); + MyInAppBrowser.isPaymentDone = false; + Utils.hideProgressDialog(); + return; + } + }); + } + + onBrowserExit(AppoitmentAllHistoryResultList appo, bool isPaymentMade) { + print("onBrowserExit Called!!!!"); + if (isPaymentMade) checkPaymentStatus(appo); + } + + checkPaymentStatus(AppoitmentAllHistoryResultList appo) { + DoctorsListService service = new DoctorsListService(); + service + .checkPaymentStatus( + Utils.getAppointmentTransID( + appo.projectID, appo.clinicID, appo.appointmentNo), + context) + .then((res) { + print("Printing Payment Status Reponse!!!!"); + print(res); + String paymentInfo = res['Response_Message']; + if (paymentInfo == 'Success') { + createAdvancePayment(res, appo); + } else { + AppToast.showErrorToast(message: res['Response_Message']); + } + }).catchError((err) { + print(err); + }); + } + + createAdvancePayment(res, AppoitmentAllHistoryResultList appo) { + DoctorsListService service = new DoctorsListService(); + String paymentReference = res['Fort_id'].toString(); + service + .createAdvancePayment( + appo, res['Amount'], res['Fort_id'], res['PaymentMethod'], context) + .then((res) { + print(res['OnlineCheckInAppointments'][0]['AdvanceNumber']); + addAdvancedNumberRequest( + res['OnlineCheckInAppointments'][0]['AdvanceNumber'].toString(), + paymentReference, + appo.appointmentNo.toString()); + }).catchError((err) { + print(err); + }); + } +// +// Future navigateToQR( +// context, String appoQR, PatientShareResponse patientShareResponse) async { +// Navigator.push( +// context, +// MaterialPageRoute( +// builder: (context) => QRCode( +// patientShareResponse: patientShareResponse, +// appoQR: appoQR, +// ))).then((value) {}); +// } + + addAdvancedNumberRequest(String advanceNumber, String paymentReference, + String appointmentID) { + DoctorsListService service = new DoctorsListService(); + service + .addAdvancedNumberRequest( + advanceNumber, paymentReference, appointmentID, context) + .then((res) { + print(res); + getAppoQR(context); + }).catchError((err) { + print(err); + }); + } + Widget _getQRAppo() { return Column( crossAxisAlignment: CrossAxisAlignment.start, @@ -440,8 +600,8 @@ class _BookSuccessState extends State { ), Container( alignment: Alignment.center, - child: Image.asset("assets/images/new-design/device_icon.png", width: 120.0, - height: 120.0), + child: Image.asset("assets/images/new-design/device_icon.png", + width: 120.0, height: 120.0), ), Flex( direction: Axis.horizontal, diff --git a/lib/pages/MyAppointments/AppointmentDetails.dart b/lib/pages/MyAppointments/AppointmentDetails.dart index fff6d383..281a8aa8 100644 --- a/lib/pages/MyAppointments/AppointmentDetails.dart +++ b/lib/pages/MyAppointments/AppointmentDetails.dart @@ -93,6 +93,7 @@ class _AppointmentDetailsState extends State widget.appo.doctorTitle + " " + widget.appo.doctorNameObj, + textAlign: TextAlign.center, style: TextStyle( fontSize: 20.0, color: Colors.grey[900], diff --git a/lib/pages/MyAppointments/MyAppointments.dart b/lib/pages/MyAppointments/MyAppointments.dart index 122222b2..acd6fba9 100644 --- a/lib/pages/MyAppointments/MyAppointments.dart +++ b/lib/pages/MyAppointments/MyAppointments.dart @@ -127,15 +127,9 @@ class _MyAppointmentsState extends State openAppointmentsTab() { if (widget.bookedAppoList.length != 0) { _tabController.animateTo((_tabController.index + 1) % 1); - return; - } - - if (widget.confirmedAppoList.length != 0) { + } else if (widget.confirmedAppoList.length != 0) { _tabController.animateTo((_tabController.index + 1) % 2); - return; - } - - if (widget.arrivedAppoList.length != 0) { + } else if (widget.arrivedAppoList.length != 0) { _tabController.animateTo((_tabController.index + 1) % 3); return; } diff --git a/lib/pages/MyAppointments/widgets/AppointmentActions.dart b/lib/pages/MyAppointments/widgets/AppointmentActions.dart index f0ff2e6f..1641776d 100644 --- a/lib/pages/MyAppointments/widgets/AppointmentActions.dart +++ b/lib/pages/MyAppointments/widgets/AppointmentActions.dart @@ -95,7 +95,7 @@ class _AppointmentActionsState extends State { Container( alignment: Alignment.bottomRight, margin: - EdgeInsets.fromLTRB(0.0, 10.0, 10.0, 8.0), + EdgeInsets.fromLTRB(0.0, 10.0, 10.0, 7.0), child: Image.asset(e.icon, width: 45.0, height: 45.0), ), @@ -308,6 +308,7 @@ class _AppointmentActionsState extends State { print(res); if (res['MessageStatus'] == 1) { AppToast.showSuccessToast(message: res['ErrorEndUserMessage']); + Navigator.of(context).pop(); } else { AppToast.showErrorToast(message: res['ErrorEndUserMessage']); } diff --git a/lib/pages/MyAppointments/widgets/AppointmentCardView.dart b/lib/pages/MyAppointments/widgets/AppointmentCardView.dart index e038c0af..e2f6f706 100644 --- a/lib/pages/MyAppointments/widgets/AppointmentCardView.dart +++ b/lib/pages/MyAppointments/widgets/AppointmentCardView.dart @@ -42,7 +42,7 @@ class _ApointmentCardState extends State { fit: BoxFit.fill, height: 60.0, width: 60.0), ), Container( - width: MediaQuery.of(context).size.width * 0.666, + width: MediaQuery.of(context).size.width * 0.6, margin: EdgeInsets.fromLTRB(20.0, 10.0, 10.0, 0.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/pages/MyAppointments/widgets/reminder_dialog.dart b/lib/pages/MyAppointments/widgets/reminder_dialog.dart index 238d41d7..13955e5b 100644 --- a/lib/pages/MyAppointments/widgets/reminder_dialog.dart +++ b/lib/pages/MyAppointments/widgets/reminder_dialog.dart @@ -27,7 +27,7 @@ class _ReminderDialogState extends State { shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)), child: Container( - height: MediaQuery.of(context).size.height * 0.55, + height: MediaQuery.of(context).size.height * 0.57, width: 450.0, child: Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/pages/ToDoList/ToDo.dart b/lib/pages/ToDoList/ToDo.dart index 420ae5e5..a7e06342 100644 --- a/lib/pages/ToDoList/ToDo.dart +++ b/lib/pages/ToDoList/ToDo.dart @@ -597,11 +597,31 @@ class _ToDoState extends State { createAdvancePayment(res, AppoitmentAllHistoryResultList appo) { DoctorsListService service = new DoctorsListService(); + String paymentReference = res['Fort_id'].toString(); service .createAdvancePayment( appo, res['Amount'], res['Fort_id'], res['PaymentMethod'], context) .then((res) { - print(res['OnlineCheckInAppointments']); + print(res['OnlineCheckInAppointments'][0]['AdvanceNumber']); + addAdvancedNumberRequest( + res['OnlineCheckInAppointments'][0]['AdvanceNumber'].toString(), + paymentReference, + appo.appointmentNo.toString(), + appo); + }).catchError((err) { + print(err); + }); + } + + addAdvancedNumberRequest(String advanceNumber, String paymentReference, + String appointmentID, AppoitmentAllHistoryResultList appo) { + DoctorsListService service = new DoctorsListService(); + service + .addAdvancedNumberRequest( + advanceNumber, paymentReference, appointmentID, context) + .then((res) { + print(res); + getAppoQR(context, appo); }).catchError((err) { print(err); }); diff --git a/lib/pages/ToDoList/widgets/paymentDialog.dart b/lib/pages/ToDoList/widgets/paymentDialog.dart index 8bd86b47..d79a1ead 100644 --- a/lib/pages/ToDoList/widgets/paymentDialog.dart +++ b/lib/pages/ToDoList/widgets/paymentDialog.dart @@ -24,7 +24,7 @@ class _PaymentDialogState extends State { shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(12.0)), child: Container( - height: MediaQuery.of(context).size.height * 0.62, + height: MediaQuery.of(context).size.height * 0.67, width: 450.0, child: Column( crossAxisAlignment: CrossAxisAlignment.start, diff --git a/lib/services/appointment_services/GetDoctorsList.dart b/lib/services/appointment_services/GetDoctorsList.dart index 43590b59..a2991805 100644 --- a/lib/services/appointment_services/GetDoctorsList.dart +++ b/lib/services/appointment_services/GetDoctorsList.dart @@ -613,6 +613,44 @@ class DoctorsListService extends BaseService { return Future.value(localRes); } + Future addAdvancedNumberRequest( + String advanceNumber, String paymentReference, String appointmentID, BuildContext context) async { + Map request; + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + var languageID = await sharedPref.getString(APP_LANGUAGE); + Request req = appGlobal.getPublicRequest(); + request = { + "AdvanceNumber": advanceNumber, + "PaymentReferenceNumber": paymentReference, + "AppointmentID": appointmentID, + "VersionID": req.VersionID, + "Channel": req.Channel, + "LanguageID": languageID == 'ar' ? 1 : 2, + "IPAdress": req.IPAdress, + "generalid": req.generalid, + "PatientOutSA": authUser.outSA, + "SessionID": "YckwoXhUmWBsnHKEKig", + "isDentalAllowedBackend": false, + "DeviceTypeID": req.DeviceTypeID, + "PatientID": authUser.patientID, + "TokenID": "@dm!n", + "PatientTypeID": authUser.patientType, + "PatientType": authUser.patientType + }; + dynamic localRes; + await baseAppClient.post(ADD_ADVANCE_NUMBER_REQUEST, + onSuccess: (response, statusCode) async { + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: request); + return Future.value(localRes); + } + Future createAdvancePayment( AppoitmentAllHistoryResultList appo, double payedAmount, From 8ad29418361a6fd0d29d3a6b11a50babb50adfe5 Mon Sep 17 00:00:00 2001 From: Haroon Amjad Date: Tue, 11 Aug 2020 18:59:24 +0300 Subject: [PATCH 10/13] Appointment payment finalised, Ask Doc implemeted & other updates --- lib/config/config.dart | 3 +- lib/config/localized_values.dart | 2 +- .../AppoimentAllHistoryResultList.dart | 2 +- .../MyAppointments/AppointmentDetails.dart | 19 ++++-- .../MyAppointments/models/ArrivedButtons.dart | 2 +- .../widgets/AppointmentActions.dart | 35 +++++++++-- .../appointment_services/GetDoctorsList.dart | 62 +++++++++++++++++-- lib/uitl/translations_delegate_base.dart | 1 + lib/widgets/in_app_browser/InAppBrowser.dart | 16 ++--- 9 files changed, 114 insertions(+), 28 deletions(-) diff --git a/lib/config/config.dart b/lib/config/config.dart index b09dce5b..5adb06d2 100644 --- a/lib/config/config.dart +++ b/lib/config/config.dart @@ -67,9 +67,10 @@ const CHECK_PAYMENT_STATUS = "/PayFort_Serv.svc/REST/GetRequestStatusByRequestID //URL create advance payment const CREATE_ADVANCE_PAYMENT = "/Doctors.svc/REST/CreateAdvancePayment"; - const ADD_ADVANCE_NUMBER_REQUEST = '/PayFort_Serv.svc/REST/AddAdvancedNumberRequest'; +const IS_ALLOW_ASK_DOCTOR = '/Doctors.svc/REST/GetPatientDoctorAppointmentResult'; + //URL to get medicine and pharmacies list const CHANNEL = 3; const GENERAL_ID = 'Cs2020@2016\$2958'; diff --git a/lib/config/localized_values.dart b/lib/config/localized_values.dart index 3611298d..abb070ff 100644 --- a/lib/config/localized_values.dart +++ b/lib/config/localized_values.dart @@ -181,5 +181,5 @@ const Map> localizedValues = { "payNowBookSuccesstext1": {"en": "Pay Now using online payment service From secure payment gateways", "ar": "ادفع الآن باستخدام خدمة الدفع عبر الإنترنت من بوابات الدفع الآمنة"}, "payNowBookSuccesstext2": {"en": "You can also Pay Later via online payment Or in Hospital", "ar": "يمكنك أيضًا الدفع لاحقًا عبر الدفع عبر الإنترنت أو في المستشفى"}, 'payLater': {'en': 'Pay Later', 'ar': 'ادفع لاحقا'}, - + 'askDocNotAllowed': {'en': 'This service will be available for last 15 days doctor Visit only', 'ar': 'هذه الخدمة متاحة للزيارات خلال اخر 15 يوم فقط'}, }; diff --git a/lib/models/Appointments/AppoimentAllHistoryResultList.dart b/lib/models/Appointments/AppoimentAllHistoryResultList.dart index 4fa19576..a935542a 100644 --- a/lib/models/Appointments/AppoimentAllHistoryResultList.dart +++ b/lib/models/Appointments/AppoimentAllHistoryResultList.dart @@ -173,7 +173,7 @@ class AppoitmentAllHistoryResultList { doctorImageURL = json['DoctorImageURL']; doctorNameObj = json['DoctorNameObj']; doctorRate = json['DoctorRate']; - doctorSpeciality = json['DoctorSpeciality'].cast(); + doctorSpeciality = json['DoctorSpeciality'] != null ?json['DoctorSpeciality'].cast() : ["null"]; doctorTitle = json['DoctorTitle']; gender = json['Gender']; genderDescription = json['GenderDescription']; diff --git a/lib/pages/MyAppointments/AppointmentDetails.dart b/lib/pages/MyAppointments/AppointmentDetails.dart index 281a8aa8..d14858b3 100644 --- a/lib/pages/MyAppointments/AppointmentDetails.dart +++ b/lib/pages/MyAppointments/AppointmentDetails.dart @@ -14,6 +14,8 @@ class AppointmentDetails extends StatefulWidget { AppoitmentAllHistoryResultList appo; static bool isLoading = false; + static bool showFooterButton = false; + AppointmentDetails({@required this.appo}); @override @@ -23,7 +25,6 @@ class AppointmentDetails extends StatefulWidget { class _AppointmentDetailsState extends State with SingleTickerProviderStateMixin { static TabController _tabController; - bool showFooterButton = false; @override void initState() { @@ -43,7 +44,7 @@ class _AppointmentDetailsState extends State return AppScaffold( appBarTitle: widget.appo.doctorNameObj, isShowAppBar: true, - bottomSheet: showFooterButton + bottomSheet: AppointmentDetails.showFooterButton ? Container( width: MediaQuery.of(context).size.width, height: 50.0, @@ -146,9 +147,9 @@ class _AppointmentDetailsState extends State onTap: (index) { setState(() { index == 1 - ? showFooterButton = true - : showFooterButton = false; - print(showFooterButton); + ? AppointmentDetails.showFooterButton = true + : AppointmentDetails.showFooterButton = false; + print(AppointmentDetails.showFooterButton); }); }, tabs: [ @@ -170,7 +171,7 @@ class _AppointmentDetailsState extends State child: TabBarView( physics: NeverScrollableScrollPhysics(), children: [ - AppointmentActions(appo: widget.appo, tabController: _tabController), + AppointmentActions(appo: widget.appo, tabController: _tabController, enableFooterButton: enableFooterButton), DocAvailableAppointments(doctor: getDoctorObject()) ], controller: _tabController, @@ -183,6 +184,12 @@ class _AppointmentDetailsState extends State ); } + void enableFooterButton() { + setState(() { + AppointmentDetails.showFooterButton = true; + }); + } + void goToBookConfirm() { if (DocAvailableAppointments.areSlotsAvailable) navigateToBookConfirm(context); diff --git a/lib/pages/MyAppointments/models/ArrivedButtons.dart b/lib/pages/MyAppointments/models/ArrivedButtons.dart index 00778ef7..56721009 100644 --- a/lib/pages/MyAppointments/models/ArrivedButtons.dart +++ b/lib/pages/MyAppointments/models/ArrivedButtons.dart @@ -49,7 +49,7 @@ class ArrivedButtons { "title": "Ask Your", "subtitle": "Doctor", "icon": "assets/images/new-design/ask_doctor_icon.png", - "caller": "goToTodoList" + "caller": "askDoc" }, { "title": "Survey", diff --git a/lib/pages/MyAppointments/widgets/AppointmentActions.dart b/lib/pages/MyAppointments/widgets/AppointmentActions.dart index 1641776d..1d3f0bc6 100644 --- a/lib/pages/MyAppointments/widgets/AppointmentActions.dart +++ b/lib/pages/MyAppointments/widgets/AppointmentActions.dart @@ -18,8 +18,12 @@ import 'package:url_launcher/url_launcher.dart'; class AppointmentActions extends StatefulWidget { AppoitmentAllHistoryResultList appo; TabController tabController; + final Function enableFooterButton; - AppointmentActions({@required this.appo, @required this.tabController}); + AppointmentActions( + {@required this.appo, + @required this.tabController, + @required this.enableFooterButton}); @override _AppointmentActionsState createState() => _AppointmentActionsState(); @@ -117,6 +121,10 @@ class _AppointmentActionsState extends State { switch (AppoDetailsButton.caller) { case "openReschedule": widget.tabController.animateTo((widget.tabController.index + 1) % 2); + setState(() { + print("Reschedule"); + widget.enableFooterButton(); + }); break; case "onCancelAppointment": @@ -146,6 +154,10 @@ class _AppointmentActionsState extends State { case "goToTodoList": Navigator.of(context).pop(); break; + + case "askDoc": + askYourDoc(); + break; } } @@ -347,8 +359,23 @@ class _AppointmentActionsState extends State { pageBuilder: (context, animation1, animation2) {}); } + askYourDoc() { + DoctorsListService service = new DoctorsListService(); + service + .isAllowedToAskDoctor(widget.appo.doctorID, context) + .then((res) { + print(res['PatientDoctorAppointmentResultList']); + if (res['PatientDoctorAppointmentResultList'].length != 0) { + + } else { + AppToast.showErrorToast(message: TranslationBase.of(context).askDocNotAllowed); + } + }).catchError((err) { + print(err); + }); + } + confirmAppointment() { - loading(true); DoctorsListService service = new DoctorsListService(); service .confirmAppointment(widget.appo.appointmentNo, widget.appo.clinicID, @@ -356,14 +383,12 @@ class _AppointmentActionsState extends State { .then((res) { if (res['MessageStatus'] == 1) { AppToast.showSuccessToast(message: res['ErrorEndUserMessage']); - loading(false); + Navigator.of(context).pop(); } else { AppToast.showErrorToast(message: res['ErrorEndUserMessage']); - loading(false); } }).catchError((err) { print(err); - loading(false); }); } diff --git a/lib/services/appointment_services/GetDoctorsList.dart b/lib/services/appointment_services/GetDoctorsList.dart index a2991805..592240b2 100644 --- a/lib/services/appointment_services/GetDoctorsList.dart +++ b/lib/services/appointment_services/GetDoctorsList.dart @@ -614,7 +614,10 @@ class DoctorsListService extends BaseService { } Future addAdvancedNumberRequest( - String advanceNumber, String paymentReference, String appointmentID, BuildContext context) async { + String advanceNumber, + String paymentReference, + String appointmentID, + BuildContext context) async { Map request; if (await this.sharedPref.getObject(USER_PROFILE) != null) { var data = AuthenticatedUser.fromJson( @@ -644,10 +647,53 @@ class DoctorsListService extends BaseService { dynamic localRes; await baseAppClient.post(ADD_ADVANCE_NUMBER_REQUEST, onSuccess: (response, statusCode) async { - localRes = response; - }, onFailure: (String error, int statusCode) { - throw error; - }, body: request); + localRes = response; + }, onFailure: (String error, int statusCode) { + throw error; + }, body: request); + return Future.value(localRes); + } + + Future isAllowedToAskDoctor(int docID, BuildContext context) async { + Utils.showProgressDialog(context); + Map request; + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + var languageID = await sharedPref.getString(APP_LANGUAGE); + Request req = appGlobal.getPublicRequest(); + request = { + "IsForAskYourDoctor": true, + "DoctorID": docID, + "Top": 25, + "beforeDays": 15, + "exludType": 4, + "VersionID": req.VersionID, + "Channel": req.Channel, + "LanguageID": languageID == 'ar' ? 1 : 2, + "IPAdress": req.IPAdress, + "generalid": req.generalid, + "PatientOutSA": authUser.outSA, + "SessionID": "YckwoXhUmWBsnHKEKig", + "isDentalAllowedBackend": false, + "DeviceTypeID": req.DeviceTypeID, + "PatientID": authUser.patientID, + "TokenID": "@dm!n", + "PatientTypeID": authUser.patientType, + "PatientType": authUser.patientType + }; + + dynamic localRes; + await baseAppClient.post(IS_ALLOW_ASK_DOCTOR, + onSuccess: (response, statusCode) async { + localRes = response; + Utils.hideProgressDialog(); + }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); + throw error; + }, body: request); return Future.value(localRes); } @@ -672,7 +718,11 @@ class DoctorsListService extends BaseService { "AppointmentNo": appo.appointmentNo.toString(), "PaymentMethodName": paymentMethodName, "PaymentAmount": payedAmount == 0 ? "0" : payedAmount.toString(), - "PaymentDate": payedAmount == 0 ? "" : "/Date(" + DateTime.now().millisecondsSinceEpoch.toString() + ")/", + "PaymentDate": payedAmount == 0 + ? "" + : "/Date(" + + DateTime.now().millisecondsSinceEpoch.toString() + + ")/", "PaymentReferenceNumber": payedAmount == 0 ? "" : paymentReference, "ProjectID": appo.projectID.toString(), "PatientID": authUser.patientID, diff --git a/lib/uitl/translations_delegate_base.dart b/lib/uitl/translations_delegate_base.dart index 168978b5..48e6fabc 100644 --- a/lib/uitl/translations_delegate_base.dart +++ b/lib/uitl/translations_delegate_base.dart @@ -292,6 +292,7 @@ class TranslationBase { String get payNowBookSuccesstext1 => localizedValues['payNowBookSuccesstext1'][locale.languageCode]; String get payNowBookSuccesstext2 => localizedValues['payNowBookSuccesstext2'][locale.languageCode]; String get payLater => localizedValues['payLater'][locale.languageCode]; + String get askDocNotAllowed => localizedValues['askDocNotAllowed'][locale.languageCode]; } diff --git a/lib/widgets/in_app_browser/InAppBrowser.dart b/lib/widgets/in_app_browser/InAppBrowser.dart index be2ed285..fceba0c0 100644 --- a/lib/widgets/in_app_browser/InAppBrowser.dart +++ b/lib/widgets/in_app_browser/InAppBrowser.dart @@ -10,16 +10,18 @@ import 'package:flutter/services.dart'; import 'package:flutter_inappwebview/flutter_inappwebview.dart'; class MyInAppBrowser extends InAppBrowser { - static String SERVICE_URL = - 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT - // ignore: non_constant_identifier_names // static String SERVICE_URL = -// 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE +// 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort Payment Gateway URL UAT + // ignore: non_constant_identifier_names + + static String SERVICE_URL = + 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort Payment Gateway URL LIVE - static String PREAUTH_SERVICE_URL = - 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort PreAuth Payment Gateway URL UAT // static String PREAUTH_SERVICE_URL = -// 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort PreAuth Payment Gateway URL Live Store +// 'https://hmgwebservices.com/PayFortWeb/pages/SendPayFortRequest.aspx'; // Payfort PreAuth Payment Gateway URL UAT + + static String PREAUTH_SERVICE_URL = + 'https://hmgwebservices.com/PayFortWebLive/pages/SendPayFortRequest.aspx'; //Payfort PreAuth Payment Gateway URL Live Store static List successURLS = [ 'success', From c50530734d6792eb66a83e136a8745c8742ed01b Mon Sep 17 00:00:00 2001 From: haroon amjad Date: Wed, 12 Aug 2020 10:17:15 +0300 Subject: [PATCH 11/13] added my appointments in medical file page --- .../MyAppointments/models/ArrivedButtons.dart | 2 +- .../widgets/AppointmentActions.dart | 152 +++++++++++------- lib/pages/medical/medical_profile_page.dart | 25 ++- .../appointment_services/GetDoctorsList.dart | 40 +++++ 4 files changed, 156 insertions(+), 63 deletions(-) diff --git a/lib/pages/MyAppointments/models/ArrivedButtons.dart b/lib/pages/MyAppointments/models/ArrivedButtons.dart index 56721009..d1009753 100644 --- a/lib/pages/MyAppointments/models/ArrivedButtons.dart +++ b/lib/pages/MyAppointments/models/ArrivedButtons.dart @@ -19,7 +19,7 @@ class ArrivedButtons { "title": "Radiology", "subtitle": "Services", "icon": "assets/images/new-design/radiology_service_icon.png", - "caller": "insertComplaint" + "caller": "radiology" }, { "title": "Lab", diff --git a/lib/pages/MyAppointments/widgets/AppointmentActions.dart b/lib/pages/MyAppointments/widgets/AppointmentActions.dart index 1d3f0bc6..6f3a2005 100644 --- a/lib/pages/MyAppointments/widgets/AppointmentActions.dart +++ b/lib/pages/MyAppointments/widgets/AppointmentActions.dart @@ -1,3 +1,4 @@ +import 'package:diplomaticquarterapp/core/model/radiology/final_radiology.dart'; import 'package:diplomaticquarterapp/models/Appointments/AppoimentAllHistoryResultList.dart'; import 'package:diplomaticquarterapp/models/Appointments/appoDetailsButtons.dart'; import 'package:diplomaticquarterapp/pages/MyAppointments/AppointmentDetails.dart'; @@ -20,10 +21,9 @@ class AppointmentActions extends StatefulWidget { TabController tabController; final Function enableFooterButton; - AppointmentActions( - {@required this.appo, - @required this.tabController, - @required this.enableFooterButton}); + AppointmentActions({@required this.appo, + @required this.tabController, + @required this.enableFooterButton}); @override _AppointmentActionsState createState() => _AppointmentActionsState(); @@ -40,7 +40,9 @@ class _AppointmentActionsState extends State { @override Widget build(BuildContext context) { - var size = MediaQuery.of(context).size; + var size = MediaQuery + .of(context) + .size; final double itemHeight = ((size.height - kToolbarHeight - 24) * 0.42) / 2; final double itemWidth = size.width / 2; @@ -56,57 +58,58 @@ class _AppointmentActionsState extends State { crossAxisCount: 2, childAspectRatio: (itemWidth / itemHeight), children: appoButtonsList - .map((e) => GestureDetector( - onTap: () { - _handleButtonClicks(e); - }, - child: Container( - height: 100.0, - margin: EdgeInsets.all(9.0), - decoration: BoxDecoration( - boxShadow: [ - BoxShadow( - color: Colors.grey[400], - blurRadius: 2.0, - spreadRadius: 0.0) - ], - borderRadius: BorderRadius.circular(10), - color: Colors.white), - child: Column( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisSize: MainAxisSize.min, - children: [ - Container( - margin: - EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 0.0), - child: Text(e.title, - overflow: TextOverflow.clip, - style: TextStyle( - color: new Color(0xFFc5272d), - letterSpacing: 1.0, - fontSize: 20.0)), - ), - Container( - margin: - EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0), - child: Text(e.subtitle, - overflow: TextOverflow.clip, - style: TextStyle( - color: Colors.black, - letterSpacing: 1.0, - fontSize: 15.0)), - ), - Container( - alignment: Alignment.bottomRight, - margin: - EdgeInsets.fromLTRB(0.0, 10.0, 10.0, 7.0), - child: Image.asset(e.icon, - width: 45.0, height: 45.0), - ), - ], + .map((e) => + GestureDetector( + onTap: () { + _handleButtonClicks(e); + }, + child: Container( + height: 100.0, + margin: EdgeInsets.all(9.0), + decoration: BoxDecoration( + boxShadow: [ + BoxShadow( + color: Colors.grey[400], + blurRadius: 2.0, + spreadRadius: 0.0) + ], + borderRadius: BorderRadius.circular(10), + color: Colors.white), + child: Column( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisSize: MainAxisSize.min, + children: [ + Container( + margin: + EdgeInsets.fromLTRB(10.0, 10.0, 10.0, 0.0), + child: Text(e.title, + overflow: TextOverflow.clip, + style: TextStyle( + color: new Color(0xFFc5272d), + letterSpacing: 1.0, + fontSize: 20.0)), ), - ), - )) + Container( + margin: + EdgeInsets.fromLTRB(10.0, 0.0, 10.0, 0.0), + child: Text(e.subtitle, + overflow: TextOverflow.clip, + style: TextStyle( + color: Colors.black, + letterSpacing: 1.0, + fontSize: 15.0)), + ), + Container( + alignment: Alignment.bottomRight, + margin: + EdgeInsets.fromLTRB(0.0, 10.0, 10.0, 7.0), + child: Image.asset(e.icon, + width: 45.0, height: 45.0), + ), + ], + ), + ), + )) .toList(), ), ), @@ -130,9 +133,15 @@ class _AppointmentActionsState extends State { case "onCancelAppointment": ConfirmDialog dialog = new ConfirmDialog( context: context, - confirmMessage: TranslationBase.of(context).cancelAppoMsg, - okText: TranslationBase.of(context).confirm, - cancelText: TranslationBase.of(context).cancel_nocaps, + confirmMessage: TranslationBase + .of(context) + .cancelAppoMsg, + okText: TranslationBase + .of(context) + .confirm, + cancelText: TranslationBase + .of(context) + .cancel_nocaps, okFunction: () => {cancelAppointment()}, cancelFunction: () => {}); dialog.showAlertDialog(context); @@ -158,6 +167,10 @@ class _AppointmentActionsState extends State { case "askDoc": askYourDoc(); break; + + case "radiology": + openAppointmentRadiology(); + break; } } @@ -329,6 +342,21 @@ class _AppointmentActionsState extends State { }); } + openAppointmentRadiology() { + DoctorsListService service = new DoctorsListService(); + FinalRadiology finalRadiology = new FinalRadiology(); + service.getPatientRadOrders(widget.appo.appointmentNo.toString(), context) + .then((res) { + if (res['MessageStatus'] == 1) { + print(res['FinalRadiologyList']); + } else { + AppToast.showErrorToast(message: res['ErrorEndUserMessage']); + } + }).catchError((err) { + print(err); + }); + } + static Future openMap(double latitude, double longitude) async { String googleUrl = 'https://www.google.com/maps/search/?api=1&query=$latitude,$longitude'; @@ -364,11 +392,13 @@ class _AppointmentActionsState extends State { service .isAllowedToAskDoctor(widget.appo.doctorID, context) .then((res) { - print(res['PatientDoctorAppointmentResultList']); + print(res['PatientDoctorAppointmentResultList']); if (res['PatientDoctorAppointmentResultList'].length != 0) { } else { - AppToast.showErrorToast(message: TranslationBase.of(context).askDocNotAllowed); + AppToast.showErrorToast(message: TranslationBase + .of(context) + .askDocNotAllowed); } }).catchError((err) { print(err); @@ -379,7 +409,7 @@ class _AppointmentActionsState extends State { DoctorsListService service = new DoctorsListService(); service .confirmAppointment(widget.appo.appointmentNo, widget.appo.clinicID, - widget.appo.projectID, context) + widget.appo.projectID, context) .then((res) { if (res['MessageStatus'] == 1) { AppToast.showSuccessToast(message: res['ErrorEndUserMessage']); diff --git a/lib/pages/medical/medical_profile_page.dart b/lib/pages/medical/medical_profile_page.dart index 53c09727..0c7f662b 100644 --- a/lib/pages/medical/medical_profile_page.dart +++ b/lib/pages/medical/medical_profile_page.dart @@ -1,5 +1,6 @@ import 'dart:math'; +import 'package:diplomaticquarterapp/pages/MyAppointments/MyAppointments.dart'; import 'package:diplomaticquarterapp/pages/medical/prescriptions/prescriptions_home_page.dart'; import 'package:diplomaticquarterapp/pages/medical/radiology/radiology_home_page.dart'; import 'package:diplomaticquarterapp/widgets/data_display/medical/medical_profile_item.dart'; @@ -184,7 +185,29 @@ class _MedicalProfilePageState extends State { ), ) ], - ) + ), + Row( + children: [ + Expanded( + flex: 1, + child: InkWell( + onTap: () { + Navigator.push( + context, FadePage(page: MyAppointments())); + }, + child: MedicalProfileItem( + title: 'My Appointments', + imagePath: 'my_appointment_icon.png', + subTitle: 'List', + ), + ), + ), + Expanded( + flex: 1, + child: Container(), + ), + ], + ), ], ), ), diff --git a/lib/services/appointment_services/GetDoctorsList.dart b/lib/services/appointment_services/GetDoctorsList.dart index 592240b2..8a2bd80f 100644 --- a/lib/services/appointment_services/GetDoctorsList.dart +++ b/lib/services/appointment_services/GetDoctorsList.dart @@ -697,6 +697,46 @@ class DoctorsListService extends BaseService { return Future.value(localRes); } + Future getPatientRadOrders(String appoNo, BuildContext context) async { + Utils.showProgressDialog(context); + Map request; + if (await this.sharedPref.getObject(USER_PROFILE) != null) { + var data = AuthenticatedUser.fromJson( + await this.sharedPref.getObject(USER_PROFILE)); + authUser = data; + } + var languageID = await sharedPref.getString(APP_LANGUAGE); + Request req = appGlobal.getPublicRequest(); + request = { + "AppointmentNo": appoNo, + "VersionID": req.VersionID, + "Channel": req.Channel, + "LanguageID": languageID == 'ar' ? 1 : 2, + "IPAdress": req.IPAdress, + "generalid": req.generalid, + "PatientOutSA": authUser.outSA, + "SessionID": "YckwoXhUmWBsnHKEKig", + "isDentalAllowedBackend": false, + "DeviceTypeID": req.DeviceTypeID, + "PatientID": authUser.patientID, + "TokenID": "@dm!n", + "PatientTypeID": authUser.patientType, + "PatientType": authUser.patientType + }; + + dynamic localRes; + await baseAppClient.post(GET_PATIENT_ORDERS, + onSuccess: (response, statusCode) async { + localRes = response; + Utils.hideProgressDialog(); + }, onFailure: (String error, int statusCode) { + Utils.hideProgressDialog(); + throw error; + }, body: request); + return Future.value(localRes); + } + + Future createAdvancePayment( AppoitmentAllHistoryResultList appo, double payedAmount, From 22de043892fb0b69c160ad9531782e910d6c97cc Mon Sep 17 00:00:00 2001 From: Mohammad Aljammal Date: Wed, 12 Aug 2020 12:29:14 +0300 Subject: [PATCH 12/13] fix merge issues --- android/app/src/main/AndroidManifest.xml | 5 ++--- lib/core/service/client/base_app_client.dart | 1 + 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index e6bbdf39..4d4e663f 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -60,9 +60,8 @@ -<<<<<<< HEAD + -======= ->>>>>>> edd850490ef9ccdee72c9e8d3318f88be0677dce + diff --git a/lib/core/service/client/base_app_client.dart b/lib/core/service/client/base_app_client.dart index bd17fcd1..05cb0f8b 100644 --- a/lib/core/service/client/base_app_client.dart +++ b/lib/core/service/client/base_app_client.dart @@ -1,6 +1,7 @@ import 'dart:convert'; import 'package:diplomaticquarterapp/config/config.dart'; +import 'package:diplomaticquarterapp/config/shared_pref_kay.dart'; import 'package:diplomaticquarterapp/uitl/app_shared_preferences.dart'; import 'package:diplomaticquarterapp/uitl/utils.dart'; import 'package:http/http.dart' as http; From f229958e1ca5dfa61608640e75a54c5d771ae383 Mon Sep 17 00:00:00 2001 From: Mohammad Aljammal Date: Wed, 12 Aug 2020 16:26:03 +0300 Subject: [PATCH 13/13] add ions --- assets/app_icons/config.json | 122 +++++++++++++++++++++++++++++ assets/app_icons/fonts/DQIcons.ttf | Bin 0 -> 5984 bytes lib/d_q_icons_icons.dart | 32 ++++++++ pubspec.yaml | 5 ++ 4 files changed, 159 insertions(+) create mode 100644 assets/app_icons/config.json create mode 100644 assets/app_icons/fonts/DQIcons.ttf create mode 100644 lib/d_q_icons_icons.dart diff --git a/assets/app_icons/config.json b/assets/app_icons/config.json new file mode 100644 index 00000000..b2f57098 --- /dev/null +++ b/assets/app_icons/config.json @@ -0,0 +1,122 @@ +{ + "name": "DQIcons", + "css_prefix_text": "", + "css_use_suffix": false, + "hinting": true, + "units_per_em": 1000, + "ascent": 850, + "glyphs": [ + { + "uid": "ff411ee29329279e60e33c8fe13b69cf", + "css": "blood-pressure", + "code": 59392, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M479.2 354.2V423.1A41.1 41.1 0 0 0 458.3 458.4 41.8 41.8 0 0 0 541.7 458.4 41.1 41.1 0 0 0 520.9 423.1V354.2A20.8 20.8 0 1 0 479.1 354.2ZM854.2 0C772.4 0 708.3 73.2 708.3 166.7 708.3 233.8 758.9 352.6 833.3 372V770.9A187.1 187.1 0 0 1 459.5 782.2C524.8 773.9 583.4 758.4 583.4 729.2V649A207.9 207.9 0 0 0 583.4 267.6V145.8C583.4 86.3 340.4 83.3 291.7 83.3S0 86.3 0 145.8V729.3C0 788.8 243 791.8 291.7 791.8 311.4 791.8 363.1 791.2 417.4 786.7A229 229 0 0 0 875 771V372C949.4 352.7 1000 233.8 1000 166.7 1000 73.2 935.9 0 854.2 0ZM666.7 458.3A166.7 166.7 0 1 1 500 291.7 166.8 166.8 0 0 1 666.7 458.3ZM291.7 125A1092.4 1092.4 0 0 1 519.3 145.8 1092.6 1092.6 0 0 1 291.7 166.7 1092.4 1092.4 0 0 1 64 145.8 1092.7 1092.7 0 0 1 291.7 125ZM125 739.8A343.8 343.8 0 0 1 41.8 721.9V181.6A427 427 0 0 0 125 199.2ZM291.7 750C246.4 750 203.7 747.8 166.7 744.4V203.3C220.8 207.8 272.1 208.4 291.7 208.4 327.7 208.4 470.1 206.7 541.7 181.6V254.2A208.3 208.3 0 1 0 541.7 662.5V721.9A850.6 850.6 0 0 1 291.7 750ZM854.2 333.3C801.5 333.3 750 227.9 750 166.7 750 96.5 795.8 41.6 854.2 41.6S958.3 96.5 958.3 166.7C958.4 227.9 906.9 333.3 854.2 333.3Z", + "width": 1000 + }, + "search": [ + "blood-pressure" + ] + }, + { + "uid": "f06e0a60c298fe46fcd558db3c9103e6", + "css": "blood", + "code": 59393, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M902.3 687.5A19.5 19.5 0 1 0 921.9 707 19.6 19.6 0 0 0 902.3 687.5ZM902.3 687.5M332 429.6A19.5 19.5 0 1 0 312.5 410.1 19.6 19.6 0 0 0 332 429.6ZM332 429.6M214.9 625A214.7 214.7 0 0 0 401.1 303.2L231.8 9.8A19.5 19.5 0 0 0 197.9 9.8L28.6 303.1A214.7 214.7 0 0 0 214.9 625ZM62.4 322.7L214.9 58.6 367.3 322.7A175.8 175.8 0 1 1 62.4 322.7ZM62.4 322.7M214.8 546.9A136.2 136.2 0 0 0 321.1 496.1 19.5 19.5 0 0 0 290.7 471.5 97.4 97.4 0 0 1 214.8 507.8 19.5 19.5 0 1 0 214.8 546.9ZM214.8 546.9M1000 726.4A272.4 272.4 0 0 0 954.8 575.6L723.8 189A19.6 19.6 0 0 0 689.6 190.3L487.1 594.3A273.5 273.5 0 1 0 999.9 726.4ZM726.6 960.7A234.4 234.4 0 0 1 521.5 612.9L521.8 612.1 708.6 239.5 921.5 596 921.9 596.7A234.4 234.4 0 0 1 726.4 960.6ZM726.6 960.7M898.9 766.2A19.5 19.5 0 0 0 874 778.2 156.5 156.5 0 0 1 726.4 882.9 19.5 19.5 0 0 0 726.4 922 195.5 195.5 0 0 0 910.9 791.1 19.5 19.5 0 0 0 898.9 766.2ZM898.9 766.2", + "width": 1000 + }, + "search": [ + "blood" + ] + }, + { + "uid": "8bc572f19109474e3c88db0439fd2dcc", + "css": "bmi", + "code": 59394, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M937.8 231.3H846.3V80.5A80.6 80.6 0 0 0 765.8 0H80.3A80.5 80.5 0 0 0 0 80.5V686.2A80.5 80.5 0 0 0 80.3 766.6H456V948.3A51.7 51.7 0 0 0 507.7 1000H937.8A51.7 51.7 0 0 0 989.3 948.3V283A51.7 51.7 0 0 0 937.8 231.3ZM80.3 733.3A47.1 47.1 0 0 1 33.3 686.2V80.5A47.1 47.1 0 0 1 80.3 33.3H765.8A47.2 47.2 0 0 1 813 80.5V231.3H634A216.5 216.5 0 0 0 210.3 240 40.5 40.5 0 0 0 249.9 288.3H455.9V733.3ZM464.2 255H457.9L451.6 229.5A76.5 76.5 0 0 1 472.2 245.5 51.4 51.4 0 0 0 464.2 255ZM415.1 220.1L423.8 255H348.6A78.3 78.3 0 0 1 414.2 220L414.9 220ZM507.7 231.3C506.5 231.3 505.3 231.6 504.1 231.7A109.7 109.7 0 0 0 442 190.3L431.2 146.7 444.5 153.1A16.7 16.7 0 0 0 458.8 122.9L413.7 101.6H413.4A16.2 16.2 0 0 0 409 100.2C408.6 100.2 408.3 100.2 407.9 100.2A17.5 17.5 0 0 0 406 100.2 16.2 16.2 0 0 0 402.1 100.9 13.6 13.6 0 0 0 400.5 101.3 17.6 17.6 0 0 0 395.7 104.2L395.7 104.2A16.7 16.7 0 0 0 392.5 108.1L365.6 152.8A16.7 16.7 0 0 0 394.2 170L400.3 159.8 407.2 187.5A112.5 112.5 0 0 0 311.3 255H250A6.8 6.8 0 0 1 244.5 252.5 7.4 7.4 0 0 1 243 246.3 183.3 183.3 0 0 1 599.8 231.3ZM956 948.3A18.4 18.4 0 0 1 937.7 966.6H507.7A18.4 18.4 0 0 1 489.3 948.3V283A18.4 18.4 0 0 1 507.7 264.7H937.8A18.4 18.4 0 0 1 956.2 283ZM878.7 300H566.6A44 44 0 0 0 522.7 344V506.2A44 44 0 0 0 566.6 550.2H878.7A44 44 0 0 0 922.6 506.2V344A44 44 0 0 0 878.7 300ZM889.3 506A10.7 10.7 0 0 1 878.7 516.6H566.6A10.7 10.7 0 0 1 556 506V343.8A10.7 10.7 0 0 1 566.6 333.1H878.7A10.7 10.7 0 0 1 889.3 343.8V506ZM631 566.7H547.7A16.7 16.7 0 0 0 531 583.3V666.7A16.7 16.7 0 0 0 547.7 683.3H631A16.7 16.7 0 0 0 647.7 666.7V583.3A16.7 16.7 0 0 0 631 566.7ZM614.3 650H564.2V600H614.3ZM764.3 566.7H681A16.7 16.7 0 0 0 664.3 583.3V666.7A16.7 16.7 0 0 0 681 683.3H764.3A16.7 16.7 0 0 0 781 666.7V583.3A16.7 16.7 0 0 0 764.3 566.7ZM747.7 650H697.6V600H747.6ZM897.7 566.7H814.3A16.7 16.7 0 0 0 797.7 583.3V666.7A16.7 16.7 0 0 0 814.3 683.3H897.7A16.7 16.7 0 0 0 914.3 666.7V583.3A16.7 16.7 0 0 0 897.7 566.7ZM881 650H830.9V600H880.9ZM631 700H547.7A16.7 16.7 0 0 0 531 716.7V800A16.7 16.7 0 0 0 547.7 816.7H631A16.7 16.7 0 0 0 647.7 800V716.7A16.7 16.7 0 0 0 631 700ZM614.3 783.3H564.2V733.3H614.3ZM764.3 700H681A16.7 16.7 0 0 0 664.3 716.7V800A16.7 16.7 0 0 0 681 816.7H764.3A16.7 16.7 0 0 0 781 800V716.7A16.7 16.7 0 0 0 764.3 700ZM747.7 783.3H697.6V733.3H747.6ZM897.7 700H814.3A16.7 16.7 0 0 0 797.7 716.7V800A16.7 16.7 0 0 0 814.3 816.7H897.7A16.7 16.7 0 0 0 914.3 800V716.7A16.7 16.7 0 0 0 897.7 700ZM881 783.3H830.9V733.3H880.9ZM631 833.3H547.7A16.7 16.7 0 0 0 531 850V933.3A16.7 16.7 0 0 0 547.7 950H631A16.7 16.7 0 0 0 647.7 933.3V850A16.7 16.7 0 0 0 631 833.3ZM614.3 916.7H564.2V866.6H614.3ZM764.3 833.3H681A16.7 16.7 0 0 0 664.3 850V933.3A16.7 16.7 0 0 0 681 950H764.3A16.7 16.7 0 0 0 781 933.3V850A16.7 16.7 0 0 0 764.3 833.3ZM747.7 916.7H697.6V866.6H747.6ZM897.7 833.3H814.3A16.7 16.7 0 0 0 797.7 850V933.3A16.7 16.7 0 0 0 814.3 950H897.7A16.7 16.7 0 0 0 914.3 933.3V850A16.7 16.7 0 0 0 897.7 833.3ZM881 916.7H830.9V866.6H880.9ZM626.8 350H593.5A16.7 16.7 0 0 0 576.9 366.7V483.3A16.7 16.7 0 0 0 593.5 500H626.8A41.7 41.7 0 0 0 668.5 458.3V450A41.2 41.2 0 0 0 660 425 41.3 41.3 0 0 0 668.5 399.9V391.6A41.7 41.7 0 0 0 626.8 350ZM610.2 383.3H626.8A8.3 8.3 0 0 1 635.2 391.7V400A8.3 8.3 0 0 1 626.8 408.4H610.2ZM635.2 458.5A8.3 8.3 0 0 1 626.8 466.9H610.2V441.9H626.8A8.3 8.3 0 0 1 635.2 450.2ZM802.9 350.8A16.7 16.7 0 0 0 784.3 356.7L747.7 405.4 711 356.5A16.7 16.7 0 0 0 681 366.5V499.8H714.2V416.7L734.2 443.4A17.3 17.3 0 0 0 760.9 443.4L780.9 416.7V500H814.2V366.7A16.7 16.7 0 0 0 802.9 350.8ZM831 350H864.2V500H831Z", + "width": 989 + }, + "search": [ + "bmi" + ] + }, + { + "uid": "66a5ea0b6227f324a7bcce70c85374a9", + "css": "heart", + "code": 59395, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M1308.4 475H1204.8A726.6 726.6 0 0 0 1225.9 394C1251.4 266.6 1234.4 162.5 1177.2 92.3A269.9 269.9 0 0 0 962.4 0.3 417.3 417.3 0 0 0 651.3 143.5 417.3 417.3 0 0 0 340.2 0.3 269.9 269.9 0 0 0 124.3 92.3C67 163 50.1 266.6 75.5 394A725.7 725.7 0 0 0 98.3 476.7H23.6A23.6 23.6 0 1 0 23.6 523.8H115.9C259.5 877 640.3 997.8 644.4 999A23.6 23.6 0 0 0 658.1 999C662.3 997.8 1044.3 877 1187.5 522.1H1308.3A23.6 23.6 0 0 0 1308.3 475.1ZM651.4 951.7H651.4C601.4 934.5 296 818.6 166.7 523.8H423.2L501.2 715.2A23.6 23.6 0 0 0 522.9 729.8H524.8A23.6 23.6 0 0 0 546 711.9L626 384.4 691.8 605.9A24.1 24.1 0 0 0 737.3 607L803.9 422.9 874.5 513.1A23.6 23.6 0 0 0 892.9 522H1136.9C1007.7 817.7 701 934.5 651.4 951.7ZM1179.8 384.8A673.4 673.4 0 0 1 1154.7 475.3H904.5L814.3 360.7A23.6 23.6 0 0 0 773.6 367.3L716.8 523.6 646.2 288.3A23.9 23.9 0 0 0 600.2 289.5L517.6 630.2 460.6 491.3A23.6 23.6 0 0 0 438.7 476.7H147.9A676.1 676.1 0 0 1 122.8 384.8H122.8C99.3 271.8 113.6 181.2 161.9 122.3A223.9 223.9 0 0 1 340.1 47.3 362.4 362.4 0 0 1 631.7 195.7 23.6 23.6 0 0 0 670.8 195.7 362.4 362.4 0 0 1 962.4 47.3 223.9 223.9 0 0 1 1140.7 122.2C1187.8 181.2 1202.4 271.8 1179.8 384.8Z", + "width": 1332 + }, + "search": [ + "heart" + ] + }, + { + "uid": "4131eb4c890febf6ff3d52e759eed4d4", + "css": "height", + "code": 59396, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M518 285.7H508.4A107.1 107.1 0 1 0 349.1 285.7H339.4A89.4 89.4 0 0 0 250.3 374.9V624.9A17.9 17.9 0 0 0 268.1 642.7H321.7V982.2A17.9 17.9 0 0 0 339.6 1000H446.7A89.4 89.4 0 0 0 535.9 910.9V643H589.5A17.9 17.9 0 0 0 607.4 625.1V375A89.4 89.4 0 0 0 518 285.7ZM428.8 142.9A71.4 71.4 0 1 1 357.4 214.3 71.5 71.5 0 0 1 428.6 142.9ZM439.8 321.4L428.8 354.2 417.9 321.4ZM571.7 607.1H536V375H500.3V910.8A53.6 53.6 0 0 1 446.7 964.3V642.9H411V964.3H357.1V375H321.4V607.1H285.7V375A53.6 53.6 0 0 1 339.3 321.4H380L411.7 416.3A17.8 17.8 0 0 0 445.5 416.3L477.2 321.4H518A53.6 53.6 0 0 1 571.6 375V607.1ZM196.4 0H17.9A17.9 17.9 0 0 0 0 17.9V982.2A17.9 17.9 0 0 0 17.9 1000H196.5A17.9 17.9 0 0 0 214.3 982.2V17.9A17.9 17.9 0 0 0 196.4 0ZM178.6 107.1H142.9V142.9H178.6V214.3H107.1V250H178.6V321.4H142.9V357.1H178.6V428.7H107.1V464.4H178.6V535.9H142.9V571.6H178.6V643H107.1V678.7H178.6V750.2H142.9V785.9H178.6V857.3H107.1V893H178.6V964.5H35.7V35.7H178.6Z", + "width": 804 + }, + "search": [ + "height" + ] + }, + { + "uid": "7da96eaf449227b65b25e28f024492a7", + "css": "outline", + "code": 59397, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M295.8 216.2L303.6 183.8C300.3 183 222.5 165.2 167.6 293.5L198.2 306.8C241.3 206 293.6 215.8 295.8 216.2ZM147.9 1000C279.8 1000 416.2 671.4 416.2 583.3A102.5 102.5 0 0 0 399.1 524L499.6 423.6 600 524A102.5 102.5 0 0 0 582.9 583.3C582.9 671.4 719.4 1000 851.2 1000A94.7 94.7 0 0 0 928.2 950.1C1001.6 841.4 1023 563 968.4 427.4A1298.8 1298.8 0 0 0 893.8 267C832.1 156.3 772.7 100.2 717.3 100.2 692.2 100.2 667.5 118.5 646.3 153.3A349.4 349.4 0 0 0 604 380.8L566.2 343.1V16.6A16.6 16.6 0 0 0 549.6 0H449.6A16.6 16.6 0 0 0 432.9 16.6V343L395.2 380.8A349.4 349.4 0 0 0 352.9 153.1C331.6 118.3 307 99.9 281.9 99.9 156.3 99.9 43.6 392.7 30.7 427.2-23.9 562.8-2.5 841.2 70.9 949.9A94.7 94.7 0 0 0 147.9 1000ZM674.5 170.6C688.9 147.3 704.9 133.3 717.3 133.3 804.4 133.3 905.6 354.1 937.3 439.1L937.3 439.5C987.9 564.8 968 831.4 900.5 931.4 884.7 954.6 868.1 966.6 851.1 966.6 749.5 966.6 616.1 669.5 616.1 583.3A77.3 77.3 0 0 1 640.4 526 140.2 140.2 0 0 0 657 503 213.7 213.7 0 0 0 688.8 530.9 126.6 126.6 0 0 0 649.4 633.3H682.6A97.1 97.1 0 0 1 709.2 557.1 373 373 0 0 1 732.6 700C732.6 746.1 753.5 833.3 832.6 833.3V800.1C767 800.1 765.9 704.1 765.9 700.1A433 433 0 0 0 745.5 559 185.9 185.9 0 0 0 783.7 565.9 302.4 302.4 0 0 0 870.8 745.2L894.4 721.6A272.8 272.8 0 0 1 817.6 568 93.1 93.1 0 0 1 899.7 636.6L932.4 629.9A128.5 128.5 0 0 0 799.5 533.2 153.6 153.6 0 0 1 722.1 512.6 152.4 152.4 0 0 0 731.5 493.5 117.5 117.5 0 0 0 773.1 501.2 122.7 122.7 0 0 0 861.2 461.7L837.7 438.1A84.3 84.3 0 0 1 740.6 461 100.7 100.7 0 0 0 711.3 371.5L687.7 395A78.9 78.9 0 0 1 694.7 493.1 172.2 172.2 0 0 1 665.3 460.3 155.7 155.7 0 0 0 648 409.1C616.1 345.9 636.4 232.6 674.5 170.6ZM630.5 454.6A42.4 42.4 0 0 1 620.8 497.8L573.1 450 599.7 423.4ZM576 400L549.4 426.6 516.2 393.4V366.8H542.7ZM466.2 33.2H532.9V66.5H466.2ZM466.2 99.9H532.9V133.1H466.2ZM466.2 166.6H532.9V199.8H466.2ZM466.2 233.2H532.9V266.5H466.2ZM466.2 299.9H532.9V333.1H466.2ZM456.5 366.6H483.1V393.2L449.8 426.4 423.2 399.8ZM399.6 423.6L426.2 450.1 378.3 497.7A42.4 42.4 0 0 1 368.5 454.5ZM61.7 439.6L61.7 439.1C93.4 354.1 194.6 133.4 281.7 133.4 294.1 133.4 310 147.3 324.4 170.7 362.6 232.7 382.8 345.9 351 409.2A155.7 155.7 0 0 0 333.7 460.5 172.4 172.4 0 0 1 304.2 493.3 78.7 78.7 0 0 1 311.3 395.2L287.7 371.6A100.7 100.7 0 0 0 258.4 461.3 84.3 84.3 0 0 1 161.3 438.5L137.8 462A122.8 122.8 0 0 0 225.9 501.6 117.5 117.5 0 0 0 267.6 493.8 152.3 152.3 0 0 0 277 512.9 153.6 153.6 0 0 1 199.6 533.5 128.6 128.6 0 0 0 66.6 630.2L99.3 636.9A91.8 91.8 0 0 1 181.2 567.9 273 273 0 0 1 104.4 721.5L128 745.1A302.4 302.4 0 0 0 215.1 565.9 185.9 185.9 0 0 0 253.3 558.9 432.9 432.9 0 0 0 232.9 700C232.9 704.1 231.8 800 166.2 800V833.2C245.3 833.2 266.2 746 266.2 699.9A373.6 373.6 0 0 1 289.5 557 97.4 97.4 0 0 1 316.1 633.1H349.3A126.7 126.7 0 0 0 309.9 530.8 213.8 213.8 0 0 0 341.6 502.9 140.2 140.2 0 0 0 358.3 525.8 77.3 77.3 0 0 1 382.6 583.1C382.6 669.3 249.1 966.4 147.6 966.4 130.6 966.4 114 954.6 98.2 931.2 31 831.5 11.1 565 61.7 439.6ZM800.9 306.6L831.5 293.3C776.5 165 698.8 182.9 695.5 183.6L703.3 216C705.5 215.8 757.9 206.1 800.9 306.6Z", + "width": 999 + }, + "search": [ + "outline" + ] + }, + { + "uid": "9ad94ca188c9245ce61a2023913176f8", + "css": "thermometer", + "code": 59398, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M183.4 0A116.7 116.7 0 0 0 66.7 116.6V675.1A183.3 183.3 0 1 0 366.6 816.3 181.6 181.6 0 0 0 300 675.1V116.6A116.7 116.7 0 0 0 183.4 0ZM333.3 816.3A150 150 0 1 1 93.4 696.6 16.7 16.7 0 0 0 100.1 683.2V633.1H133.3V599.9H100.1V549.8H133.3V516.6H100.1V466.5H133.3V433.3H100.1V383.2H133.3V350H100.1V299.9H133.3V266.6H100.1V216.6H133.3V183.3H100.1V116.6A83.3 83.3 0 0 1 266.7 116.6V683.3A16.6 16.6 0 0 0 273.3 696.6 148.8 148.8 0 0 1 333.3 816.3ZM333.3 816.3M200.1 734.7V150H166.9V734.7A83.3 83.3 0 1 0 200.1 734.7ZM183.4 866.3A50 50 0 1 1 233.4 816.3 50 50 0 0 1 183.4 866.3ZM183.4 866.3", + "width": 367 + }, + "search": [ + "thermometer" + ] + }, + { + "uid": "dc83d16b71561f6b582663f6b4d604ec", + "css": "weight-scale", + "code": 59399, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M912.1 0H87.9A88 88 0 0 0 0 87.9V912.1A88 88 0 0 0 87.9 1000H912.1A88 88 0 0 0 1000 912.1V87.9A88 88 0 0 0 912.1 0ZM941.4 912.1A29.3 29.3 0 0 1 912.1 941.4H87.9A29.3 29.3 0 0 1 58.6 912.1V87.9A29.3 29.3 0 0 1 87.9 58.6H912.1A29.3 29.3 0 0 1 941.4 87.9ZM941.4 912.1M837.9 233.7A563.3 563.3 0 0 0 162.2 233.7 29.3 29.3 0 0 0 156.4 274.9L311.1 480.7A29.3 29.3 0 0 0 352.2 486.5 246.9 246.9 0 0 1 648.4 486.5 29.3 29.3 0 0 0 689.5 480.7L844.2 274.9A29.3 29.3 0 0 0 838.4 233.7ZM659 422.9A302 302 0 0 0 529.3 379.8V290.6A29.3 29.3 0 0 0 470.7 290.6V379.8A302 302 0 0 0 341 422.9L221.2 263.6A504.8 504.8 0 0 1 778.8 263.6ZM659 422.9", + "width": 1000 + }, + "search": [ + "weight-scale" + ] + } + ] +} \ No newline at end of file diff --git a/assets/app_icons/fonts/DQIcons.ttf b/assets/app_icons/fonts/DQIcons.ttf new file mode 100644 index 0000000000000000000000000000000000000000..ddb147b0ed66e8baa61546405a08fae52aff90b5 GIT binary patch literal 5984 zcmd@&Yj7M#THW*Notf22qutrrhjw>ncQvb(w5xru9`?$%Y*~KDvL(enKN4G(Ru4zg zD$>faoyYk&67IOvIn=?0ICT{;kZ?x`RSDd|@knu|AjK7d3XcMg^QC~|1OzHn9To6N zE54px>+BGy`^6uot9!ow`s?rO{<^>K>u!V*LNdCJSd=azWpPXKrTABaw{eMGtPgxy7rqqp$w%IzsFR2sLlcm#1cY{~2Ba+V>zA z<^f@QlKXjpe+zPSeyMuJNN)cN^!G^EQdz5h^7yj{5OTiuoPFEK1{h{w!KE*x+bsJ(R7Cy>J#6O8bR*hmMNC<6P^?JL6QmBNO z{liBmkz;YHx{Q2?yRZFz7%wi&O#%OUPYiUl6$1t%;U1R#75qHnVXoI0s+(AM|aDB!-ky@@N^AJ#QO z<-#sNs2ehj4PR{ZKL=RKsT=;F0l;%GZ%V^a{07+uoopalLcKmK2533pC?G=TjOh&j zzkha10V@qPfL35xtZZqKYLaRh)_J3m>1u2=GS%xwBh!`IXk@x~HX0dp4XaVl)=s0M z{tQ3QzQSGMbz&!~eV+YCb{r|_7&?ol(E@r3eIC|Gbzs%y&J^-FGX^;<;4sB# zZb*uQP2yOgSlEqA*lLfNVIrssG-or#AX8#u3N#m?cM`KM2Tn32oXrF=E@(nbh!t2f zrnog{7)t0+D5|CdyMnl=f|ytm=W`_t)T&D$0{)I9d&6E?vbWmt;~hh>7R4WoFzNBB z$pT*twf7AT^?mZtR}Wpke&}rf5VLpj$+>}*{(xw= z*w|^mhcVHG?Lws z*6FOZPBtVW7gA9atS*g)(0(+IrqD&ShN=j)hXuN3IWvMYB~Usj z)tx07SPm8zh!uhi>&HRtV3JIssAXV*k~mBpIMPr*pW7iUVLqH>ig`a)p#zR&i>5#+ zDNC!T8DpQd+3hWMyKU?D1(|0=yG&%;df!YR4t!Z~3ttZ4zL^Uz{F2dkXO5K$zh zS(PQWpQF-R>=+BOU1WL5VZYr!y_Ui4qFDP@W^KA3C$X*eAMN9#1*fwxI^O=C-y=9g zPH|yQYLYno=Jz9(nE4UAsU3Q>90rDqy@`dkGhQWOd(d5Yf}mNX-&6G61qc z@1gDO?Mv((un#ZFqCPZ;E}?7a$I(sn74$m#9rO+KF8T}f59puJT~q@#wc;=~aRK+^ z!}u7U#!L8dd;@<0>?s096fwfoNZeTiOe<@EaVa?yhfVkupz03b2&@@H1or?|oROFt zj75up%17$$1Gv#1$!Ci{Bo2gHy#KHJvJc9Q)hCvv`f~|gSffQAsw!;RW(@Ac zfde?3*W8&wtY%>yidi+ne&t+`u{Cb=^ceU`(2ZYLgTc+8aJIEMnb)0dZ`udXls~ac zVm;1xY=R(*d`>(fhh2{_j24p}g2Xd?0yB(_Wf<&dc+t)YM9((uW_c`6eQHj@Gm@<~ zZj)sjex1mpwYOV+zE<1|rA^>!Z}Wn{<6cgv)h37}5n6aMnJ?~CG^k7pk|fXqDtC8U z{yQ19k4Y$?<%cAz8C0mDctz10RydAl6)(pr3d{c@FSF5hmbSWhg?AZ(W*E$)FHkjY z-7-?Y<_?Bb=0!DBlR#0AP<6eK9*r}J<7sE0HiYl^1c?hoTAVW0r7i*UvdpO%K89fu zf+T<)`k8j{cY_b{M@w5-svzb?nrN^>kL z^3P8A2=Prk!;9<}X>4V;zrQ_iog4?y!|1cr=E1?5u>Zhs5(t=<1BLK;&)a5cENvtj zEE_3HV=7LYF`5i5hzB6b7M%cOsIh}@fT##@Q6Ldu+1TKO1vwGJjHS&&v4ph@@XY{_ zEx4g0-!|7|b9%cvR(GGdH861NOzE+Bm&YkK9VQN&%|Xs}3=bR|9LZ%tc|fnl*tYM>)iI&^B9X;PYM?apxj*rgwRi`cM4@W>q^+Q_e;5udp< zHV|f_$?jE&vw!J*n}|hQ?Uz0$*b+UH&nC@`*avg}jVHmZ)-Pqc2hw$FoTg>RjhFd?+6T+X@-S}~tZ0@4m+214bqtSzqMj|8D zA0YN;;asx43GwltAwJsC1o~C}MX<&CkHAs12q(}&G3I~+EyUFzCUwID<+}wE zE5=AHpJhL0{YX|NF`|KC7u)mJgkbG~y-Fu45ReT#HNoPkWne@?1RQ_{(*$ooe}y7U z9!9NN`pBC_ke!7w(9t)}zKuDV#X@`08Wz#A1hB$tMp zp^wtSIknan&Rb~Jl%&_~;`nGhc~sU(G9Yw>Jkf;Ubh;T)iATLIh#fwMgE1JFsx%YP z-js-#W>?g&84$}@W-|mTYHP6(dYEFa=`6#kZGDd2s?2PDkWU;N8rdJ#{WCLuJ-mNp z=vX4p_}uyOh4Q6+6Qi%@bL#^p9;Sh^_H}b$J?HbkFgm^O613;tK6aqhwJUwRRNOst z;q3WzG}SpgczsBd;dJWC2h@({1BcuEVVB29dwnAZcqV%e6gJk)wg*U}$YNEJY-+1V zZIZny#p5b!&8>bB2Tibg{(*37AaR7%1ypmf;VK_`GSu;|lxR4j*XlPy=}vj8c|^ zEynf1;dm;NK7aQ7%r_i;Z7RpGIwPwP%LI4@nZhez*G{wt?FB!15}ksV7kUR&9B_pw z!5t0maB#hI((4@t1K15`EI2)WOwJX+D=Grr)iH3Iv_D)=OhWxB^{bJu>G@FF*SGfM zSVRvMF7KN=-|g!pF!`M?eISiVoBoUuGKJJ&N-$GuAkY~IsO-3&*SFq{Ke<{6Oz(*w z_AyDl5Ze5c{DjtXVNU18jFBlvO8O zv}k--fP2;iYKFHS9rdC^=rBTf=ipvHv$G#LWh-!>HNof|I0SQpunQguVs*g;XJTER z0}!oa6iwLYH{Xuta#6MyN}|{|-?l4?o$a+NbJJHZU%ommvE(Jry7k%0a<#m;SfRE3Ck_FAZM;0UzBskos5O2k%d2Y(m1RAhOf@hE%gg1} zscLzKidwrom#J1~_1V?Rl0MwvsjsY7E|sUN$@yw^rN5`=epzsrub>rl6|KS>%p95r z-RYb*4w}9SWu-y2fR^F*zX+Hqv<^Myt(G;Y?}0oEEfiZtWs80qT9;80 zUU@38O5GL(#nAReNR^$o{pbYj{5t&_yfBnuMC(8?1$-WCd$4xWlC%ahpnP?Bp-950 zAEY@5G|LvBI~G literal 0 HcmV?d00001 diff --git a/lib/d_q_icons_icons.dart b/lib/d_q_icons_icons.dart new file mode 100644 index 00000000..570861bf --- /dev/null +++ b/lib/d_q_icons_icons.dart @@ -0,0 +1,32 @@ +/// Flutter icons DQIcons +/// Copyright (C) 2020 by original authors @ fluttericon.com, fontello.com +/// This font was generated by FlutterIcon.com, which is derived from Fontello. +/// +/// To use this font, place it in your fonts/ directory and include the +/// following in your pubspec.yaml +/// +/// flutter: +/// fonts: +/// - family: DQIcons +/// fonts: +/// - asset: fonts/DQIcons.ttf +/// +/// +/// +import 'package:flutter/widgets.dart'; + +class DQIcons { + DQIcons._(); + + static const _kFontFam = 'DQIcons'; + static const _kFontPkg = null; + + static const IconData blood_pressure = IconData(0xe800, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData blood = IconData(0xe801, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData bmi = IconData(0xe802, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData heart = IconData(0xe803, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData height = IconData(0xe804, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData outline = IconData(0xe805, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData thermometer = IconData(0xe806, fontFamily: _kFontFam, fontPackage: _kFontPkg); + static const IconData weight_scale = IconData(0xe807, fontFamily: _kFontFam, fontPackage: _kFontPkg); +} diff --git a/pubspec.yaml b/pubspec.yaml index d9d89739..c711d722 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -113,6 +113,7 @@ flutter: - assets/images/login/ - assets/json/ + fonts: - family: WorkSans fonts: @@ -120,3 +121,7 @@ flutter: - asset: assets/fonts/Work_Sans/WorkSans-Bold.ttf - asset: assets/fonts/Work_Sans/WorkSans-Bold.ttf weight: 700 + + - family: DQIcons + fonts: + - asset: assets/app_icons/fonts/DQIcons.ttf