diff --git a/modules/worker/back/methods/worker-time-control/updateWorkerTimeControlMail.js b/modules/worker/back/methods/worker-time-control/updateWorkerTimeControlMail.js
index e12cf9c592..4e41a5bdd0 100644
--- a/modules/worker/back/methods/worker-time-control/updateWorkerTimeControlMail.js
+++ b/modules/worker/back/methods/worker-time-control/updateWorkerTimeControlMail.js
@@ -37,31 +37,40 @@ module.exports = Self => {
         }
     });
 
-    Self.updateWorkerTimeControlMail = async(ctx, workerId, year, week, state, reason, options) => {
+    Self.updateWorkerTimeControlMail = async(ctx, options) => {
         const models = Self.app.models;
-
+        const args = ctx.args;
         const myOptions = {};
 
         if (typeof options == 'object')
             Object.assign(myOptions, options);
 
-        const workerTimeControlMail = await models.WorkerTimeControlMail.findOne({
+        const [sent] = await models.WorkerTimeControlMail.find({
             where: {
-                workerFk: workerId,
-                year,
-                week
-            }
+                year: args.year,
+                week: args.week,
+            },
+            limit: 1
         }, myOptions);
 
-        console.log('workerTimeControlMail: ', workerTimeControlMail);
-        if (!workerTimeControlMail) throw new UserError(`There aren't records for this week`);
+        if (!sent) throw new UserError(`There aren't records for this week`);
 
-        await workerTimeControlMail.updateAttributes({
-            state,
-            reason: reason || null
-        }, myOptions);
+        const workerTimeControlMail = await models.WorkerTimeControlMail.upsertWithWhere(
+            {
+                year: args.year,
+                week: args.week,
+                workerFk: args.workerId
+            },
+            {
+                state: args.state,
+                reason: args.workerId,
+                year: args.year,
+                week: args.week,
+                workerFk: args.workerId
+            },
+            myOptions);
 
-        if (state == 'SENDED') {
+        if (args.state == 'SENDED') {
             await workerTimeControlMail.updateAttributes({
                 sendedCounter: workerTimeControlMail.sendedCounter + 1
             }, myOptions);
diff --git a/modules/worker/back/methods/worker-time-control/weeklyHourRecordEmail.js b/modules/worker/back/methods/worker-time-control/weeklyHourRecordEmail.js
index 3203dea827..816a1d22b5 100644
--- a/modules/worker/back/methods/worker-time-control/weeklyHourRecordEmail.js
+++ b/modules/worker/back/methods/worker-time-control/weeklyHourRecordEmail.js
@@ -61,9 +61,8 @@ module.exports = Self => {
         const url = `${salix.url}worker/${args.workerId}/time-control?timestamp=${timestamp}`;
         ctx.args.url = url;
 
-        await Self.sendTemplate(ctx, 'weekly-hour-record');
-
-        return models.WorkerTimeControl.updateWorkerTimeControlMail(ctx, myOptions);
+        await models.WorkerTimeControl.updateWorkerTimeControlMail(ctx, myOptions);
+        return Self.sendTemplate(ctx, 'weekly-hour-record');
     };
 
     function getMondayDateFromYearWeek(yearNumber, weekNumber) {
diff --git a/modules/worker/front/time-control/index.html b/modules/worker/front/time-control/index.html
index 847eb95056..ce8a663560 100644
--- a/modules/worker/front/time-control/index.html
+++ b/modules/worker/front/time-control/index.html
@@ -102,7 +102,7 @@
             ng-click="sendEmailConfirmation.show()"
             class="right"
             vn-tooltip="Resend email of this week to the user"
-            ng-show="$ctrl.isHr && $ctrl.canResend">
+            ng-show="$ctrl.isHr && $ctrl.state != 'CONFIRMED' && $ctrl.canResend">
         </vn-button>
     </vn-button-bar>
 </div>
diff --git a/modules/worker/front/time-control/index.js b/modules/worker/front/time-control/index.js
index 4bf25886fa..9137d78393 100644
--- a/modules/worker/front/time-control/index.js
+++ b/modules/worker/front/time-control/index.js
@@ -53,6 +53,8 @@ class Controller extends Section {
     set worker(value) {
         this._worker = value;
         this.fetchHours();
+        if (this.date)
+            this.getWeekData();
     }
 
     /**
@@ -110,8 +112,8 @@ class Controller extends Section {
         }
 
         if (!this.weekTotalHours) this.fetchHours();
-        this.getWeekData();
-        this.isMailSended();
+        if (this.worker)
+            this.getWeekData();
     }
 
     set weekTotalHours(totalHours) {
@@ -128,21 +130,23 @@ class Controller extends Section {
                 workerFk: this.$params.id,
                 year: this._date.getFullYear(),
                 week: this.getWeekNumber(this._date)
-            }
+            },
         };
         this.$http.get('WorkerTimeControlMails', {filter})
             .then(res => {
-                const mail = res.data;
-                if (!mail.length) {
+                if (!res.data.length) {
                     this.state = null;
                     return;
                 }
-                this.state = mail[0].state;
-                this.reason = mail[0].reason;
+                const [mail] = res.data;
+                this.state = mail.state;
+                this.reason = mail.reason;
             });
+        this.canBeResend();
     }
 
-    isMailSended() {
+    canBeResend() {
+        this.canResend = false;
         const filter = {
             where: {
                 year: this._date.getFullYear(),
@@ -150,27 +154,10 @@ class Controller extends Section {
             },
             limit: 1
         };
-        // no repeat request
         this.$http.get('WorkerTimeControlMails', {filter})
             .then(res => {
-                if (!res.data.length) {
-                    this.canResend = false;
-                    return;
-                }
-
-                const filter = {
-                    where: {
-                        workerFk: this.$params.id
-                    },
-                    include: {
-                        relation: 'department'
-                    }
-                };
-                this.$http.get('WorkerDepartments/findOne', {filter})
-                    .then(res => {
-                        const department = res.data.department;
-                        if (department.isTeleworking) this.canResend = true;
-                    });
+                if (res.data.length)
+                    this.canResend = true;
             });
     }
 
@@ -389,30 +376,25 @@ class Controller extends Section {
     }
 
     isSatisfied() {
-        const params = {
-            workerId: this.worker.id,
-            year: this.date.getFullYear(),
-            week: this.weekNumber,
-            state: 'CONFIRMED'
-        };
-        const query = `WorkerTimeControls/updateWorkerTimeControlMail`;
-        this.$http.post(query, params).then(() => {
-            this.getMailStates(this.date);
-            this.getWeekData();
-            this.vnApp.showSuccess(this.$t('Data saved!'));
-        });
+        this.updateWorkerTimeControlMail('CONFIRMED');
     }
 
     isUnsatisfied() {
         if (!this.reason) throw new UserError(`You must indicate a reason`);
+        this.updateWorkerTimeControlMail('REVISE', this.reason);
+    }
 
+    updateWorkerTimeControlMail(state, reason) {
         const params = {
             workerId: this.worker.id,
             year: this.date.getFullYear(),
             week: this.weekNumber,
-            state: 'REVISE',
-            reason: this.reason
+            state
         };
+
+        if (reason)
+            params.reason = reason;
+
         const query = `WorkerTimeControls/updateWorkerTimeControlMail`;
         this.$http.post(query, params).then(() => {
             this.getMailStates(this.date);