handler method

  1. @override
Future<Response> handler()
override

Must be implemented

Implementation

@override
Future<Response> handler() async {
  final vendorDataLinkId = vendorDatalink.vendor.id;
  var excel = Excel.createExcel();
  var sheetObject = excel['Sheet1'];
  List<int>? fileBytes;

  try {
    if (reportType == availablesStocks) {
      final products =
          await postgresDatalinkRepository.getProductsByVendorIdForExcel(
        vendorId: vendorDataLinkId,
      );

      sheetObject.cell(CellIndex.indexByString('A1')).value = 'NAME';
      sheetObject.cell(CellIndex.indexByString('B1')).value = 'SKU';
      sheetObject.cell(CellIndex.indexByString('C1')).value = 'TOTAL';

      for (var i = 0; i < products.length; i++) {
        final skuTotalObj = products[i];

        sheetObject.updateCell(
          CellIndex.indexByColumnRow(columnIndex: 0, rowIndex: i + 1),
          skuTotalObj.name,
        );

        sheetObject.updateCell(
          CellIndex.indexByColumnRow(columnIndex: 1, rowIndex: i + 1),
          skuTotalObj.sku,
        );

        sheetObject.updateCell(
          CellIndex.indexByColumnRow(columnIndex: 2, rowIndex: i + 1),
          skuTotalObj.total,
        );
      }

      excel.rename('Sheet1', 'Available stocks');

      fileBytes = excel.save(fileName: 'available_stocks.xlsx');
    } else {
      final orders = await postgresDatalinkRepository.getOrderInfosForExcel(
        vendorDatalinkId: vendorDatalink.id,
      );

      for (var cell in allOrdersExcelTitleCells) {
        sheetObject.cell(CellIndex.indexByString(cell.keys.first)).value =
            cell.values.first;
      }

      for (var i = 0; i < orders.length; i++) {
        final order = orders[i];

        for (var j = 0; j < order.values.length; j++) {
          sheetObject.updateCell(
            CellIndex.indexByColumnRow(columnIndex: j, rowIndex: i + 1),
            order.values[j],
          );
        }
      }

      excel.rename('Sheet1', 'All orders');

      fileBytes = excel.save(fileName: 'all_orders.xlsx');
    }

    return Response.ok(
      fileBytes,
      headers: {
        'Content-Type':
            'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'
      },
    );
  } catch (e) {
    return Response.internalServerError(
      body: jsonEncode({'error': 'Webhook error: $e'}),
    );
  }
}