This commit is contained in:
Odein
2023-11-22 14:53:35 +04:30
parent 22d0390e90
commit cd3b1080f5
298 changed files with 800 additions and 413 deletions
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
+3 -5
View File
@@ -11,8 +11,6 @@ class Url {
static const String getUserInfo = '$baseUrl/GetInfo';
// static const String testResults = '$baseUrl/TestResults';
static const String filterItems = '$baseUrl/TestResults/ListFilterItems';
static const String labelItems = '$baseUrl/GetLabels';
@@ -29,9 +27,9 @@ class Url {
static const String addImage = '$baseUrl/UploadFile';
// static String getUserMedicalCenterId(int id) {
// return '$baseUrl/users?medical_center_id=$id';
// }
static const String exportItems = '$baseUrl/export/items';
static const String exportPackages = '$baseUrl/export/packages';
static String testResults(int id) {
return '$baseUrl/TestResults?page=$id';
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
-1
View File
@@ -24,7 +24,6 @@ class CycleDetailObject extends Equatable {
final String description;
final String createDate;
final String hospitalName;
final String date;
final String sterileId;
final String cycleNumber;
Regular → Executable
+3
View File
@@ -8,6 +8,7 @@ class ItemResultObject extends Equatable {
final String userName;
final int status;
final String? batchId;
final String? udi;
ItemResultObject({
required this.id,
@@ -16,6 +17,7 @@ class ItemResultObject extends Equatable {
required this.userName,
required this.status,
this.batchId,
this.udi,
});
@override
@@ -26,6 +28,7 @@ class ItemResultObject extends Equatable {
userName,
status,
batchId!,
udi!,
];
@override
Regular → Executable
-1
View File
@@ -26,7 +26,6 @@ class LabelDetailsObject extends Equatable {
final String package;
final String packageId;
final String hospitalName;
final String createDate;
final String expireDate;
final String sterileDate;
Regular → Executable
+30 -9
View File
@@ -1,3 +1,4 @@
// ignore_for_file: public_member_api_docs, sort_constructors_first
import 'package:equatable/equatable.dart';
class MyItemResultObject extends Equatable {
@@ -5,20 +6,14 @@ class MyItemResultObject extends Equatable {
final String name;
final String size;
final String? userName;
final String? fromDate;
final String? toDate;
final String? requestId;
final String? userHistory;
MyItemResultObject({
required this.id,
required this.name,
required this.size,
this.userName,
this.fromDate,
this.toDate,
this.requestId,
this.userHistory,
});
@override
@@ -27,10 +22,7 @@ class MyItemResultObject extends Equatable {
name,
size,
userName!,
fromDate!,
toDate!,
requestId!,
userHistory!,
];
@override
@@ -66,3 +58,32 @@ class MyItemFilterObject extends Equatable {
@override
bool get stringify => true;
}
class ItemHistoryObject extends Equatable {
final String fromDate;
final String toDate;
final String userHistoryName;
final String userHistoryId;
final String userHistoryPhon;
ItemHistoryObject({
required this.fromDate,
required this.toDate,
required this.userHistoryName,
required this.userHistoryId,
required this.userHistoryPhon,
});
@override
List<Object> get props {
return [
fromDate,
toDate,
userHistoryName,
userHistoryId,
userHistoryPhon,
];
}
@override
bool get stringify => true;
}
Regular → Executable
+29 -9
View File
@@ -5,20 +5,14 @@ class MyPackageResultObject extends Equatable {
final String name;
final String createdAt;
final String? userName;
final String? fromDate;
final String? toDate;
final String? requestId;
final String? userHistory;
MyPackageResultObject({
required this.id,
required this.name,
required this.createdAt,
this.userName,
this.fromDate,
this.toDate,
this.requestId,
this.userHistory,
});
@override
@@ -27,10 +21,7 @@ class MyPackageResultObject extends Equatable {
name,
createdAt,
userName!,
fromDate!,
toDate!,
requestId!,
userHistory!,
];
@override
@@ -60,3 +51,32 @@ class MyPackageFilterObject extends Equatable {
@override
bool get stringify => true;
}
class PackageHistoryObject extends Equatable {
final String fromDate;
final String toDate;
final String userHistoryName;
final String userHistoryId;
final String userHistoryPhon;
PackageHistoryObject({
required this.fromDate,
required this.toDate,
required this.userHistoryName,
required this.userHistoryId,
required this.userHistoryPhon,
});
@override
List<Object> get props {
return [
fromDate,
toDate,
userHistoryName,
userHistoryId,
userHistoryPhon,
];
}
@override
bool get stringify => true;
}
Regular → Executable
View File
View File
Regular → Executable
View File
+4
View File
@@ -277,6 +277,10 @@ class _CycleAddScreenState extends State<CycleAddScreen> {
initialLabelValue:
cycleProvider.initialLabelValue,
index: index,
hasRemoveButton:
cycleProvider.labelValues.length > 1
? true
: false,
),
itemCount:
cycleProvider.labelValues.length,
View File
View File
View File
View File
View File
View File
View File
View File
+21
View File
@@ -249,6 +249,27 @@ class ItemResultFloatingButton extends StatelessWidget {
return Row(
mainAxisAlignment: MainAxisAlignment.end,
children: <Widget>[
// InkWell(
// customBorder: CircleBorder(),
// onTap: () {
// Provider.of<ItemProvider>(context, listen: false).exportItems();
// },
// child: Container(
// padding: EdgeInsets.all(_deviceBlockSize),
// decoration: BoxDecoration(
// shape: BoxShape.circle,
// color: Colors.black,
// ),
// child: Icon(
// Icons.import_export,
// size: 10 * _deviceBlockSize,
// color: Colors.white,
// ),
// ),
// ),
// SizedBox(
// width: 2 * _deviceBlockSize,
// ),
InkWell(
customBorder: CircleBorder(),
onTap: () {
View File
View File
+5 -18
View File
@@ -30,9 +30,6 @@ class _LabelAddScreenState extends State<LabelAddScreen> {
DateTime? dateTimeS;
final _form = GlobalKey<FormState>();
List<Map<String, String>> packageVals = [];
List<String> packageValue = [];
bool isInit = true;
// String? packageId;
// String? previousRoute;
@@ -49,15 +46,7 @@ class _LabelAddScreenState extends State<LabelAddScreen> {
@override
void didChangeDependencies() async {
if (isInit) {
// final pastRoute = ModalRoute.of(context)!.settings.name;
// previousRoute = pastRoute;
// print(previousRoute);
var labelProviderObject = Provider.of<LabelsProvider>(context);
// var arguments = ModalRoute.of(context)!.settings.arguments;
// if (arguments != null && arguments is Map<dynamic, dynamic>) {
// packageId = arguments['id'];
// }
// print(packageId);
labelProviderObject.resetPackageVals();
labelProviderObject.getPackageFilters().then(
(result) {
@@ -68,7 +57,12 @@ class _LabelAddScreenState extends State<LabelAddScreen> {
);
},
);
var arguments = ModalRoute.of(context)!.settings.arguments;
if (arguments != null && arguments is Map<dynamic, dynamic>) {
labelProviderObject.packageId = arguments['id'];
}
}
super.didChangeDependencies();
}
@@ -298,13 +292,6 @@ class _LabelAddScreenState extends State<LabelAddScreen> {
),
Consumer<LabelsProvider>(
builder: (ctx, labelProvider, _) {
// if (previousRoute ==
// '/PackageDetailScreen') {
// initialLabelValue = packageId!;
// } else {
// initialLabelValue =
// labelProvider.initialPackageValue;
// }
return ListView.builder(
physics: NeverScrollableScrollPhysics(),
shrinkWrap: true,
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
+6 -4
View File
@@ -218,10 +218,12 @@ class _MyItemsMineScreenState extends State<MyItemsMineScreen> {
items:
itemResults.hospitalItems?[index],
push: () {
Navigator.pushNamed(context,
Routes.myItemsHistoryScreen,
arguments: itemResults
.hospitalItems?[index]);
Navigator.pushNamed(
context,
Routes.myItemsHistoryScreen,
arguments: itemResults
.hospitalItems?[index],
);
},
);
}
View File
View File
View File
View File
+16 -11
View File
@@ -2,6 +2,7 @@ import 'package:cssd/models/my_item_model.dart';
import 'package:cssd/providers/auth.dart';
import 'package:cssd/providers/my_items.dart';
import 'package:cssd/widgets/MyItemsScreens/History/my_items_history_date_widget.dart';
import 'package:cssd/widgets/MyItemsScreens/History/user_item_history_box.dart';
import 'package:cssd/widgets/MyItemsScreens/Result/my_items_data_box_widget.dart';
import '../../config/routes.dart';
@@ -26,6 +27,7 @@ class _MyItemsHistoryScreenState extends State<MyItemsHistoryScreen> {
bool _isInit = true;
ScrollController? sc;
MyItemResultObject? itemData;
ItemHistoryObject? historyData;
@override
void initState() {
@@ -117,8 +119,8 @@ class _MyItemsHistoryScreenState extends State<MyItemsHistoryScreen> {
),
Expanded(
child: Consumer<MyItemProvider>(
builder: (context, userResults, child) {
return userResults.isloading
builder: (context, itemResults, child) {
return itemResults.isloading
? Center(
child: CircularProgressIndicator(
color: Colors.black,
@@ -132,15 +134,18 @@ class _MyItemsHistoryScreenState extends State<MyItemsHistoryScreen> {
itemBuilder: (context, index) {
return Column(
children: [
ItemHistoryDate(
deviceBlockSize: _deviceBlockSize,
items: itemData!,
),
SizedBox(
height: 20.0,
),
Text(
itemData!.userHistory.toString(),
ItemHistoryDate(
deviceBlockSize: _deviceBlockSize,
items: itemResults
.itemHistory![index],
),
UserItemDataBox(
deviceBlockSize: _deviceBlockSize,
user: itemResults
.itemHistory![index],
),
SizedBox(
height: 20.0,
@@ -148,13 +153,13 @@ class _MyItemsHistoryScreenState extends State<MyItemsHistoryScreen> {
],
);
},
itemCount: userResults
.originalItemHistory!.length,
itemCount:
itemResults.itemHistory!.length,
shrinkWrap: true,
);
},
),
)
),
],
),
)
View File
+2
View File
@@ -45,6 +45,7 @@ class _ItemsTransferScreenState extends State<ItemsTransferScreen> {
itemData =
ModalRoute.of(context)!.settings.arguments as ItemDetailObject?;
var userResults = Provider.of<UsersProvider>(context);
userResults.resetSelectedUser();
userResults.setLoading();
String medicalCenterId =
await userResults.getUserMedicalCenter() as String;
@@ -121,6 +122,7 @@ class _ItemsTransferScreenState extends State<ItemsTransferScreen> {
text: 'user',
text2: 'name or ID',
deviceBlockSize: _deviceBlockSize,
textInputType: TextInputType.name,
onChanged: (value) {
Provider.of<UsersProvider>(context, listen: false)
.searchUsers(value);
View File
View File
View File
View File
View File
+15 -12
View File
@@ -2,6 +2,7 @@ import 'package:cssd/models/my_package_model.dart';
import 'package:cssd/providers/auth.dart';
import 'package:cssd/providers/my_packages.dart';
import 'package:cssd/widgets/MyPackagesScreens/History/my_packages_history_date_widget.dart';
import 'package:cssd/widgets/MyPackagesScreens/History/user_package_history_box.dart';
import 'package:cssd/widgets/MyPackagesScreens/Result/my_packages_data_box_widget.dart';
import '../../config/routes.dart';
@@ -118,8 +119,8 @@ class _MyPackagesHistoryScreenState extends State<MyPackagesHistoryScreen> {
),
Expanded(
child: Consumer<MyPackageProvider>(
builder: (context, userResults, child) {
return userResults.isloading
builder: (context, packageResults, child) {
return packageResults.isloading
? Center(
child: CircularProgressIndicator(
color: Colors.black,
@@ -133,16 +134,18 @@ class _MyPackagesHistoryScreenState extends State<MyPackagesHistoryScreen> {
itemBuilder: (context, index) {
return Column(
children: [
PackageHistoryDate(
deviceBlockSize: _deviceBlockSize,
packages: packageData!,
),
SizedBox(
height: 20.0,
),
Text(
packageData!.userHistory
.toString(),
PackageHistoryDate(
deviceBlockSize: _deviceBlockSize,
packages: packageResults
.packageHistory![index],
),
UserPackageDataBox(
deviceBlockSize: _deviceBlockSize,
user: packageResults
.packageHistory![index],
),
SizedBox(
height: 20.0,
@@ -150,13 +153,13 @@ class _MyPackagesHistoryScreenState extends State<MyPackagesHistoryScreen> {
],
);
},
itemCount: userResults
.originalPackageHistory!.length,
itemCount:
packageResults.packageHistory!.length,
shrinkWrap: true,
);
},
),
)
),
],
),
)
View File
+3 -1
View File
@@ -44,6 +44,7 @@ class _PackageTransferScreenState extends State<PackageTransferScreen> {
packageData =
ModalRoute.of(context)!.settings.arguments as PackageDetailObject?;
var userResults = Provider.of<UsersProvider>(context);
userResults.resetSelectedUser();
userResults.setLoading();
String medicalCenterId =
await userResults.getUserMedicalCenter() as String;
@@ -115,8 +116,9 @@ class _PackageTransferScreenState extends State<PackageTransferScreen> {
ResultSearchBox(
searchCTRL: searchCTRL,
text: 'user',
text2: 'name',
text2: 'name or ID',
deviceBlockSize: _deviceBlockSize,
textInputType: TextInputType.name,
onChanged: (value) {
Provider.of<UsersProvider>(context, listen: false)
.searchUsers(value);
+25
View File
@@ -24,6 +24,7 @@ class _PackageAddScreenState extends State<PackageAddScreen> {
// TextEditingController udiCTRL = new TextEditingController();
TextEditingController nameCTRL = new TextEditingController();
TextEditingController dateCTRL = new TextEditingController();
final _form = GlobalKey<FormState>();
bool isInit = true;
PackageFilterObject? filters;
@@ -47,6 +48,23 @@ class _PackageAddScreenState extends State<PackageAddScreen> {
(result) {
setState(
() {
// itemVals = [
// {'id': '', 'name-udi': ''}
// ];
// for (var item in result) {
// itemVals.add(item);
// packageProviderObject.itemVals = itemVals;
// }
// initialItemValue.text = itemVals[1]['name-udi'];
// packageProviderObject.initialItemValue = initialItemValue.text;
// itemVals.forEach(
// (item) {
// if (item['id'] == '') {
// selectedItemsCTRL.text = item['name']!;
// }
// },
// );
isInit = false;
},
);
@@ -215,6 +233,13 @@ class _PackageAddScreenState extends State<PackageAddScreen> {
initialItemValue:
packageProvider.initialItemValue,
index: index,
filteredItems:
packageProvider.filteredItems!,
hasRemoveButton:
packageProvider.itemValues.length >
1
? true
: false,
),
itemCount:
packageProvider.itemValues.length,
+10 -6
View File
@@ -1,3 +1,4 @@
import 'package:cssd/config/routes.dart';
import 'package:cssd/models/package_model.dart';
import 'package:cssd/providers/packages.dart';
import 'package:cssd/widgets/PackageScreens/Details/package_detail_box.dart';
@@ -8,12 +9,6 @@ import '../../providers/connectivity.dart';
import '../../widgets/Global/internet_error.dart';
class PackageDetailScreen extends StatefulWidget {
final String? testResultId;
PackageDetailScreen({
this.testResultId,
});
@override
_PackageDetailScreenState createState() => _PackageDetailScreenState();
}
@@ -80,6 +75,15 @@ class _PackageDetailScreenState extends State<PackageDetailScreen> {
: PackageDetailsDataBox(
datas: datas!,
deviceBlockSize: _deviceBlockSize,
goToAddLabelPage: () {
Navigator.pushNamed(
context,
Routes.labelAddScreen,
arguments: {
"id": datas!.id,
},
);
},
)
: ConnectionErrorBox();
},
View File
View File
View File
View File
+16 -8
View File
@@ -11,7 +11,6 @@ import '../../widgets/Global/internet_error.dart';
import '../../widgets/TestResultScreens/Add/selector_box.dart';
class TestResultAddScreen extends StatefulWidget {
// static const route = '/TestResultAddScreen';
@override
State<StatefulWidget> createState() {
return _TestResultAddScreenState();
@@ -29,6 +28,7 @@ class _TestResultAddScreenState extends State<TestResultAddScreen> {
if (isInit) {
var testResultProviderObject =
Provider.of<TestResultsProvider>(context, listen: false);
testResultProviderObject.resetTests();
testResultProviderObject.getFilterItems().then((result) {
for (var testType in result[1].keys) {
testTypeVals.add(testType);
@@ -128,6 +128,10 @@ class _TestResultAddScreenState extends State<TestResultAddScreen> {
} else if (result == 'access') {
print('access');
} else {
Provider.of<TestResultsProvider>(
context,
listen: false,
).testCode = result;
Navigator.pushNamed(
context,
Routes.formTestResultScreen,
@@ -174,14 +178,18 @@ class _TestResultAddScreenState extends State<TestResultAddScreen> {
child: TextFormField(
onChanged: (val) {
if (val != '') {
setState(() {
testTypeCTRL.text = '';
});
setState(
() {
testTypeCTRL.text = '';
},
);
} else {
setState(() {
testTypeCTRL.text =
testTypeVals[0];
});
setState(
() {
testTypeCTRL.text =
testTypeVals[0];
},
);
}
},
controller: testCodeCTRL,
View File
View File
+24 -22
View File
@@ -41,28 +41,30 @@ class _FormPageState extends State<FormPage> {
setState(() {
_isLoading = true;
});
prvObject.createTestResult(values, batchId).then((result) {
setState(() {
_isLoading = false;
});
if (result == 'done') {
showDialog(
context: context,
builder: (ctx) => AlertDialog(
content: Text('Test added.'),
actions: <Widget>[
TextButton(
onPressed: () {
Navigator.of(ctx).pop();
},
child: Text('Ok'),
)
],
),
).then((value) =>
Navigator.of(context).popAndPushNamed(Routes.testResultScreen));
}
});
prvObject.createTestResult(values, batchId).then(
(result) {
setState(() {
_isLoading = false;
});
if (result == 'done') {
showDialog(
context: context,
builder: (ctx) => AlertDialog(
content: Text('Test added.'),
actions: <Widget>[
TextButton(
onPressed: () {
Navigator.of(ctx).pop();
},
child: Text('Ok'),
)
],
),
).then((value) =>
Navigator.of(context).popAndPushNamed(Routes.testResultScreen));
}
},
);
}
}
View File
View File
View File
Regular → Executable
+36 -40
View File
@@ -183,26 +183,24 @@ class HomePage extends StatelessWidget {
Divider(
height: 2,
),
userData['roles']?.contains('User') ?? false
? Container()
: SelectionItem(
firstLine: 'PACKAGES',
secondLine: 'List, Details & Add a one',
firstLineColor: kPurple,
secondLineColor: kPurpleSub,
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return Consumer<Auth>(
builder: (ctx, auth, _) {
return PackageResultScreen();
},
);
},
),
),
),
SelectionItem(
firstLine: 'PACKAGES',
secondLine: 'List, Details & Add a one',
firstLineColor: kPurple,
secondLineColor: kPurpleSub,
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return Consumer<Auth>(
builder: (ctx, auth, _) {
return PackageResultScreen();
},
);
},
),
),
),
SelectionItem(
firstLine: 'MY PACKAGES',
secondLine: 'The Package that i possess',
@@ -224,26 +222,24 @@ class HomePage extends StatelessWidget {
Divider(
height: 2,
),
userData['roles']?.contains('User') ?? false
? Container()
: SelectionItem(
firstLine: 'ITEMS',
secondLine: 'List, Details & Add a one',
firstLineColor: kBlue,
secondLineColor: kBlueSub,
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return Consumer<Auth>(
builder: (ctx, auth, _) {
return ItemResultScreen();
},
);
},
),
),
),
SelectionItem(
firstLine: 'ITEMS',
secondLine: 'List, Details & Add a one',
firstLineColor: kBlue,
secondLineColor: kBlueSub,
onTap: () => Navigator.push(
context,
MaterialPageRoute(
builder: (context) {
return Consumer<Auth>(
builder: (ctx, auth, _) {
return ItemResultScreen();
},
);
},
),
),
),
SelectionItem(
firstLine: 'MY ITEMS',
secondLine: 'The Items that i possess',
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
View File
Regular → Executable
+8
View File
@@ -28,6 +28,14 @@ class CyclesProvider extends ChangeNotifier {
notifyListeners();
}
removeLabelVal() {
curLabelVal -= 1;
TextEditingController lbl = new TextEditingController();
lbl.text = initialLabelValue;
labelValues.removeLast();
notifyListeners();
}
changeLabelVal(String value, int index) {
labelValues[index].text = value;
notifyListeners();
Regular → Executable
View File
Regular → Executable
+20 -5
View File
@@ -93,13 +93,13 @@ class ItemProvider extends ChangeNotifier {
Future<String> addImage(String batchId, dynamic file, String fileName) async {
var imageListInt = file.cast<int>();
var dio = Dio();
var dio = new Dio();
dio.options.headers = {
'Authorization': User.token,
'X-Requested-With': 'XMLHttpRequest',
'Content-Type': 'application/json',
};
FormData formData = FormData.fromMap(
FormData formData = new FormData.fromMap(
{
"batch_id": batchId,
'model_type': 'Item',
@@ -111,6 +111,10 @@ class ItemProvider extends ChangeNotifier {
Url.addImage,
data: formData,
);
// print(response.statusCode);
// print(response.statusMessage);
// print(response.data);
return 'Added';
}
@@ -122,7 +126,7 @@ class ItemProvider extends ChangeNotifier {
note,
batchId,
) async {
batchId = randomString(10);
final batchId = randomString(10);
for (var image in catchImages) {
await addImage(batchId, image.bytes, image.path!);
@@ -264,12 +268,12 @@ class ItemProvider extends ChangeNotifier {
},
);
var testResultData = json.decode(response.body);
var itemsData = json.decode(response.body);
if (pageNumber == 1) {
originalItems = [];
}
for (var item in testResultData['data']['data']) {
for (var item in itemsData['data']['data']) {
originalItems!.add(
ItemResultObject(
name: item['name'],
@@ -345,4 +349,15 @@ class ItemProvider extends ChangeNotifier {
return false;
}
}
Future<bool> exportItems() async {
var response = await http.get(
Uri.parse(
Url.exportItems,
),
headers: {'Authorization': User.token},
);
print(response.body);
return true;
}
}
Regular → Executable
+10 -8
View File
@@ -14,23 +14,25 @@ class LabelsProvider extends ChangeNotifier {
List<String> packageVals = [];
List<TextEditingController> packageValues = [];
String initialPackageValue = '';
String? packageId;
int curPackageVal = 1;
resetPackageVals() {
packageVals = [];
packageValues = [];
initialPackageValue = '';
packageId = null;
curPackageVal = 1;
// notifyListeners();
}
addPackageVal() {
curPackageVal += 1;
TextEditingController lbl = new TextEditingController();
lbl.text = initialPackageValue;
packageValues.add(lbl);
notifyListeners();
}
// addPackageVal() {
// curPackageVal += 1;
// TextEditingController lbl = new TextEditingController();
// lbl.text = initialPackageValue;
// packageValues.add(lbl);
// notifyListeners();
// }
changePackageVal(String value, int index) {
packageValues[index].text = value;
@@ -91,7 +93,7 @@ class LabelsProvider extends ChangeNotifier {
result.add(package['id'].toString());
}
packageVals = result;
initialPackageValue = packageVals[0];
initialPackageValue = packageId ?? packageVals[0];
TextEditingController newLbl = new TextEditingController();
newLbl.text = initialPackageValue;
packageValues.add(newLbl);
Regular → Executable
View File
Regular → Executable
+16 -24
View File
@@ -19,7 +19,7 @@ class MyItemProvider extends ChangeNotifier {
List<MyItemResultObject>? originalMyItemsRequests;
List<MyItemResultObject>? originalHospitalItemsRequests;
List<MyItemResultObject>? originalItemHistory;
List<ItemHistoryObject>? itemHistory;
MyItemFilterObject? filters = MyItemFilterObject(
id: '',
@@ -120,7 +120,7 @@ class MyItemProvider extends ChangeNotifier {
originalMyItems = [];
}
for (var item in itemsData['data']) {
for (var item in itemsData['data']['data']) {
originalMyItems!.add(
MyItemResultObject(
name: item['name'],
@@ -157,15 +157,13 @@ class MyItemProvider extends ChangeNotifier {
headers: {'Authorization': User.token, "Accept": "application/json"},
);
print(response.body);
var itemsData = json.decode(response.body);
if (pageNumber == 1) {
originalHospitalItems = [];
}
for (var item in itemsData['data']) {
for (var item in itemsData['data']['data']) {
originalHospitalItems!.add(
MyItemResultObject(
name: item['name'],
@@ -188,28 +186,22 @@ class MyItemProvider extends ChangeNotifier {
var itemsData = json.decode(response.body)['data'];
String fromDate = '';
String toDate = '';
String userHistory = '';
itemHistory = [];
for (var transfer in itemsData['transfers']) {
fromDate =
transfer['from_date'] != null ? transfer['from_date'].toString() : '';
toDate =
transfer['to_date'] != null ? transfer['to_date'].toString() : '';
userHistory = transfer['user']['name'].toString();
}
if (itemsData.isNotEmpty) {
originalItemHistory!.add(
MyItemResultObject(
name: itemsData['name'],
id: itemsData['id'].toString(),
size: itemsData['size'].toString(),
fromDate: fromDate,
toDate: toDate,
userHistory: userHistory,
itemHistory!.add(
ItemHistoryObject(
fromDate: transfer['from_date'] != null
? transfer['from_date'].toString()
: '',
toDate: transfer['to_date'] != null
? transfer['to_date'].toString()
: 'Now',
userHistoryName: transfer['user']['name'].toString(),
userHistoryId: transfer['user']['id'].toString(),
userHistoryPhon: transfer['user']['cell_number'].toString(),
),
);
originalItemHistory!.reversed.toList();
}
}
Regular → Executable
+15 -20
View File
@@ -19,7 +19,7 @@ class MyPackageProvider extends ChangeNotifier {
List<MyPackageResultObject>? originalMyPackagesRequests;
List<MyPackageResultObject>? originalHospitalPackagesRequests;
List<MyPackageResultObject>? originalPackageHistory;
List<PackageHistoryObject>? packageHistory;
MyPackageFilterObject? filters = MyPackageFilterObject(
id: '',
@@ -210,29 +210,24 @@ class MyPackageProvider extends ChangeNotifier {
);
var packagesData = json.decode(response.body)['data'];
print(packagesData);
packageHistory = [];
String fromDate = '';
String toDate = '';
String userHistory = '';
for (var transfer in packagesData['transfers']) {
fromDate =
transfer['from_date'] != null ? transfer['from_date'].toString() : '';
toDate =
transfer['to_date'] != null ? transfer['to_date'].toString() : '';
userHistory = transfer['user']['name'].toString();
}
if (packagesData.isNotEmpty) {
originalPackageHistory!.add(
MyPackageResultObject(
name: packagesData['name'],
id: packagesData['id'].toString(),
createdAt: packagesData['created_at'].toString(),
fromDate: fromDate,
toDate: toDate,
userHistory: userHistory,
packageHistory!.add(
PackageHistoryObject(
fromDate: transfer['from_date'] != null
? transfer['from_date'].toString()
: '',
toDate: transfer['to_date'] != null
? transfer['to_date'].toString()
: 'Now',
userHistoryName: transfer['user']['name'].toString(),
userHistoryId: transfer['user']['id'].toString(),
userHistoryPhon: transfer['user']['cell_number'].toString(),
),
);
originalPackageHistory!.reversed.toList();
}
}
Regular → Executable
+39 -2
View File
@@ -1,5 +1,6 @@
import 'dart:convert';
import 'package:cssd/models/item_model.dart';
import 'package:cssd/models/package_model.dart';
import '../config/urls.dart';
@@ -8,7 +9,10 @@ import 'package:flutter/material.dart';
import 'package:http/http.dart' as http;
class PackageProvider extends ChangeNotifier {
List<ItemResultObject>? filteredItems;
// List<Map<String, dynamic>> itemVals = [];
List<String> itemVals = [];
List<TextEditingController> itemValues = [];
String initialItemValue = '';
int curItemVal = 1;
@@ -18,7 +22,6 @@ class PackageProvider extends ChangeNotifier {
itemValues = [];
initialItemValue = '';
curItemVal = 1;
// notifyListeners();
}
addItemVal() {
@@ -29,11 +32,28 @@ class PackageProvider extends ChangeNotifier {
notifyListeners();
}
removeItemVal() {
curItemVal -= 1;
TextEditingController lbl = new TextEditingController();
lbl.text = initialItemValue;
itemValues.removeLast();
notifyListeners();
}
changeItemVal(String value, int index) {
itemValues[index].text = value;
notifyListeners();
}
changeItemValByScan(String value, int index) {
for (var item in filteredItems!) {
if (item.udi == value) {
itemValues[index].text = item.id;
}
}
notifyListeners();
}
String searchBoxValue = '';
bool filterOn = false;
List<PackageResultObject>? items;
@@ -84,11 +104,28 @@ class PackageProvider extends ChangeNotifier {
'Authorization': User.token,
},
);
// List<Map<String, dynamic>> result = [];
List<String> result = [];
filteredItems = [];
var filterData = json.decode(response.body);
for (var item in filterData['data']) {
// result.add("${item['name']} - ${item['udi'] != null ? item['udi'] : ''}");
result.add(item['id'].toString());
// result.add({
// 'name-udi':
// "${item['name']} - ${item['udi'] != null ? item['udi'] : ''}",
// 'id': item['id'].toString()
// });
filteredItems!.add(
ItemResultObject(
name: item['name'],
id: item['id'].toString(),
size: item['size'].toString(),
userName: item['user'] != null ? item['user']['name'] : '',
status: item['status'],
udi: item['udi'] != null ? item['udi'] : '',
),
);
}
itemVals = result;
initialItemValue = itemVals[0];
@@ -105,7 +142,7 @@ class PackageProvider extends ChangeNotifier {
items,
note,
) async {
List<Map<String, Object>> itms = [];
List<Map<String, dynamic>> itms = [];
for (var item in items) {
itms.add({'id': item});
}
Regular → Executable
+5
View File
@@ -19,6 +19,11 @@ class TestResultsProvider with ChangeNotifier {
String testType = '';
String testCode = '';
resetTests() {
testCode = '';
testType = '';
}
setImages() async {
images = [];
for (var image in catchImages) {
Regular → Executable
+4
View File
@@ -36,6 +36,10 @@ class UsersProvider extends ChangeNotifier {
notifyListeners();
}
void resetSelectedUser() {
selectedUserIndex = null;
}
void searchUsers(String value) {
usersBox = [];
searchBoxValue = value;
Regular → Executable
View File
+128 -103
View File
@@ -15,6 +15,7 @@ class AddLabelBox extends StatelessWidget {
required this.index,
required this.text,
this.iconColor,
required this.hasRemoveButton,
}) : _deviceBlockSize = deviceBlockSize,
super(key: key);
@@ -25,6 +26,7 @@ class AddLabelBox extends StatelessWidget {
final int index;
final String text;
final Color? iconColor;
final bool hasRemoveButton;
@override
Widget build(BuildContext context) {
@@ -67,119 +69,120 @@ class AddLabelBox extends StatelessWidget {
Expanded(
// width: MediaQuery.of(context).size.width - 70,
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: <Widget>[
SizedBox(
width: _deviceBlockSize,
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Row(
children: <Widget>[
SizedBox(
width: _deviceBlockSize,
),
Text(
text,
style: TextStyle(
fontSize: 3.5 * _deviceBlockSize,
color: Colors.grey,
fontWeight: FontWeight.w100,
),
Text(
text,
style: TextStyle(
fontSize: 3.5 * _deviceBlockSize,
color: Colors.grey,
fontWeight: FontWeight.w100,
),
],
),
Row(
children: <Widget>[
Container(
width: MediaQuery.of(context).size.width -
(40 * _deviceBlockSize),
// height: 30,
child: DropdownButtonFormField(
decoration: InputDecoration(
contentPadding: EdgeInsets.only(
left: _deviceBlockSize,
),
border: InputBorder.none,
),
),
],
),
Row(
children: <Widget>[
Container(
width: MediaQuery.of(context).size.width -
(40 * _deviceBlockSize),
// height: 30,
child: DropdownButtonFormField(
decoration: InputDecoration(
contentPadding: EdgeInsets.only(
left: _deviceBlockSize,
iconSize: 7 * _deviceBlockSize,
icon: Icon(
FontAwesomeIcons.angleDown,
color: Colors.black,
),
isExpanded: true,
hint: Container(
// width: 100,
height: 70,
padding:
const EdgeInsets.symmetric(horizontal: 0),
child: TextFormField(
controller: values,
decoration: InputDecoration(
contentPadding: EdgeInsets.only(
bottom: 12,
),
isDense: true,
),
border: InputBorder.none,
),
iconSize: 7 * _deviceBlockSize,
icon: Icon(
FontAwesomeIcons.angleDown,
color: Colors.black,
),
isExpanded: true,
hint: Container(
// width: 100,
height: 70,
padding: const EdgeInsets.symmetric(
horizontal: 0),
child: TextFormField(
controller: values,
decoration: InputDecoration(
contentPadding: EdgeInsets.only(
bottom: 12,
),
isDense: true,
),
style: TextStyle(
fontWeight: FontWeight.w700,
color: Colors.black,
fontSize: 5 * _deviceBlockSize,
),
style: TextStyle(
fontWeight: FontWeight.w700,
color: Colors.black,
fontSize: 5 * _deviceBlockSize,
),
),
isDense: true,
items: vals.map((val) {
return new DropdownMenuItem<String>(
value: val,
child: Container(
child: Text(
val,
style: TextStyle(
fontSize: 4 * _deviceBlockSize,
),
),
isDense: true,
items: vals.map((val) {
return new DropdownMenuItem<String>(
value: val,
child: Container(
child: Text(
val,
style: TextStyle(
fontSize: 4 * _deviceBlockSize,
),
),
);
}).toList(),
onChanged: (val) {
Provider.of<CyclesProvider>(context,
listen: false)
.changeLabelVal(val!, index);
},
),
),
Spacer(),
InkWell(
onTap: () {
scan().then(
(String result) {
if (result == 'cancel') {
print('cancel');
} else if (result == 'error') {
print('error');
} else if (result == 'access') {
print('access');
} else {
print(result);
Provider.of<CyclesProvider>(context,
listen: false)
.changeLabelVal(result, index);
}
},
),
);
}).toList(),
onChanged: (val) {
Provider.of<CyclesProvider>(context,
listen: false)
.changeLabelVal(val!, index);
},
child: Container(
padding: EdgeInsets.all(8),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.black,
),
child: Icon(
Icons.qr_code_scanner,
size: 5 * _deviceBlockSize,
color: Colors.white,
),
),
),
Spacer(),
InkWell(
onTap: () {
scan().then(
(String result) {
if (result == 'cancel') {
print('cancel');
} else if (result == 'error') {
print('error');
} else if (result == 'access') {
print('access');
} else {
print(result);
Provider.of<CyclesProvider>(context,
listen: false)
.changeLabelVal(result, index);
}
},
);
},
child: Container(
padding: EdgeInsets.all(8),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: Colors.black,
),
)
],
),
]),
child: Icon(
Icons.qr_code_scanner,
size: 5 * _deviceBlockSize,
color: Colors.white,
),
),
)
],
),
],
),
),
],
),
@@ -206,6 +209,28 @@ class AddLabelBox extends StatelessWidget {
),
),
),
if (hasRemoveButton)
Positioned(
bottom: 15,
right: 50,
child: InkWell(
onTap: () {
Provider.of<CyclesProvider>(context, listen: false)
.removeLabelVal();
},
child: Container(
padding: EdgeInsets.all(3),
decoration: BoxDecoration(
shape: BoxShape.circle,
color: iconColor,
),
child: Icon(
Icons.remove,
color: Colors.white,
),
),
),
),
],
),
);
View File
View File
View File
View File
View File
View File
View File
View File
View File
View File
+3 -1
View File
@@ -9,6 +9,7 @@ class ResultSearchBox extends StatelessWidget {
required this.text,
required this.onChanged,
this.text2 = 'ID',
this.textInputType = TextInputType.number,
}) : _deviceBlockSize = deviceBlockSize,
super(key: key);
@@ -17,6 +18,7 @@ class ResultSearchBox extends StatelessWidget {
final String text;
final String text2;
final dynamic onChanged;
final TextInputType textInputType;
@override
Widget build(BuildContext context) {
@@ -43,7 +45,7 @@ class ResultSearchBox extends StatelessWidget {
fontWeight: FontWeight.w700,
fontSize: 5 * _deviceBlockSize,
),
keyboardType: TextInputType.number,
keyboardType: textInputType,
);
}
}
Regular → Executable
+56 -65
View File
@@ -24,7 +24,6 @@ class _AppDrawerState extends State<AppDrawer> {
@override
Widget build(BuildContext context) {
final userData = Provider.of<Auth>(context, listen: false).user;
return SafeArea(
child: SizedBox(
width: 250,
@@ -193,39 +192,35 @@ class _AppDrawerState extends State<AppDrawer> {
),
),
),
userData['roles']?.contains('User') ?? false
? Container()
: InkWell(
onTap: () {
Navigator.of(context)
.pushNamed(Routes.packageResultScreen);
},
child: Container(
padding:
EdgeInsets.symmetric(vertical: 5, horizontal: 15),
margin: EdgeInsets.only(top: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
),
child: Row(
children: <Widget>[
Icon(
Icons.all_inbox_rounded,
color: Colors.white,
),
SizedBox(
width: 10,
),
Text(
'Packages',
style: TextStyle(
color: Colors.white,
),
)
],
),
InkWell(
onTap: () {
Navigator.of(context).pushNamed(Routes.packageResultScreen);
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 5, horizontal: 15),
margin: EdgeInsets.only(top: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
),
child: Row(
children: <Widget>[
Icon(
Icons.all_inbox_rounded,
color: Colors.white,
),
),
SizedBox(
width: 10,
),
Text(
'Packages',
style: TextStyle(
color: Colors.white,
),
)
],
),
),
),
InkWell(
onTap: () {
Navigator.of(context)
@@ -256,39 +251,35 @@ class _AppDrawerState extends State<AppDrawer> {
),
),
),
userData['roles']?.contains('User') ?? false
? Container()
: InkWell(
onTap: () {
Navigator.of(context)
.pushNamed(Routes.itemResultScreen);
},
child: Container(
padding:
EdgeInsets.symmetric(vertical: 5, horizontal: 15),
margin: EdgeInsets.only(top: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
),
child: Row(
children: <Widget>[
Icon(
Icons.book,
color: Colors.white,
),
SizedBox(
width: 10,
),
Text(
'Items',
style: TextStyle(
color: Colors.white,
),
)
],
),
InkWell(
onTap: () {
Navigator.of(context).pushNamed(Routes.itemResultScreen);
},
child: Container(
padding: EdgeInsets.symmetric(vertical: 5, horizontal: 15),
margin: EdgeInsets.only(top: 10),
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(5),
),
child: Row(
children: <Widget>[
Icon(
Icons.book,
color: Colors.white,
),
),
SizedBox(
width: 10,
),
Text(
'Items',
style: TextStyle(
color: Colors.white,
),
)
],
),
),
),
InkWell(
onTap: () {
Navigator.of(context).pushNamed(Routes.myItemsResultScreen);
View File
View File
View File
View File
View File
View File
+38 -11
View File
@@ -1,10 +1,14 @@
import 'package:cssd/config/routes.dart';
// ignore_for_file: invalid_use_of_visible_for_testing_member, deprecated_member_use
import 'dart:io';
import 'package:cssd/providers/items.dart';
import 'package:file_picker/file_picker.dart';
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:provider/provider.dart';
class UploaderImage extends StatelessWidget {
class UploaderImage extends StatefulWidget {
final double deviceBlockSize;
final ItemProvider providerObject;
const UploaderImage({
@@ -13,6 +17,11 @@ class UploaderImage extends StatelessWidget {
required this.providerObject,
});
@override
State<UploaderImage> createState() => _UploaderImageState();
}
class _UploaderImageState extends State<UploaderImage> {
@override
Widget build(BuildContext context) {
return Container(
@@ -24,18 +33,18 @@ class UploaderImage extends StatelessWidget {
children: <Widget>[
Container(
margin: EdgeInsets.only(top: 20),
height: providerObject.catchImages.length != 0 ? 60 : 0,
height: widget.providerObject.catchImages.length != 0 ? 60 : 0,
child: ImageBox(
deviceBlockSize: deviceBlockSize,
itemProvider: providerObject,
deviceBlockSize: widget.deviceBlockSize,
itemProvider: widget.providerObject,
),
),
SizedBox(
height: providerObject.catchImages.length != 0 ? 10 : 0,
height: widget.providerObject.catchImages.length != 0 ? 10 : 0,
),
InkWell(
onTap: () async {
await loadAssets(context);
await loadAssetsFromFilePicker(context);
},
child: Container(
width: MediaQuery.of(context).size.width - 40,
@@ -57,9 +66,7 @@ class UploaderImage extends StatelessWidget {
),
InkWell(
onTap: () async {
await Navigator.of(context)
.pushNamed(Routes.captureImageScreen);
// await captureImage(context);
await loadAssetsFromCamera(context);
},
child: Container(
width: MediaQuery.of(context).size.width - 40,
@@ -82,7 +89,7 @@ class UploaderImage extends StatelessWidget {
);
}
Future<void> loadAssets(BuildContext context) async {
Future<void> loadAssetsFromFilePicker(BuildContext context) async {
var providerObject = Provider.of<ItemProvider>(context, listen: false);
List<PlatformFile> files = providerObject.catchImages;
try {
@@ -98,6 +105,26 @@ class UploaderImage extends StatelessWidget {
providerObject.setCatchImages(files);
providerObject.setImages();
}
Future<void> loadAssetsFromCamera(BuildContext context) async {
var providerObject = Provider.of<ItemProvider>(context, listen: false);
List<PlatformFile> _catchImages = [];
var image = await ImagePicker.platform.pickImage(
source: ImageSource.camera,
);
if (image != null) {
_catchImages.add(
PlatformFile(
path: image.path,
name: "item_image",
bytes: File(image.path).readAsBytesSync(),
size: File(image.path).lengthSync(),
),
);
providerObject.setCatchImages(_catchImages);
providerObject.setImages();
}
}
}
class ImageBox extends StatelessWidget {

Some files were not shown because too many files have changed in this diff Show More