OTMovilGasfiter/lib/services/email_service.dart
2026-08-02 15:50:25 -04:00

65 lines
2.2 KiB
Dart

import 'package:flutter_email_sender/flutter_email_sender.dart';
import 'package:intl/intl.dart';
import '../models/work_order.dart';
import 'pdf_service.dart';
class EmailService {
Future<void> sendReport({
required WorkOrder order,
required String recipient,
required String pdfPath,
required PdfReportType reportType,
}) async {
final priceFormat = NumberFormat.decimalPattern('es_CL');
String formatPrice(int value) => '\$${priceFormat.format(value)}';
final buffer = StringBuffer()
..writeln('Orden de trabajo: ${order.title}')
..writeln('Cliente: ${order.details.client}')
..writeln('Dirección: ${order.details.address}')
..writeln()
..writeln('Resumen del trabajo realizado:');
for (var index = 0; index < order.tasks.length; index++) {
final task = order.tasks[index];
buffer
..writeln()
..writeln('${index + 1}. ${task.title}')
..writeln('Observación: ${task.observation}')
..writeln(
'Evidencia: ${task.beforePhotos.length} foto(s) antes y '
'${task.afterPhotos.length} foto(s) después.',
);
if (reportType == PdfReportType.client && task.parts.isNotEmpty) {
buffer.writeln('Repuestos utilizados:');
for (final part in task.parts) {
buffer.writeln('- ${part.name}: ${formatPrice(part.price)}');
}
buffer.writeln(
'Subtotal de repuestos: ${formatPrice(task.partsTotal)}',
);
}
}
if (reportType == PdfReportType.client) {
buffer
..writeln()
..writeln('Costo de mano de obra: ${formatPrice(order.laborCost)}')
..writeln('Total de repuestos: ${formatPrice(order.totalPartsCost)}')
..writeln('Valor total de la OT: ${formatPrice(order.totalCost)}');
}
buffer
..writeln()
..writeln('El informe PDF adjunto contiene el detalle y las fotografías.')
..writeln()
..writeln('Enviado desde SMoya Gasfiter.');
final email = Email(
body: buffer.toString(),
subject: 'Informe para ${reportType.label.toLowerCase()}: ${order.title}',
recipients: [recipient],
attachmentPaths: [pdfPath],
isHTML: false,
);
await FlutterEmailSender.send(email);
}
}