Untitled

 avatar
unknown
plain_text
2 years ago
6.2 kB
5
Indexable
import 'dart:async';
import 'dart:io';
import 'package:ceramic_quotation/app/constant/app_string.dart';
import 'package:ceramic_quotation/app/database/database_service.dart';
import 'package:ceramic_quotation/app/model/product_model/product_model.dart';
import 'package:ceramic_quotation/app/model/product_model/product_request_model.dart';
import 'package:ceramic_quotation/app/modules/product/product_service/product_service.dart';
import 'package:ceramic_quotation/app/utils/app_prefrence.dart';
import 'package:dio/dio.dart';
import 'package:file_picker/file_picker.dart';
import 'package:filesystem_picker/filesystem_picker.dart';
import 'package:flutter/material.dart';
import 'package:get/get.dart' hide FormData, MultipartFile;
import 'package:path_provider/path_provider.dart';
import '../../../model/sorting_model/product_sorting_model.dart';

class ProductController extends GetxController {
  final TextEditingController mrp = TextEditingController();
  final TextEditingController productId = TextEditingController();
  final TextEditingController skycode = TextEditingController();
  final TextEditingController name = TextEditingController();
  final DatabaseService databaseService = DatabaseService();

  Dio dio = Dio();
  String? dirPath;
  File? file;
  double progress = 0;
  var dataList = [];
  var createPath;
  List<ProductModel> dataListValue = [];
  int? sortColumnIndex;
  ProductModel? productModel;
  List<ProductData>? productData;
  bool isSelected = false;
  List<bool>? checkBoxValues;
  List<ProductData> itemAddList = [];
  bool closeDialog = true;
  double totalAmouint = 0;

  bool sortAscending = true;
  Directory? root = Platform.isMacOS
      ? Directory("/Users/imac/")
      : Directory("/storage/emulated/0/");

  List<FileSystemEntity>? imageList;

  filterImage() async {
    imageList = Directory(AppPreference.getString("folder_path")).listSync(
      recursive: true,
    );
    return imageList;
  }

  sum(double mrp, double qty, int index) {
    var qAmt = mrp * qty;
    itemAddList[index].gAmt = qAmt;
    update();
    return qAmt;
  }

  double? Disc({
    required double mrp,
    required double dis_per,
    required int index,
  }) {
    double discountAmt = mrp * (dis_per) / 100;

    itemAddList[index].nAmt = (double.parse(mrp.toString()) - discountAmt);
    update();
    return itemAddList[index].nAmt;
  }

  startTimer() {
    new Timer.periodic(
      Duration(seconds: 2),
      (Timer timer) {
        if (progress == 1) {
          timer.cancel();
          Get.back();
          getProduct();
        } else {
          progress += 0.2;
        }
        update();
      },
    );
  }

  Future<String> createFolders(String cow) async {
    final dir = Directory((Platform.isMacOS
                ? await getApplicationSupportDirectory()
                : Platform.isAndroid
                    ? await getExternalStorageDirectory()
                    : await getApplicationSupportDirectory())!
            .path +
        '/$cow');
    dirPath = dir.path;
    AppPreference.set("folder_path", "${dir.path}/");
    if ((await dir.exists())) {
      print(AppString.alreadyExist + dir.absolute.path);
      return dir.path;
    } else {
      dir.create();
      print(AppString.createFolder + dir.path);
      return dir.path;
    }
  }

  folderPicker(BuildContext context) async {
    final path = await FilesystemPicker.open(
      title: AppString.saveFolder,
      context: context,
      rootDirectory: root!,
      fsType: FilesystemType.folder,
      pickText: AppString.pickText,
    );

    if (path == null) return;
    if (path != null) {
      try {
        dataList = Directory(path).listSync().map((e) => e.path).toList();
        for (int i = 0; i < dataList.length; i++) {
          var file = await moveFile(
            File(dataList[i]),
            "${dirPath!}/${File(dataList[i]).path.split("/").last}",
          );
        }
      } catch (e) {}
    }

    print(path);
  }

  Future<File> moveFile(File sourceFile, String newPath) async {
    try {
      return await sourceFile.rename(newPath);
    } catch (e) {
      final newFile = await sourceFile.copy(newPath);
      await sourceFile.delete();
      return newFile;
    }
  }

  void ExcelFileUpload() async {
    final result = await FilePicker.platform.pickFiles(
      allowMultiple: false,
      type: FileType.any,
      allowedExtensions: [
        'xls',
        'xlsx',
      ],
    );
    if (result == null) return;
    if (result != null) {
      file = File(result.files.first.path!);
      ProductService().getUpload(file!);
    }
  }

  getProduct() async {
    productModel = await ProductService().getRequest();
    final itemAddList = productModel!.data;
    databaseService.savePromotions(itemAddList ?? []);
    update();
    runFilter("");
    return productModel;
  }

  void sorting<T>(
    Comparable<T> Function(Dessert d) getField,
    int columnIndex,
    bool ascending,
  ) {
    sortColumnIndex = columnIndex;
    sortAscending = ascending;
    update();
  }

  @override
  onInit() async {
    filterImage();
    await getProduct();
    itemAddList.add(ProductData(
      isSelected: true,
      isactive: "",
      id: "",
      companay: "",
      category: "",
      skycode: "",
      name: "",
      hsn: "",
      description: "",
      mrp: "",
      v: 0,
    ));
    super.onInit();
  }

  getDataUpdate(
    ProductUpdateRequestModel? productUpdateRequestModel,
    context,
  ) async {
    productModel = await ProductService()
        .productUpdate(productUpdateRequestModel, context);

    update();
    getProduct();
    return productModel;
  }

  runFilter(String enteredKeyword) {
    productData = enteredKeyword.isEmpty
        ? productModel!.data
        : productModel!.data!
            .where((element) => element.skycode!
                .toLowerCase()
                .contains(enteredKeyword.toLowerCase()))
            .toList();
    update();
  }

  selectAllValue(bool value) {
    isSelected = value;
    productData?.forEach((element) {
      if (isSelected) {
        element.isSelected = isSelected;
      } else {
        element.isSelected = isSelected;
      }
    });
    update();
  }
}
Editor is loading...