GstModel.calculate constructor

GstModel.calculate({
  1. required num amount,
  2. required GstType gstType,
  3. num? gstPercentage,
  4. GstMode? gstMode,
})

Implementation

factory GstModel.calculate({
  required num amount,
  required GstType gstType,
  num? gstPercentage,
  GstMode? gstMode,
}) {
  final num percentage = (gstPercentage != null && gstPercentage > 0)
      ? defaultGstPercentage[gstType]! + gstPercentage
      : defaultGstPercentage[gstType] ?? 0;

  num gstAmount;
  num baseAmount;
  num total;

  if (gstMode == GstMode.inclusive) {
    // Inclusive → amount includes GST
    gstAmount = amount * percentage / (100 + percentage);
    baseAmount = amount - gstAmount;
    total = amount;
  } else {
    // Exclusive or null → add GST
    gstAmount = amount * percentage / 100;
    baseAmount = amount;
    total = amount + gstAmount;
  }

  return GstModel(
    amount: baseAmount,
    gstAmount: gstAmount,
    total: total,
    gstPercentage: percentage,
    gstType: gstType,
    gstMode: gstMode,
  );
}