save_certificate function

dynamic save_certificate({
  1. required User user,
  2. required Map user_info,
  3. required String course_id,
  4. required bool has_certificate,
  5. required bool show_has_certificate,
  6. required BuildContext context,
})

Implementation

save_certificate({
  required User user,
  required Map user_info,
  required String course_id,
  required bool has_certificate,
  required bool show_has_certificate,
  required BuildContext context,
}) async {
  if (!has_certificate) {
    FirebaseFirestore.instance.collection("certificates").add({
      "course_id": course_id,
      "date": FieldValue.serverTimestamp(),
      "user_id": user.uid,
    }).then((new_certificate) {
      FirebaseFirestore.instance.collection("users").doc(user.uid).update({
        "certificates": FieldValue.arrayUnion([new_certificate.id]),
      }).catchError((err) => print(err));

      FirebaseFirestore.instance
          .collection('templates')
          .doc("certificate")
          .get()
          .then((DocumentSnapshot certificate_template) async {
        DocumentSnapshot course_snapshot = await FirebaseFirestore.instance
            .collection("courses")
            .doc(course_id)
            .get();

        String course_name = course_snapshot.get("name");

        String html_certificate = await get_html_certificate(
          course_name: course_name,
          user_name: user_info["firstname"] + " " + user_info["lastname"],
          date: timestamp_to_date(certificate_template.get("date")),
          id: new_certificate.id,
        );

        send_email(
          to: user.email!,
          subject:
              "Hello ${user_info["firstname"]} ${user_info["lastname"]}, here is your $course_name certificate!",
          text: "New Message",
          html: html_certificate,
        )
            .then((value) => {
                  ScaffoldMessenger.of(context).showSnackBar(
                    SnackBar(
                      content: Text("Certificate email sent! ✉️"),
                      duration: Duration(seconds: 3),
                    ),
                  ),
                })
            .catchError((err) => print(err));
      });
    }).catchError((err) {
      print(err);
    });
  } else {
    if (show_has_certificate) {
      ScaffoldMessenger.of(context).showSnackBar(
        SnackBar(
          content: Text("You already have this certificate 👍"),
          duration: Duration(seconds: 3),
        ),
      );
    }
  }
}