Untitled

 avatar
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...