diff --git a/plugin/grading_electronic/README.md b/plugin/grading_electronic/README.md
new file mode 100644
index 0000000000..ee53901019
--- /dev/null
+++ b/plugin/grading_electronic/README.md
@@ -0,0 +1,13 @@
+# Grading Electronic Form
+v0.6
+
+Generate a file necesary to the Grading Electronic form for RickyRescue
+
+* Install the plugin
+* Asign the `content_top` region
+* Enable tool in configuration page
+
+> During the installation this plugin create three course extra fields
+> (`plugin_gradingelectronic_provider_id`, `plugin_gradingelectronic_course_id`, `plugin_gradingelectronic_coursehours`)
+> and one user extra field
+> (`fcdice_or_acadis_student_id`)
diff --git a/plugin/grading_electronic/generate.php b/plugin/grading_electronic/generate.php
new file mode 100644
index 0000000000..1498c733be
--- /dev/null
+++ b/plugin/grading_electronic/generate.php
@@ -0,0 +1,181 @@
+get('tool_enable') === 'true';
+
+ if (!$toolIsEnabled) {
+ throw new Exception($gradingElectronic->get_lang('PluginDisabled'));
+ }
+
+ $form = $gradingElectronic->getForm();
+
+ if (!$form->validate()) {
+ throw new Exception(
+ implode('
', $form->_errors)
+ );
+ }
+
+ $em = Database::getManager();
+
+ /** @var Course $course */
+ $course = $em->find('ChamiloCoreBundle:Course', api_get_course_int_id());
+ /** @var Session $session */
+ $session = $em->find('ChamiloCoreBundle:Session', api_get_session_id());
+
+ $values = $form->exportValues();
+
+ $cFieldValue = new ExtraFieldValue('course');
+ $uFieldValue = new ExtraFieldValue('user');
+
+ $cFieldValue->save([
+ 'variable' => GradingElectronicPlugin::EXTRAFIELD_COURSE_ID,
+ 'item_id' => $course->getId(),
+ 'value' => $values['course']
+ ]);
+
+ $item = $cFieldValue->get_item_id_from_field_variable_and_field_value(
+ GradingElectronicPlugin::EXTRAFIELD_COURSE_ID,
+ $values['course']
+ );
+
+ $fieldProvider = $cFieldValue->get_values_by_handler_and_field_variable(
+ $course->getId(),
+ GradingElectronicPlugin::EXTRAFIELD_COURSE_PROVIDER_ID
+ );
+ $fieldHours = $cFieldValue->get_values_by_handler_and_field_variable(
+ $course->getId(),
+ GradingElectronicPlugin::EXTRAFIELD_COURSE_HOURS
+ );
+
+ if ($session) {
+ $criteria = Criteria::create()->where(
+ Criteria::expr()->eq('relationType', Session::STUDENT)
+ );
+
+ $subscriptions = $session
+ ->getUsers()
+ ->matching($criteria);
+
+ $students = [];
+
+ /** @var SessionRelUser $subscription */
+ foreach ($subscriptions as $subscription) {
+ $students[] = $subscription->getUser();
+ }
+ } else {
+ $subscriptions = $course->getStudents();
+
+ /** @var CourseRelUser $subscription */
+ foreach ($subscriptions as $subscription) {
+ $students[] = $subscription->getUser();
+ }
+ }
+
+ $cats = Category::load(
+ null,
+ null,
+ $course->getCode(),
+ null,
+ null,
+ $session ? $session->getId() : 0,
+ 'ORDER By id'
+ );
+
+ /** @var \Category $gradebook */
+ $gradebook = $cats[0];
+
+ $dateStart = new DateTime($values['range_start'], new DateTimeZone('UTC'));
+ $dateEnd = new DateTime($values['range_end'], new DateTimeZone('UTC'));
+
+ $fileData = [];
+ $fileData[] = sprintf(
+ "1 %s %s%s",
+ $fieldProvider ? $fieldProvider['value'] : null,
+ $values['course'],
+ $dateStart->format('m/d/Y')
+ );
+
+ /** @var User $student */
+ foreach ($students as $student) {
+ $userFinishedCourse = Category::userFinishedCourse(
+ $student->getId(),
+ $gradebook,
+ 0,
+ $course->getCode(),
+ $session ? $session->getId() : 0,
+ true
+ );
+
+ if (!$userFinishedCourse) {
+ continue;
+ }
+
+ $fieldStudent = $uFieldValue->get_values_by_handler_and_field_variable(
+ $student->getId(),
+ GradingElectronicPlugin::EXTRAFIELD_STUDENT_ID
+ );
+
+ $score = Category::getCurrentScore(
+ $student->getId(),
+ $gradebook->get_id(),
+ $course->getCode(),
+ $session ? $session->getId() : 0
+ );
+
+ $fileData[] = sprintf(
+ "2 %sPASS%s %s %s",
+ $fieldStudent ? $fieldStudent['value'] : null,
+ $fieldHours ? $fieldHours['value'] : null,
+ $score,
+ $dateEnd->format('m/d/Y')
+ );
+
+ if (!$gradebook->getGenerateCertificates()) {
+ continue;
+ }
+
+ Category::register_user_certificate($gradebook->get_id(), $student->getId());
+ }
+
+ $fileName = implode('_', [
+ $gradingElectronic->get_title(),
+ $values['course'],
+ $values['range_start'],
+ $values['range_end'],
+ ]);
+ $fileName = api_replace_dangerous_char($fileName).'.txt';
+ $fileData[] = null;
+
+ file_put_contents(
+ api_get_path(SYS_ARCHIVE_PATH).$fileName,
+ implode("\r\n", $fileData)
+ );
+
+ echo Display::toolbarButton(
+ get_lang('Download'),
+ api_get_path(WEB_ARCHIVE_PATH).$fileName,
+ 'download',
+ 'success',
+ ['target' => '_blank', 'download' => $fileName]
+ );
+} catch (Exception $e) {
+ echo Display::return_message($e->getMessage(), 'error');
+}
diff --git a/plugin/grading_electronic/index.php b/plugin/grading_electronic/index.php
new file mode 100644
index 0000000000..8244019913
--- /dev/null
+++ b/plugin/grading_electronic/index.php
@@ -0,0 +1,16 @@
+isAllowed()) {
+ return;
+}
+
+$_template['show'] = true;
+$_tempalte['plugin_title'] = $gradingElectronic->get_title();
+$_template['form'] = $gradingElectronic->getForm();
diff --git a/plugin/grading_electronic/install.php b/plugin/grading_electronic/install.php
new file mode 100644
index 0000000000..d9f5dcfd39
--- /dev/null
+++ b/plugin/grading_electronic/install.php
@@ -0,0 +1,4 @@
+install();
diff --git a/plugin/grading_electronic/lang/english.php b/plugin/grading_electronic/lang/english.php
new file mode 100644
index 0000000000..b155f098e0
--- /dev/null
+++ b/plugin/grading_electronic/lang/english.php
@@ -0,0 +1,16 @@
+Generate File button in the Assessments page.
+ You nee assign the content_top region.
+';
+
+$strings['PluginDisabled'] = 'Grading Electronic is disabed';
+$strings['StudentId'] = 'Student ID';
+$strings['ProviderId'] = 'Provider ID';
+$strings['CourseHours'] = 'Course hours';
diff --git a/plugin/grading_electronic/plugin.php b/plugin/grading_electronic/plugin.php
new file mode 100644
index 0000000000..c707eef205
--- /dev/null
+++ b/plugin/grading_electronic/plugin.php
@@ -0,0 +1,5 @@
+get_info();
+$plugin_info['templates'] = ['view/grading.html.twig'];
diff --git a/plugin/grading_electronic/src/GradingElectronicPlugin.php b/plugin/grading_electronic/src/GradingElectronicPlugin.php
new file mode 100644
index 0000000000..a2fcaad2db
--- /dev/null
+++ b/plugin/grading_electronic/src/GradingElectronicPlugin.php
@@ -0,0 +1,200 @@
+ 'boolean',
+ )
+ );
+ }
+
+ /**
+ * @inheritDoc
+ */
+ public function get_name()
+ {
+ return 'grading_electronic';
+ }
+
+ /**
+ * Actions for install
+ */
+ public function install()
+ {
+ $this->setUpExtraFields();
+ }
+
+ /**
+ * Actions for uninstall
+ */
+ public function uninstall()
+ {
+ $this->setDownExtraFields();
+ }
+
+ /**
+ * Create extra fields for this plugin
+ */
+ private function setUpExtraFields()
+ {
+ $uExtraField = new ExtraField('user');
+
+ if (!$uExtraField->get_handler_field_info_by_field_variable(self::EXTRAFIELD_STUDENT_ID)) {
+ $uExtraField->save([
+ 'variable' => self::EXTRAFIELD_STUDENT_ID,
+ 'field_type' => ExtraField::FIELD_TYPE_TEXT,
+ 'display_text' => $this->get_lang('StudentId'),
+ 'visible_to_self' => true,
+ 'changeable' => true
+ ]);
+ }
+
+ $cExtraField = new ExtraField('course');
+
+ if (!$cExtraField->get_handler_field_info_by_field_variable(self::EXTRAFIELD_COURSE_PROVIDER_ID)) {
+ $cExtraField->save([
+ 'variable' => self::EXTRAFIELD_COURSE_PROVIDER_ID,
+ 'field_type' => ExtraField::FIELD_TYPE_TEXT,
+ 'display_text' => $this->get_lang('ProviderId'),
+ 'visible_to_self' => true,
+ 'changeable' => true
+ ]);
+ }
+
+ if (!$cExtraField->get_handler_field_info_by_field_variable(self::EXTRAFIELD_COURSE_ID)) {
+ $cExtraField->save([
+ 'variable' => self::EXTRAFIELD_COURSE_ID,
+ 'field_type' => ExtraField::FIELD_TYPE_TEXT,
+ 'display_text' => $this->get_lang('CourseId'),
+ 'visible_to_self' => true,
+ 'changeable' => true
+ ]);
+ }
+
+ if (!$cExtraField->get_handler_field_info_by_field_variable(self::EXTRAFIELD_COURSE_HOURS)) {
+ $cExtraField->save([
+ 'variable' => self::EXTRAFIELD_COURSE_HOURS,
+ 'field_type' => ExtraField::FIELD_TYPE_TEXT,
+ 'display_text' => $this->get_lang('CourseHours'),
+ 'visible_to_self' => true,
+ 'changeable' => true
+ ]);
+ }
+ }
+
+ /**
+ * Remove extra fields for this plugin
+ */
+ private function setDownExtraFields()
+ {
+ $uExtraField = new ExtraField('user');
+
+ $studentIdField = $uExtraField->get_handler_field_info_by_field_variable(self::EXTRAFIELD_STUDENT_ID);
+
+ if ($studentIdField) {
+ $uExtraField->delete($studentIdField['id']);
+ }
+
+ $cExtraField = new ExtraField('course');
+
+ $proviedIdField = $cExtraField->get_handler_field_info_by_field_variable(self::EXTRAFIELD_COURSE_PROVIDER_ID);
+ $courseIdField = $cExtraField->get_handler_field_info_by_field_variable(self::EXTRAFIELD_COURSE_ID);
+ $courseHoursField = $cExtraField->get_handler_field_info_by_field_variable(self::EXTRAFIELD_COURSE_HOURS);
+
+ if ($proviedIdField) {
+ $cExtraField->delete($proviedIdField['id']);
+ }
+
+ if ($courseIdField) {
+ $cExtraField->delete($courseIdField['id']);
+ }
+
+ if ($courseHoursField) {
+ $cExtraField->delete($courseHoursField['id']);
+ }
+ }
+
+ /**
+ * @return \FormValidator|void
+ */
+ public function getForm()
+ {
+ $extraField = new ExtraField('course');
+ $courseIdField = $extraField->get_handler_field_info_by_field_variable(self::EXTRAFIELD_COURSE_ID);
+
+ if (!$courseIdField) {
+ return null;
+ }
+
+ $extraFieldValue = new ExtraFieldValue('course');
+ $courseIdValue = $extraFieldValue->get_values_by_handler_and_field_variable(
+ api_get_course_int_id(),
+ self::EXTRAFIELD_COURSE_ID
+ );
+
+ $form = new FormValidator('frm_grading_electronic');
+ $form->addDateRangePicker(
+ 'range',
+ get_lang('DateRange'),
+ true,
+ [
+ 'id' => 'range',
+ 'format' => 'YYYY-MM-DD',
+ 'timePicker' => 'false',
+ 'validate_format' => 'Y-m-d'
+ ]
+ );
+ $form->addText('course', $this->get_lang('CourseId'));
+ $form->addButtonDownload(get_lang('Generate'));
+ $form->addRule('course', get_lang('ThisFieldIsRequired'), 'required');
+ $form->setDefaults([
+ 'course' => $courseIdValue ? $courseIdValue['value'] : null
+ ]);
+
+ return $form;
+ }
+
+ /**
+ * Check if the current use is allowed to see the button
+ * @return bool
+ */
+ public function isAllowed()
+ {
+ $allowed = api_is_teacher() || api_is_platform_admin() || api_is_course_tutor();
+
+ if (!$allowed) {
+ return false;
+ }
+
+ $toolIsEnabled = $this->get('tool_enable') === 'true';
+
+ if (!$toolIsEnabled) {
+ return false;
+ }
+
+ return true;
+ }
+}
diff --git a/plugin/grading_electronic/uninstall.php b/plugin/grading_electronic/uninstall.php
new file mode 100644
index 0000000000..5f8498a7ad
--- /dev/null
+++ b/plugin/grading_electronic/uninstall.php
@@ -0,0 +1,4 @@
+uninstall();
diff --git a/plugin/grading_electronic/view/grading.html.twig b/plugin/grading_electronic/view/grading.html.twig
new file mode 100644
index 0000000000..5d63ba3b98
--- /dev/null
+++ b/plugin/grading_electronic/view/grading.html.twig
@@ -0,0 +1,43 @@
+{% if grading_electronic.show %}
+
+
+