Untitled
unknown
plain_text
3 years ago
25 kB
7
Indexable
import 'dart:async';
import 'dart:io';
import 'package:ceramic_quotation/app/constant/app_string.dart';
import 'package:ceramic_quotation/app/database/database_service.dart';
import 'package:ceramic_quotation/app/model/product_model/product_model.dart';
import 'package:ceramic_quotation/app/model/product_model/product_request_model.dart';
import 'package:ceramic_quotation/app/modules/product/product_service/product_service.dart';
import 'package:ceramic_quotation/app/utils/app_prefrence.dart';
import 'package:dio/dio.dart';
import 'package:file_picker/file_picker.dart';
import 'package:filesystem_picker/filesystem_picker.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart' hide FormData, MultipartFile;
import 'package:path_provider/path_provider.dart';
import '../../../model/sorting_model/product_sorting_model.dart';
import '../../../utils/utils.dart';
class ProductController extends GetxController {
final TextEditingController mrp = TextEditingController();
final TextEditingController productId = TextEditingController();
final TextEditingController skycode = TextEditingController();
final TextEditingController name = TextEditingController();
final DatabaseService databaseService = getIt.get<DatabaseService>();
Dio dio = Dio();
String? dirPath;
File? file;
double progress = 0;
var dataList = [];
var createPath;
List<ProductModel> dataListValue = [];
int? sortColumnIndex;
ProductModel? productModel = ProductModel();
List<ProductData>? productData;
bool isSelected = false;
List<bool>? checkBoxValues;
List<ProductData> itemAddList = [];
List<ProductData> newItemAddList = [];
bool closeDialog = true;
double totalAmouint = 0;
bool sortAscending = true;
Directory? root = Platform.isMacOS
? Directory("/Users/imac/")
: Directory("/storage/emulated/0/");
List<FileSystemEntity>? imageList;
filterImage() async {
imageList =
Directory(AppPreference.getString("folder_path") ?? "").listSync(
recursive: true,
);
return imageList;
}
sum(double mrp, double qty, int index) {
var qAmt = mrp * qty;
itemAddList[index].gAmt = qAmt;
update();
return qAmt;
}
double? Disc({
required double mrp,
required double dis_per,
required int index,
}) {
double discountAmt = mrp * (dis_per) / 100;
itemAddList[index].nAmt = (double.parse(mrp.toString()) - discountAmt);
update();
return itemAddList[index].nAmt;
}
startTimer() {
new Timer.periodic(
Duration(seconds: 2),
(Timer timer) {
if (progress == 1) {
timer.cancel();
Get.back();
getProduct();
} else {
progress += 0.2;
}
update();
},
);
}
Future<String> createFolders(String cow) async {
final dir = Directory((Platform.isMacOS
? await getApplicationSupportDirectory()
: Platform.isAndroid
? await getExternalStorageDirectory()
: await getApplicationSupportDirectory())!
.path +
'/$cow');
dirPath = dir.path;
AppPreference.set("folder_path", "${dir.path}/");
if ((await dir.exists())) {
print(AppString.alreadyExist + dir.absolute.path);
return dir.path;
} else {
dir.create();
print(AppString.createFolder + dir.path);
return dir.path;
}
}
folderPicker(BuildContext context) async {
final path = await FilesystemPicker.open(
title: AppString.saveFolder,
context: context,
rootDirectory: root!,
fsType: FilesystemType.folder,
pickText: AppString.pickText,
);
if (path == null) return;
if (path != null) {
try {
dataList = Directory(path).listSync().map((e) => e.path).toList();
for (int i = 0; i < dataList.length; i++) {
var file = await moveFile(
File(dataList[i]),
"${dirPath!}/${File(dataList[i]).path.split("/").last}",
);
}
} catch (e) {}
}
print(path);
}
Future<File> moveFile(File sourceFile, String newPath) async {
try {
return await sourceFile.rename(newPath);
} catch (e) {
final newFile = await sourceFile.copy(newPath);
await sourceFile.delete();
return newFile;
}
}
void ExcelFileUpload() async {
final result = await FilePicker.platform.pickFiles(
allowMultiple: false,
type: FileType.any,
allowedExtensions: [
'xls',
'xlsx',
],
);
if (result == null) return;
if (result != null) {
file = File(result.files.first.path!);
ProductService().getUpload(file!);
}
}
getProduct() async {
final getData = await ProductService().getRequest();
newItemAddList = getData!.data ?? [];
if (getData.data != null && getData.data!.isNotEmpty) {
databaseService.saveProduct(getData.data ?? []);
}
update();
runFilter("");
return productModel;
}
getDataFromDatabase() async {
final data = await databaseService.getProductData();
newItemAddList = data;
productModel!.data = newItemAddList;
update();
}
void sorting<T>(
Comparable<T> Function(Dessert d) getField,
int columnIndex,
bool ascending,
) {
sortColumnIndex = columnIndex;
sortAscending = ascending;
update();
}
@override
onInit() async {
filterImage();
// await getProduct();
await getDataFromDatabase();
itemAddList.add(ProductData(
isSelected: true,
isactive: "",
id: "",
company: "",
category: "",
skycode: "",
name: "",
hsn: "",
description: "",
mrp: "",
v: 0,
));
super.onInit();
}
getDataUpdate(
ProductUpdateRequestModel? productUpdateRequestModel,
context,
) async {
productModel = await ProductService()
.productUpdate(productUpdateRequestModel, context);
update();
getProduct();
return productModel;
}
runFilter(String enteredKeyword) {
productData = enteredKeyword.isEmpty
? productModel!.data
: productModel!.data!
.where((element) => element.skycode!
.toLowerCase()
.contains(enteredKeyword.toLowerCase()))
.toList();
update();
}
selectAllValue(bool value) {
isSelected = value;
newItemAddList.forEach((element) {
if (isSelected) {
element.isSelected = isSelected;
} else {
element.isSelected = isSelected;
}
});
update();
}
}
Expanded(
child: Padding(
padding: const EdgeInsets.only(
top: 5, left: 20, right: 10),
child: GetBuilder<ProductController>(
init: ProductController(),
builder: (productController) {
return productController.productData != null &&
productController.productData!.isEmpty
? Center(
child: CircularProgressIndicator(),
)
: TableScreen(
sortAscending: addQuatationController
.sortAscending,
sortColumnIndex: addQuatationController
.sortColumnIndex,
sortingTap: (index, ascending) {
addQuatationController.sorting(
(d) => d.name,
index,
ascending,
);
},
dataColumnOne: AppString.area,
dataColumnTwo: AppString.skuCode,
dataColumnThree: AppString.image,
dataColumnFour: AppString.description,
dataColumnFive: AppString.mrp,
dataColumnSix: AppString.qty,
dataColumnSeven: AppString.gamut,
dataColumnEight: AppString.disc,
dataColumnNine: AppString.netAmt,
dataColumnSizeSix: ColumnSize.S,
dataColumnSizeFour: ColumnSize.M,
dataColumnSizeSeven: ColumnSize.S,
dataColumnSizeNine: ColumnSize.S,
dataColumnSizeEight: ColumnSize.S,
rows: List.generate(
productController.itemAddList.length,
(index) {
productController
.itemAddList[index]
.mrpController
.text = productController
.itemAddList[index].mrp ??
0.toString();
return DataRow(
cells: [
///Area
DataCell(TextField(
controller:
TextEditingController(
text: productController
.itemAddList[index]
.areaController
.text,
),
onChanged: (val) {
productController
.itemAddList[index]
.areaController
.text = val;
},
style: Get.theme.textTheme
.displayLarge,
)),
///SKU code
DataCell(TextField(
readOnly: true,
onTap: () async {
List<ProductData>?
response =
await itemSelectList(
context,
);
if (response != null &&
response.isNotEmpty) {
productController
.itemAddList
.removeAt(
productController
.itemAddList
.length -
1,
);
productController
.itemAddList
.addAll(response);
productController
.itemAddList
.add(ProductData());
productController
.update();
}
},
controller:
TextEditingController(
text: productController
.itemAddList[index]
.skycode,
),
style: Get.theme.textTheme
.displayLarge!
.copyWith(
color: Colors.red),
)),
///Images
DataCell(
SizedBox(
height: 120,
child: Image.file(
File(
productController
.itemAddList[
index]
.img ??
AppImagePath
.emtyImg,
),
height: 80,
width: 80,
),
),
),
///Description
DataCell(TextField(
readOnly: true,
controller:
TextEditingController(
text: productController
.itemAddList[index]
.category,
),
style: Get.theme.textTheme
.displayLarge,
)),
/// Mrp
DataCell(
TextField(
controller: productController
.itemAddList[
index]
.mrpController
.text ==
"0"
? TextEditingController()
: productController
.itemAddList[index]
.mrpController,
onChanged: (val) {
productController
.itemAddList[index]
.mrp = val;
},
style: Get.theme.textTheme
.displayLarge,
),
),
/// qty
DataCell(TextField(
onChanged: (value) {
productController
.itemAddList[index]
.qtyController
.text = value;
productController
.itemAddList[index]
.qtyController
.selection =
TextSelection
.fromPosition(
TextPosition(
offset:
productController
.itemAddList[
index]
.qtyController
.text
.length,
),
);
productController.sum(
double.parse(
productController
.itemAddList[index]
.mrpController
.text,
),
double.parse(value),
index,
);
},
controller: productController
.itemAddList[index]
.qtyController,
style: Get.theme.textTheme
.displayLarge,
)),
///GAmt
DataCell(TextField(
readOnly: true,
controller:
TextEditingController(
text: (productController
.itemAddList[
index]
.gAmt ??
productController
.itemAddList[
index]
.mrp ??
'')
.toString(),
),
style: Get.theme.textTheme
.displayLarge,
)),
/// Discount
DataCell(TextField(
onChanged: (value) {
productController
.itemAddList[index]
.dis = double.parse(
value.toString(),
);
productController
.itemAddList[index]
.nAmt =
productController.Disc(
dis_per: double.parse(
value ?? '0',
),
mrp: double.parse(
productController
.itemAddList[index]
.gAmt
.toString(),
),
index: index,
);
},
controller: productController
.itemAddList[index]
.discController,
style: Get.theme.textTheme
.displayLarge,
)),
///net Amount
DataCell(TextField(
readOnly: true,
controller:
TextEditingController(
text: (productController
.itemAddList[
index]
.nAmt ??
productController
.itemAddList[
index]
.mrp ??
'')
.toString(),
),
style: Get.theme.textTheme
.displayLarge,
)),
],
);
},
),
);
},
),
),
),Editor is loading...