Untitled
unknown
plain_text
2 years ago
144 kB
5
Indexable
/// data BASE import 'dart:io'; import 'package:ceramic_quotation/app/model/account_model/account_model.dart'; import 'package:ceramic_quotation/app/model/quatation_model/quatation_model.dart'; import 'package:flutter/material.dart'; import 'package:path/path.dart'; import 'package:path_provider/path_provider.dart'; import 'package:sqflite/sqflite.dart'; import 'package:sqflite_common_ffi/sqflite_ffi.dart'; import '../model/product_model/product_model.dart'; class DatabaseService { Database? db; DatabaseService() { init(); } /// init() => database initialize init() async { try { await open('products.db'); } catch (error) { debugPrint('Error opening the database'); } } Future open(String path) async { sqfliteFfiInit(); Directory documentDirectory = await getApplicationDocumentsDirectory(); String joinPath = join(documentDirectory.path, path); /* db = await openDatabase( join(documentDirectory.path, path), version: 1, onCreate: (Database dataBase, int version) async { db = dataBase; await createTables(); }, );*/ var databaseFactory = databaseFactoryFfi; db = await databaseFactory.openDatabase( joinPath, options: OpenDatabaseOptions( // join(documentDirectory.path, path), version: 1, onCreate: (Database dataBase, int version) async { db = dataBase; await createTables(); }, ), ); } createTables() async { if (db == null) { await init(); } try { await db?.execute('''CREATE TABLE IF NOT EXISTS productData ( _id TEXT PRIMARY KEY, companay TEXT, category TEXT, skycode TEXT, name TEXT, hsn TEXT, description TEXT, mrp TEXT, __v INTEGER, img TEXT )'''); } catch (error) { debugPrint("promotions=====>$error"); } try { await db?.execute('''CREATE TABLE IF NOT EXISTS accountData ( _id TEXT PRIMARY KEY, name TEXT, alias TEXT, accounttype TEXT, address TEXT, city TEXT, district TEXT, mobile TEXT, __v INTEGER, email TEXT, pin TEXT, state TEXT )'''); } catch (error) { debugPrint("promotions=====>$error"); } try { await db?.execute('''CREATE TABLE IF NOT EXISTS quatationData ( _id TEXT PRIMARY KEY, jno TEXT, party TEXT, email TEXT, contractor TEXT, billqty TEXT, salesman TEXT, grossamt TEXT, netamt TEXT, overalldiscount TEXT, quatationformate TEXT, __v INTEGER )'''); } catch (error) { debugPrint("promotions=====>$error"); } } dynamic checkValue(val, {dynamic defaultValue}) { if (val != null) { return val; } return defaultValue; } /// saves all the promotions /// @param promotions promotions from the server Future<bool> saveProduct(List<ProductData> productData) async { if (productData.isNotEmpty) { for (var v in productData) { try { await db?.rawInsert( 'INSERT or IGNORE INTO productData (_id, companay, category, skycode, name, hsn, description, mrp, __v, img) VALUES (?,?,?,?,?,?,?,?,?,?)', [ v.id, checkValue(v.company), checkValue(v.category), checkValue(v.skycode), checkValue(v.name), checkValue(v.hsn), checkValue(v.description), checkValue(v.mrp), checkValue(v.v), checkValue(v.img, defaultValue: ''), ], ); } catch (error) { debugPrint('Error with database $error'); } } } return true; } Future<bool> saveAccount(List<AccountData> accountData) async { if (accountData.isNotEmpty) { for (var v in accountData) { try { await db?.rawInsert( 'INSERT or IGNORE INTO accountData (_id, name, alias, accounttype, address, city, district, mobile, __v, email, pin, state) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)', [ v.id, checkValue(v.name), checkValue(v.alias), checkValue(v.accounttype), checkValue(v.address), checkValue(v.city), checkValue(v.district), checkValue(v.mobile), checkValue(v.v), checkValue(v.email), checkValue(v.pin), checkValue(v.state), ], ); } catch (error) { debugPrint('Error with database $error'); } } } return true; } Future<bool> saveQuatationData(List<QuatationData> quatationData) async { if (quatationData.isNotEmpty) { for (var v in quatationData) { try { await db?.rawInsert( 'INSERT or IGNORE INTO quatationData (_id, jno, party, email, contractor, billqty, salesman, grossamt, netamt, overalldiscount, quatationformate, __v) VALUES (?,?,?,?,?,?,?,?,?,?,?,?)', [ v.id, checkValue(v.jno), checkValue(v.party), checkValue(v.email), checkValue(v.contractor), checkValue(v.billqty), checkValue(v.salesman), checkValue(v.grossamt), checkValue(v.netamt), checkValue(v.overalldiscount), checkValue(v.quatationformate), checkValue(v.v), ], ); } catch (error) { debugPrint('Error with database $error'); } } } return true; } Future<bool> accountUpdate(AccountData? accountData) async { int? rows = 0; if (accountData != null) { final v = accountData; print("is id ${v.id}"); try { rows = await db?.rawUpdate( 'UPDATE accountData set name=?, alias=?, accounttype=?, address=?, city=?, district=?, mobile=?, email=?, pin=?, state=? WHERE _id=?', [ checkValue(v.name), checkValue(v.alias), checkValue(v.accounttype), checkValue(v.address), checkValue(v.city), checkValue(v.district), checkValue(v.district), checkValue(v.mobile), checkValue(v.email), checkValue(v.pin), checkValue(v.state), v.id, ], ); print("Account data Update successfully =>>>>>>>>"); } catch (error) { debugPrint("RawUpdate is successfully ******** ===========>${error}"); } if (rows == 0) { try { await db?.rawInsert( 'INSERT INTO accountData (id, name, alias, accounttype, address, city, district, mobile, email, pin, state) VALUES (?,?,?,?,?,?,?,?,?,?,?)', [ checkValue(v.name), checkValue(v.alias), checkValue(v.accounttype), checkValue(v.address), checkValue(v.city), checkValue(v.district), checkValue(v.mobile), checkValue(v.email), checkValue(v.pin), checkValue(v.state), v.id, ], ); } catch (error) { debugPrint("RowInsert===========>${error}"); } } } return true; } Future<bool> clearAccountData(AccountData? accountData) async { int? rows = 0; if (accountData != null) { final v = accountData; print("is id ${v.id}"); try { rows = await db?.delete( 'accountData', where: '_id = ?', whereArgs: [v.id], ); print("Account data delete successfully =>>>>>>>>"); } catch (error) { debugPrint("RawUpdate is successfully ******** ===========>${error}"); } } return true; } getAccountData() async { try { List<Map<String, dynamic>> data = await db?.rawQuery('SELECT * FROM accountData ', []) ?? []; List<AccountData> accountDataCategory = <AccountData>[]; for (int i = 0; i < data.length; i++) { accountDataCategory.add(AccountData.fromJson(data[i])); } return accountDataCategory; } catch (e) { print("error ${e.toString()}"); } } getProductData() async { List<Map<String, dynamic>> data = await db?.rawQuery('SELECT * FROM productData ', []) ?? []; List<ProductData> category = <ProductData>[]; for (int i = 0; i < data.length; i++) { category.add(ProductData.fromJson(data[i])); } return category; } getQuatationData() async { List<Map<String, dynamic>> data = await db?.rawQuery('SELECT * FROM quatationData ', []) ?? []; List<QuatationData> quatationData = <QuatationData>[]; for (int i = 0; i < data.length; i++) { quatationData.add(QuatationData.fromJson(data[i])); } return quatationData; } /* Future<bool> accountUpdate(List<ProductData> productData) async { int? rows = 0; if (productData.isNotEmpty) { for (var v in productData) { try { rows = await db?.rawUpdate( 'UPDATE employees set WHERE _id=?, firstName=?, lastName=?, email=?, mobile=?, home=?, userId=?, storeId=?, addressId=?, pin=?, hourlyRate=?, overtimeRate=?', [ v.id, checkValue(v.company), checkValue(v.category), checkValue(v.skycode), checkValue(v.name), checkValue(v.hsn), checkValue(v.description), checkValue(v.mrp), checkValue(v.v), checkValue(v.img, defaultValue: ''), ], ); } catch (error) { debugPrint("RawUpdate===========>${error}"); } if (rows == 0) { try { await db?.rawInsert( 'INSERT INTO employees (id, code, firstName, lastName, email, mobile, home, userId, storeId, addressId, pin, hourlyRate, overtimeRate) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)', [ v.id, checkValue(v.code), checkValue(v.firstName), checkValue(v.lastName), checkValue(v.email), checkValue(v.mobile), checkValue(v.home), checkValue(v.userId), checkValue(v.storeId), checkValue(v.addressId), checkValue(v.pin), checkValue(v.hourlyRate), checkValue(v.overtimeRate), ], ); } catch (error) { debugPrint("RowInsert===========>${error}"); } } } } return true; }*/ /// get all the valid promotions available for that time /// @param date date time of the order /* Future<List<ProductData>> getPromotions(DateTime date) async { int time = getTimeOfDay(date); int now = getTimeOfDate(date);m List<Map<String, dynamic>> data = await db?.rawQuery('SELECT * FROM promotions ', []) ?? []; List<ProductData> category = <ProductData>[]; for (int i = 0; i < data.length; i++) { category.add(ProductData.fromJson(data[i])); } return category; */ /*db?.rawQuery( 'SELECT id, name, description, type, weekdays, startTime as startTimeValue, endTime as endTimeValue, validFrom as validFromValue, validTill as validTillValue, items, tickets ' + ' FROM promotions ' //+ ' WHERE weekdays > ? and (weekdays & ?) = ? ' + ' WHERE ((startTime is null) ' + ' or (startTime <= ? and endTime >= ? and startTime <= endTime) ' +0 ' or ((startTime <= ? or endTime >= ?) and startTime >= endTime)) ' + ' and ((validFrom is null) ' + ' or (validFrom <= ? and validTill >= ?))', [time, time, time, time, now, now]) as List<PromotionLite>;*/ /* }*/ /// searchProducts(search, exact, isProduct) => search by /// @param search in text /// @param exact in true false /// @param isProduct in true false /* Future<List<ProductLite>> searchProducts( String search, { bool exact = false, bool isProduct = true, }) async { List<ProductLite> productList = <ProductLite>[]; try { if (exact) { List<Map<String, dynamic>> data = await db?.rawQuery( 'SELECT * FROM products WHERE sku = ? OR upc = ? LIMIT 1', [search, search]) ?? []; for (int i = 0; i < data.length; i++) { productList.add(ProductLite.fromJson(data[i])); } } else { search = '%' + search + '%'; List<Map<String, dynamic>> productData = await db?.rawQuery( 'SELECT * FROM products WHERE (sku LIKE ? OR upc LIKE ? OR name LIKE ? OR name2 LIKE ? OR description LIKE ? OR description2 LIKE ? OR category LIKE ? OR department LIKE ?) AND type = ? order by name LIMIT 20', [ search, search, search, search, search, search, search, search, (isProduct ? ProductType.product.value : ProductType.service.value) ], ) ?? []; for (int i = 0; i < productData.length; i++) { productList.add(ProductLite.fromJson(productData[i])); } } } catch (e, t) { debugPrint('searchProducts($exact): $e \nData Trace....\n$t'); } return productList; }*/ /// getProducts() => get product list /* Future<List<ProductLite>> getProducts() async { return db?.rawQuery( 'SELECT id, categoryId, departmentId, sku, upc, name, name2, printerType, taxes, type, price, duration, durationType, durationDesc FROM products order by name') as List<ProductLite>; } */ /// cleanDatabase() => clean database cleanDatabase() async { try { await db?.rawDelete('DROP TABLE IF EXISTS products'); await db?.rawDelete('DROP TABLE IF EXISTS categories'); await db?.rawDelete('DROP TABLE IF EXISTS taxes'); //await db?.rawDelete('DROP TABLE IF EXISTS notifications'); await db?.rawDelete('DROP TABLE IF EXISTS employees'); await db?.rawDelete('DROP TABLE IF EXISTS loyaltyRewards'); await db?.rawDelete('DROP TABLE IF EXISTS punchCardRewards'); await db?.rawDelete('DROP INDEX IF EXISTS promotion_search'); await db?.rawDelete('DROP TABLE IF EXISTS promotions'); await db?.rawDelete('DROP INDEX IF EXISTS promotion_applies'); await db?.rawDelete('DROP TABLE IF EXISTS promotionApplies'); await db?.rawDelete('DROP TABLE IF EXISTS employeeServices'); await db?.rawDelete('DROP TABLE IF EXISTS leasablesItem'); await createTables(); } catch (error) { debugPrint('Error cleaning the $error'); } } /// saveProducts(products) => save products in local database /// @param products in product array /* Future<bool> saveProducts(List<ProductData> products) async { if (products.isNotEmpty) { for (var v in products) { try { int rows = await db!.rawUpdate( 'UPDATE products set sku=?, upc=?, name=?, name2=?, categoryId=?, category=?, departmentId=?, department=?, description=?, description2=?, notes=?, notes2=?, printerType=?, taxes=?, type=?, price=?, duration=?, durationType=?, durationDesc=? WHERE id=?', [ checkValue(v.skycode, defaultValue: ''), checkValue(v.upc, defaultValue: ''), checkValue(v.name), checkValue(v.name2, defaultValue: ''), checkValue(v.categoryId), checkValue(v.categoryName), checkValue(v.departmentId), checkValue(v.departmentName), checkValue(v.description, defaultValue: ''), checkValue(v.description2, defaultValue: ''), checkValue(v.notes, defaultValue: ''), checkValue(v.notes2, defaultValue: ''), checkValue(v.printerType, defaultValue: 0), v.taxes.toString(), v.type == ProductType.rawGood ? ProductType.rawGood.value : v.type == ProductType.product ? ProductType.product.value : ProductType.service.value, v.price, v.duration ?? 0, v.durationType == DurationType.minutes ? 0 : v.durationType == DurationType.hours ? 1 : v.durationType == DurationType.days ? 2 : v.durationType == DurationType.weeks ? 3 : v.durationType == DurationType.months ? 4 : v.durationType == DurationType.years ? 5 : 0, v.durationDesc ?? '', v.id ], ); if (rows == 0) { await db?.rawQuery( 'INSERT INTO products (id, sku, upc, name, name2, categoryId, category, departmentId, department, description, description2, notes, notes2, printerType, taxes, type, price, duration, durationType, durationDesc) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)', [ v.id, checkValue(v.sku, defaultValue: ''), checkValue(v.upc, defaultValue: ''), checkValue(v.name), checkValue(v.name2, defaultValue: ''), checkValue(v.categoryId), checkValue(v.categoryName), checkValue(v.departmentId), checkValue(v.departmentName), checkValue(v.description, defaultValue: ''), checkValue(v.description2, defaultValue: ''), checkValue(v.notes, defaultValue: ''), checkValue(v.notes2, defaultValue: ''), checkValue(v.printerType, defaultValue: 0), v.taxes.toString(), v.type == ProductType.rawGood ? 1 : v.type == ProductType.product ? 2 : 3, v.price, v.duration ?? 0, v.durationType == DurationType.minutes ? 0 : v.durationType == DurationType.hours ? 1 : v.durationType == DurationType.days ? 2 : v.durationType == DurationType.weeks ? 3 : v.durationType == DurationType.months ? 4 : v.durationType == DurationType.years ? 5 : 0, v.durationDesc ?? '' ]); } } catch (error, t) { debugPrint('Error with database $error : \nTrace:$t'); } } } return true; }*/ /// getCategories() => get all categories in local database /*Future<List<Category>> getCategories() async { List<Map<String, dynamic>> data = await db?.rawQuery('SELECT * FROM categories ', []) ?? []; List<Category> category = <Category>[]; for (int i = 0; i < data.length; i++) { category.add(Category.fromJson(data[i])); } return category; }*/ /// saveEmployees(emplopyees) => save employees in local database /// @param employees in employee array /* Future<bool> saveEmployees(List<Employee> employees) async { int? rows = 0; if (employees.isNotEmpty) { for (var v in employees) { try { rows = await db?.rawUpdate( 'UPDATE employees set code=?, firstName=?, lastName=?, email=?, mobile=?, home=?, userId=?, storeId=?, addressId=?, pin=?, hourlyRate=?, overtimeRate=? WHERE id=?', [ checkValue(v.code), checkValue(v.firstName), checkValue(v.lastName), checkValue(v.email), checkValue(v.mobile), checkValue(v.home), checkValue(v.userId), checkValue(v.storeId), checkValue(v.addressId), checkValue(v.pin), checkValue(v.hourlyRate), checkValue(v.overtimeRate), v.id ]); } catch (error) { debugPrint("RawUpdate===========>${error}"); } if (rows == 0) { try { await db?.rawInsert( 'INSERT INTO employees (id, code, firstName, lastName, email, mobile, home, userId, storeId, addressId, pin, hourlyRate, overtimeRate) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)', [ v.id, checkValue(v.code), checkValue(v.firstName), checkValue(v.lastName), checkValue(v.email), checkValue(v.mobile), checkValue(v.home), checkValue(v.userId), checkValue(v.storeId), checkValue(v.addressId), checkValue(v.pin), checkValue(v.hourlyRate), checkValue(v.overtimeRate), ]); } catch (error) { debugPrint("RowInsert===========>${error}"); } } } } return true; }*/ /// getEmployees() => get all employee list in local database /*Future<List<Employee>> getEmployees() async { List<Map<String, dynamic>> data = await db?.rawQuery('SELECT * FROM employees ', []) ?? []; List<Employee> employeeList = <Employee>[]; for (int i = 0; i < data.length; i++) { employeeList.add(Employee.fromJson(data[i])); } return employeeList; } */ /// getEmployeeById(id) => get given employee id information from local database /// @param id in employee id /* Future<Employee?> getEmployeeById(int id) async { List<Map<String, dynamic>>? data = await db?.query('employees', columns: ['id, code, firstName, lastName, email, mobile, home'], where: 'id = ?', whereArgs: [id]); if (data!.isNotEmpty) { return Employee.fromJson(data[0]); } else { return null; } }*/ /// clearNotificationDatabase() => delete notification data in local database /* clearNotificationDatabase() async { try { await db?.delete('notifications'); //await this.createTables(); } catch (error) { // this.monitorService.logError(error); debugPrint('Error notification cleaning the $error'); } }*/ /// saveProducts(products) => save products in local database /// @param products in product array /* Future<bool> saveEmployeeServices( List<EmployeeServices> employeeServices) async { if (employeeServices.isNotEmpty) { await db?.delete('employeeServices'); for (int i = 0; i < employeeServices.length; i++) { EmployeeServices v = employeeServices[i]; try { await db?.rawInsert( 'INSERT INTO employeeServices (id, employeeId, productId) VALUES (?,?,?)', [(i + 1), v.employeeId, v.productId]); } catch (error) { // this.monitorService.logError(error); debugPrint('Error with database $error'); } } } return true; }*/ } //// Main Dart import 'package:bitsdojo_window/bitsdojo_window.dart'; import 'package:ceramic_quotation/app/common/app_theme.dart'; import 'package:ceramic_quotation/app/database/database_service.dart'; import 'package:ceramic_quotation/app/utils/app_prefrence.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import 'package:sqflite_common_ffi/sqflite_ffi.dart'; import 'app/common/progress_indicator.dart'; import 'app/routes/app_pages.dart'; import 'app/utils/utils.dart'; void main() async { WidgetsFlutterBinding.ensureInitialized(); await AppPreference.init(); await setup(); sqfliteFfiInit(); getIt.get<DatabaseService>().init(); var email = AppPreference.getString("token"); GetPlatform.isMacOS || GetPlatform.isWindows || GetPlatform.isLinux ? doWhenWindowReady(() { const initialSize = Size(1200, 798); appWindow.minSize = initialSize; appWindow.size = initialSize; appWindow.alignment = Alignment.center; appWindow.show(); }) : null; runApp( Loading( child: GetMaterialApp( debugShowCheckedModeBanner: false, title: "Application", initialRoute: email == null ? AppPages.INITIAL : Routes.home, getPages: AppPages.routes, theme: AppTheme().themeData(), ), ), ); } ///// Product_controller 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 skycode = TextEditingController(); final TextEditingController name = TextEditingController(); final DatabaseService databaseService = getIt.get<DatabaseService>(); Dio dio = Dio(); var dataList = []; var createPath; String? dirPath; File? file; double progress = 0; int? sortColumnIndex; bool sortAscending = true; bool isSelected = false; double qtyTotal = 0.0; double gAmtTotal = 0.0; double netTotal = 0.0; List<bool>? checkBoxValues; List<ProductData>? productData; List<ProductModel> dataListValue = []; List<ProductData> itemAddList = []; List<ProductData> getProductList = []; List<FileSystemEntity>? imageList; ProductModel? productModel = ProductModel(); Directory? root = Platform.isMacOS ? Directory("/Users/imac/") : Platform.isWindows ? Directory('C:\\Users\\') : Directory("/storage/emulated/0/"); 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].qty = qty; //itemAddList[index].gAmt = qAmt; update(); return qAmt; } double? disc({ required double dis_per, required int index, }) { itemAddList[index].dis = dis_per; update(); } 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'); print(AppString.createFolder + dir.path); 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.length); } 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(); getProductList = getData!.data ?? []; if (getData.data != null && getData.data!.isNotEmpty) { databaseService.saveProduct(getData.data ?? []); } update(); runFilter(""); return productModel; } getDataFromDatabase() async { final data = await databaseService.getProductData(); getProductList = data; productModel!.data = getProductList; update(); } void sorting<T>( Comparable<T> Function(Dessert d) getField, int columnIndex, bool ascending, ) { sortColumnIndex = columnIndex; sortAscending = ascending; update(); } @override onInit() async { filterImage(); await getDataFromDatabase(); itemAddList.add(ProductData( isSelected: true, isactive: "", id: "", company: "", category: "", skycode: "", name: "", qty: null, hsn: "", description: "", mrp: "", v: 0, dis: null, )); 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; getProductList.forEach((element) { if (isSelected) { element.isSelected = isSelected; } else { element.isSelected = isSelected; } }); update(); } } ////add Quatation import 'dart:io'; import 'package:animated_custom_dropdown/custom_dropdown.dart'; import 'package:ceramic_quotation/app/common/app_scaffold.dart'; import 'package:ceramic_quotation/app/common/common_show_dialog.dart'; import 'package:ceramic_quotation/app/constant/image_path.dart'; import 'package:ceramic_quotation/app/model/product_model/product_model.dart'; import 'package:ceramic_quotation/app/modules/add_quatation/controller/add_quatation_controller.dart'; import 'package:ceramic_quotation/app/modules/company/view/Company_screen.dart'; import 'package:ceramic_quotation/app/modules/product/controller/product_controller.dart'; import 'package:ceramic_quotation/app/modules/quatation/controller/quatation_controller.dart'; import 'package:data_table_2/data_table_2.dart'; import 'package:flutter/material.dart'; import 'package:get/get.dart'; import '../../../common/appbar.dart'; import '../../../common/custom_button.dart'; import '../../../common/tabal_screen.dart'; import '../../../common/text_filed.dart'; import '../../../constant/app_color.dart'; import '../../../constant/app_string.dart'; import '../../../pdf_pages/pdfpreview.dart'; import '../../account/view/account_view.dart'; import '../../home/views/home_view.dart'; import '../../product/view/Product_Screen.dart'; import '../../quatation/view/quatation_screen.dart'; class AddQuatationScreen extends GetView<AddQuatationController> { AddQuatationScreen({super.key}); @override Widget build(BuildContext context) { return GetBuilder<AddQuatationController>( init: AddQuatationController(), builder: (addQuatationController) { QuotationController quotationController = Get.put(QuotationController()); return AppScaffold( appBar: const PreferredSize( preferredSize: Size.fromHeight(100), child: CommonAppBar(), ), body: addQuatationController.isAddQuatation == true ? GetBuilder<ProductController>( init: ProductController(), builder: (productController) { return Column( children: [ Padding( padding: const EdgeInsets.all(8.0), child: Card( elevation: 2, child: Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ Text( AppString.partyQuation, style: Get.textTheme.displayLarge, ), SizedBox( height: 36, width: 300, child: CustomDropdown.search( borderRadius: BorderRadius.circular(8), borderSide: BorderSide( color: Colors.black54, ), hintText: AppString.selectParty, controller: quotationController .jobRoleSearchDropdownCtrl, items: quotationController.partyList, ), ), ], ), const SizedBox( height: 5, ), Row( children: [ Text( AppString.reference, style: Get.textTheme.displayLarge, ), SizedBox( height: 36, width: 300, child: CustomDropdown.search( borderRadius: BorderRadius.circular(8), borderSide: BorderSide( color: Colors.black54, ), hintText: AppString.SelectReference, controller: quotationController .referenceSearchDropdownCtrl, items: quotationController.partyList, ), ), ], ), const SizedBox( height: 5, ), Row( children: [ Text( AppString.reMark, style: Get.textTheme.displayLarge, ), LoginTextField( contentPadding: EdgeInsets.zero, isdense: true, fieldStyle: Get.textTheme.displayLarge, suffixIcon: SizedBox(), ), ], ), const SizedBox( height: 5, ), ], ), Column( crossAxisAlignment: CrossAxisAlignment.end, children: [ Row( children: [ Text( AppString.vchDate, style: Get.textTheme.displayLarge, ), LoginTextField( contentPadding: EdgeInsets.zero, isdense: true, textEditingController: addQuatationController .expDateController, readOnly: true, textInputAction: TextInputAction.none, onTap: () async { await addQuatationController .selectDate(context); }, hintText: addQuatationController .firstDates ?? addQuatationController .dateFormat( DateTime.now(), ), suffixIcon: const Icon( Icons.calendar_month, ), ), ], ), const SizedBox( height: 5, ), Row( children: [ Text( AppString.vchNo, style: Get.textTheme.displayLarge, ), LoginTextField( contentPadding: EdgeInsets.zero, fieldStyle: Get.textTheme.displayLarge, isdense: true, suffixIcon: SizedBox(), ), ], ), ], ), ], ), ), ), ), 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(); if (productController .itemAddList[index].qty == null) { productController .itemAddList[index] .qtyController .text = ""; } productController .itemAddList[index] .qtyController .text = productController .itemAddList[index] .qty == null ? "" : productController .itemAddList[index].qty .toString(); productController .itemAddList[index] .discController .text = productController .itemAddList[index] .dis == null ? "" : productController .itemAddList[index].dis .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( qty: null, dis: null, )); } }, 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.disc( dis_per: double.parse( value, ), index: index, ); productController .itemAddList[index] .discController .text = value; productController .itemAddList[index] .discController .selection = TextSelection .fromPosition( TextPosition( offset: productController .itemAddList[ index] .qtyController .text .length, ), ); }, 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(), ), onChanged: (val) { double.parse(val); }, style: Get.theme.textTheme .displayLarge, )), ], ); }, ), ); }, ), ), ), Padding( padding: const EdgeInsets.all(8.0), child: Card( child: Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end, children: [ CustomButton( title: AppString.save, onTap: () { showDialog( barrierColor: AppColors.transparent, context: context, builder: (context) { return AlertDialog( title: Text( AppString.voucherPrint, style: Get .theme.textTheme.displayLarge, ), content: Row( children: [ Container( decoration: BoxDecoration( color: AppColors.blue, borderRadius: BorderRadius.circular( 20, ), ), child: const Icon( Icons.question_mark, ), ), const SizedBox(width: 5), const Text( AppString.voucherPrint, ), ], ), actions: [ CustomButton( width: 100, title: AppString.exit, onTap: () { Get.back(); }, ), ], ); }, ); }, ), const SizedBox( width: 20, ), CustomButton( title: AppString.print, onTap: () { printList( context, // productController: productController, // quotationController: // quotationController, ); }, ), const SizedBox( width: 20, ), CustomButton( title: AppString.exit, onTap: () { addQuatationController.isAddQuatation = false; Get.back(); }, ), ], ), ), ), ), ], ); }, ) : addQuatationController.selectedIndex == 0 ? CompanyView() : addQuatationController.selectedIndex == 1 ? AccountView() : addQuatationController.selectedIndex == 2 ? ProductView() : addQuatationController.selectedIndex == 3 ? addQuatationController.isAddQuatation == true ? GetBuilder<ProductController>( init: ProductController(), builder: (productController) { return Column( children: [ Padding( padding: const EdgeInsets.all(8.0), child: Card( elevation: 2, child: Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment .spaceBetween, children: [ Column( crossAxisAlignment: CrossAxisAlignment .end, children: [ Row( mainAxisAlignment: MainAxisAlignment .spaceEvenly, children: [ Text( AppString .partyQuation, style: Get .textTheme .displayLarge, ), SizedBox( height: 36, width: 300, child: CustomDropdown .search( borderRadius: BorderRadius .circular( 8, ), borderSide: BorderSide( color: Colors .black54, ), hintText: AppString .selectParty, controller: quotationController .jobRoleSearchDropdownCtrl, items: quotationController .partyList, ), ), ], ), const SizedBox( height: 5, ), Row( children: [ Text( AppString .reference, style: Get .textTheme .displayLarge, ), SizedBox( height: 36, width: 300, child: CustomDropdown .search( borderRadius: BorderRadius .circular( 8, ), borderSide: BorderSide( color: Colors .black54, ), hintText: AppString .SelectReference, controller: quotationController .referenceSearchDropdownCtrl, items: quotationController .partyList, ), ), ], ), const SizedBox( height: 5, ), Row( children: [ Text( AppString .reMark, style: Get .textTheme .displayLarge, ), LoginTextField( contentPadding: EdgeInsets .zero, isdense: true, fieldStyle: Get .textTheme .displayLarge, suffixIcon: SizedBox(), ), ], ), const SizedBox( height: 5, ), ], ), Column( crossAxisAlignment: CrossAxisAlignment .end, children: [ Row( children: [ Text( AppString .vchDate, style: Get .textTheme .displayLarge, ), LoginTextField( contentPadding: EdgeInsets .zero, isdense: true, textEditingController: addQuatationController .expDateController, readOnly: true, textInputAction: TextInputAction .none, onTap: () async { await addQuatationController .selectDate( context, ); }, hintText: addQuatationController .firstDates ?? addQuatationController .dateFormat( DateTime .now(), ), suffixIcon: const Icon( Icons .calendar_month, ), ), ], ), const SizedBox( height: 5, ), Row( children: [ Text( AppString.vchNo, style: Get .textTheme .displayLarge, ), LoginTextField( contentPadding: EdgeInsets .zero, fieldStyle: Get .textTheme .displayLarge, isdense: true, suffixIcon: SizedBox(), ), ], ), ], ), ], ), ), ), ), 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) { // if (!productController.isFirstCome) { // productController.itemAddList.removeAt( // productController.itemAddList.length - 1, // ); // } // productController.isFirstCome = // true; productController.itemAddList.addAll(response); 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).toString(), ), style: Get .theme .textTheme .displayLarge, ), ), /// Discount DataCell( TextField( onChanged: (value) { productController .itemAddList[index] .dis = double.parse( value.toString(), ); productController .disc( dis_per: double.parse( value, ), 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(), ), onChanged: (val) {}, style: Get .theme .textTheme .displayLarge, ), ), ], ); }, ), ); }, ), ), ), Padding( padding: const EdgeInsets.all(8.0), child: Card( child: Padding( padding: const EdgeInsets.all(8.0), child: Row( mainAxisAlignment: MainAxisAlignment.end, crossAxisAlignment: CrossAxisAlignment.end, children: [ CustomButton( title: AppString.save, onTap: () { showDialog( barrierColor: AppColors .transparent, context: context, builder: (context) { return AlertDialog( title: Text( AppString .voucherPrint, style: Get .theme .textTheme .displayLarge, ), content: Row( children: [ Container( decoration: BoxDecoration( color: AppColors .blue, borderRadius: BorderRadius.circular( 20, ), ), child: const Icon( Icons .question_mark, ), ), const SizedBox( width: 5, ), const Text( AppString .voucherPrint, ), ], ), actions: [ CustomButton( width: 100, title: AppString .exit, onTap: () { Get.back(); }, ), ], ); }, ); }, ), const SizedBox( width: 20, ), CustomButton( title: AppString.print, onTap: () { printList( context, // productController: // productController, // quotationController: // quotationController, ); }, ), const SizedBox( width: 20, ), CustomButton( title: AppString.exit, onTap: () { addQuatationController .isAddQuatation = false; Get.back(); }, ), ], ), ), ), ), ], ); }, ) : QuationView() : HomeView(), indexCallBack: (index) { if (addQuatationController.selectedIndex != 3) { addQuatationController.getUpdateQuatationTo(); } addQuatationController.changeTab(index: index); }, selectedIndex: addQuatationController.selectedIndex, ); }, ); } } itemSelectList(BuildContext context) { ProductController productController = Get.put(ProductController()); productController.filterImage(); return commonShowDialog( context: context, content: Padding( padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 5), child: SizedBox( child: SingleChildScrollView( child: GetBuilder<ProductController>( init: ProductController(), builder: (productController) => Column( mainAxisAlignment: MainAxisAlignment.start, crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( mainAxisAlignment: MainAxisAlignment.start, children: [ Text( AppString.itemMaster, style: Get.theme.primaryTextTheme.titleMedium, textAlign: TextAlign.end, ), ], ), LoginTextField( onChanged: (val) { productController.runFilter(val); }, width: MediaQuery.of(context).size.width / 2, isdense: true, hintText: AppString.search, hintStyle: Get.theme.primaryTextTheme.titleLarge, fieldStyle: Get.theme.primaryTextTheme.headlineMedium, ), const SizedBox(height: 10), Table( columnWidths: { 0: FlexColumnWidth(5), 1: FlexColumnWidth(10), 2: FlexColumnWidth(30), 3: FlexColumnWidth(10), 4: FlexColumnWidth(20), }, border: TableBorder.all( width: 1, color: Colors.black45, ), children: [ TableRow( children: [ TableCell( child: Padding( padding: const EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: Checkbox( value: productController.isSelected, onChanged: (bool? value) { productController .selectAllValue(value ?? false); }, ), ), ), TableCell( child: Padding( padding: const EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: Text( AppString.skuCode, style: Get.theme.primaryTextTheme.titleMedium, ), ), ), TableCell( child: Padding( padding: const EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: Text( AppString.name, style: Get.theme.primaryTextTheme.titleMedium, ), ), ), TableCell( child: Padding( padding: const EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: Text( AppString.mrp, style: Get.theme.primaryTextTheme.titleMedium, ), ), ), TableCell( child: Padding( padding: const EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: Text( AppString.image, style: Get.theme.primaryTextTheme.titleMedium, ), ), ), ], ), ], ), Table( columnWidths: { 0: FlexColumnWidth(5), 1: FlexColumnWidth(10), 2: FlexColumnWidth(30), 3: FlexColumnWidth(10), 4: FlexColumnWidth(20), }, defaultColumnWidth: const FixedColumnWidth(200.0), border: TableBorder.all(width: 1, color: Colors.black45), children: List<TableRow>.generate( productController.getProductList.length, (index) { productController.getProductList.forEach((element) { element.img = productController.imageList ?.firstWhereOrNull((el) => element.skycode == el.path.split("\\").last.split(".").first) ?.path; }); return TableRow(children: [ TableCell( child: Checkbox( value: productController .getProductList[index].isSelected, onChanged: (bool? value) { productController .getProductList[index].isSelected = value!; productController.update(); }, ), ), TableCell( child: Padding( padding: EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: TextField( readOnly: true, onTap: () { Get.back( result: productController.getProductList[index], ); }, decoration: InputDecoration( enabledBorder: InputBorder.none, focusedBorder: InputBorder.none, ), controller: TextEditingController( text: productController .getProductList[index].skycode!, ), style: Get.theme.textTheme.displayLarge, ), ), ), TableCell( child: Padding( padding: EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: TextField( readOnly: true, onTap: () { Get.back( result: productController.getProductList[index], ); }, decoration: InputDecoration( enabledBorder: InputBorder.none, focusedBorder: InputBorder.none, ), controller: TextEditingController( text: productController .getProductList[index].category!, ), style: Get.theme.textTheme.displayLarge, ), ), ), TableCell( child: Padding( padding: EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: TextField( readOnly: true, onTap: () { Get.back( result: productController .getProductList[index].mrp, ); }, decoration: InputDecoration( enabledBorder: InputBorder.none, focusedBorder: InputBorder.none, ), controller: TextEditingController( text: productController .getProductList[index].mrp!, ), style: Get.theme.textTheme.displayLarge, ), ), ), TableCell( child: Padding( padding: EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: Image.file( File( productController.getProductList[index].img ?? AppImagePath.light, ), height: 80, width: 80, ), ), ), ]); }, ), ), ], ), ), ), ), ), actions: [ Padding( padding: const EdgeInsets.only(bottom: 15, right: 15), child: CustomButton( width: 100, title: AppString.addItem, onTap: () { List<ProductData> data = []; for (int i = 0; i < productController.getProductList.length; i++) { if (productController.getProductList[i].isSelected == true) { data.add(productController.getProductList[i]); } } productController.update(); Get.back(result: data); productController.selectAllValue(false); }, ), ), Padding( padding: const EdgeInsets.only(bottom: 15, right: 15), child: CustomButton( width: 100, title: AppString.item, onTap: () {}, ), ), ], ); } printList( BuildContext context, // ProductController? productController, // QuotationController? quotationController, // AddQuatationController? addQuatationController, ) { ProductController productController = Get.put(ProductController()); QuotationController quotationController = Get.put(QuotationController()); AddQuatationController addQuatationController = Get.put(AddQuatationController()); return commonShowDialog( context: context, title: AppString.voucherPrint, content: Padding( padding: const EdgeInsets.symmetric(horizontal: 5, vertical: 5), child: SizedBox( height: 180, width: MediaQuery.of(context).size.width / 2, child: SingleChildScrollView( child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.end, children: [ Text( AppString.selectFormList, style: Get.theme.primaryTextTheme.titleMedium, textAlign: TextAlign.end, ), ], ), const SizedBox(height: 5), Table( columnWidths: const { 0: FlexColumnWidth(1), 1: FlexColumnWidth(4), 2: FlexColumnWidth(2.50), 3: FlexColumnWidth(2.50), }, border: TableBorder.all(width: 1, color: Colors.black45), children: [ TableRow( children: [ TableCell( child: Padding( padding: const EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: Text( " ...", style: Get.theme.primaryTextTheme.titleMedium, ), ), ), TableCell( child: Padding( padding: const EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: Text( AppString.reportName, style: Get.theme.primaryTextTheme.titleMedium, ), ), ), TableCell( child: Padding( padding: const EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: Text( AppString.report, style: Get.theme.primaryTextTheme.titleMedium, ), ), ), TableCell( child: Padding( padding: const EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: Text( AppString.original, style: Get.theme.primaryTextTheme.titleMedium, ), ), ), TableCell( child: Padding( padding: const EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: Text( AppString.duplicate, overflow: TextOverflow.ellipsis, style: Get.theme.primaryTextTheme.titleMedium, ), ), ), TableCell( child: Padding( padding: const EdgeInsets.only( top: 15, left: 05, bottom: 15, ), child: Text( AppString.triplicate, overflow: TextOverflow.ellipsis, style: Get.theme.primaryTextTheme.titleMedium, ), ), ), ], ), ], ), Table( columnWidths: const { 0: FlexColumnWidth(1), 1: FlexColumnWidth(4), 2: FlexColumnWidth(2.50), 3: FlexColumnWidth(2.50), }, border: TableBorder.all(width: 1, color: Colors.black45), children: List<TableRow>.generate( 1, (index) => TableRow(children: [ TableCell( child: Padding( padding: const EdgeInsets.all(8.0), child: Checkbox( value: true, onChanged: (val) { //productController.isSelected = val!; }, ), ), ), const TableCell( child: Padding( padding: const EdgeInsets.only( top: 10, left: 05, bottom: 10, ), child: Text(AppString.quatation), ), ), const TableCell( child: Padding( padding: const EdgeInsets.only( top: 10, left: 05, bottom: 10, ), child: Text(AppString.qua), ), ), TableCell( child: Padding( padding: const EdgeInsets.all(8.0), child: Checkbox(value: true, onChanged: (val) {}), ), ), TableCell( child: Padding( padding: const EdgeInsets.all(8.0), child: Checkbox(value: false, onChanged: (val) {}), ), ), TableCell( child: Padding( padding: const EdgeInsets.all(8.0), child: Checkbox(value: false, onChanged: (val) {}), ), ), ]), ), ), ], ), ), ), ), actions: [ CustomButton( width: 100, title: AppString.preview, onTap: () { Get.back(); }, ), CustomButton( width: 100, title: AppString.print, onTap: () { try { double qtyTotal = 0.0; double gAmtTotal = 0.0; double netTotal = 0.0; productController.itemAddList.forEach((element) { qtyTotal += double.parse(element.qtyController.text); gAmtTotal += double.parse(element.gAmt.toString()); netTotal += element.nAmt ?? 0.0; }); } catch (e) { print("--${e}"); } /* productController.itemAddList.firstWhere((element) => element.areaController.isBlank ?? productController.itemAddList.removeLast()); productController.itemAddList.removeLast(); print( "last data removed ====>> ${productController.itemAddList.removeLast()}");*/ Navigator.of(context).push( MaterialPageRoute( builder: (context) => PdfPreviewPage( date: addQuatationController.firstDates, partyName: quotationController.jobRoleSearchDropdownCtrl.text, reMark: quotationController.referenceSearchDropdownCtrl.text, qtyTotal: productController.qtyTotal, gAmtTotal: productController.gAmtTotal, netAmount: productController.netTotal, productData: productController.itemAddList, quatationData: quotationController.getQuatationList[0], ), ), ); }, ), ], ); }
Editor is loading...