5918-worker.time-control_resend #1685

Merged
alexm merged 14 commits from 5918-worker.time-control_resend into dev 2023-10-18 09:10:19 +00:00
4 changed files with 49 additions and 59 deletions
Showing only changes of commit df6d10e514 - Show all commits

View File

@ -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 models = Self.app.models;
const args = ctx.args;
const myOptions = {}; const myOptions = {};
if (typeof options == 'object') if (typeof options == 'object')
Object.assign(myOptions, options); Object.assign(myOptions, options);
const workerTimeControlMail = await models.WorkerTimeControlMail.findOne({ const [sent] = await models.WorkerTimeControlMail.find({
where: { where: {
workerFk: workerId, year: args.year,
year, week: args.week,
week },
} limit: 1
}, myOptions); }, myOptions);
console.log('workerTimeControlMail: ', workerTimeControlMail); if (!sent) throw new UserError(`There aren't records for this week`);
if (!workerTimeControlMail) throw new UserError(`There aren't records for this week`);
await workerTimeControlMail.updateAttributes({ const workerTimeControlMail = await models.WorkerTimeControlMail.upsertWithWhere(
state, {
reason: reason || null year: args.year,
}, myOptions); 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({ await workerTimeControlMail.updateAttributes({
sendedCounter: workerTimeControlMail.sendedCounter + 1 sendedCounter: workerTimeControlMail.sendedCounter + 1
}, myOptions); }, myOptions);

View File

@ -61,9 +61,8 @@ module.exports = Self => {
const url = `${salix.url}worker/${args.workerId}/time-control?timestamp=${timestamp}`; const url = `${salix.url}worker/${args.workerId}/time-control?timestamp=${timestamp}`;
ctx.args.url = url; ctx.args.url = url;
await Self.sendTemplate(ctx, 'weekly-hour-record'); await models.WorkerTimeControl.updateWorkerTimeControlMail(ctx, myOptions);
return Self.sendTemplate(ctx, 'weekly-hour-record');
return models.WorkerTimeControl.updateWorkerTimeControlMail(ctx, myOptions);
}; };
function getMondayDateFromYearWeek(yearNumber, weekNumber) { function getMondayDateFromYearWeek(yearNumber, weekNumber) {

View File

@ -102,7 +102,7 @@
ng-click="sendEmailConfirmation.show()" ng-click="sendEmailConfirmation.show()"
class="right" class="right"
vn-tooltip="Resend email of this week to the user" 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>
</vn-button-bar> </vn-button-bar>
</div> </div>

View File

@ -53,6 +53,8 @@ class Controller extends Section {
set worker(value) { set worker(value) {
this._worker = value; this._worker = value;
this.fetchHours(); this.fetchHours();
if (this.date)
this.getWeekData();
} }
/** /**
@ -110,8 +112,8 @@ class Controller extends Section {
} }
if (!this.weekTotalHours) this.fetchHours(); if (!this.weekTotalHours) this.fetchHours();
this.getWeekData(); if (this.worker)
this.isMailSended(); this.getWeekData();
} }
set weekTotalHours(totalHours) { set weekTotalHours(totalHours) {
@ -128,21 +130,23 @@ class Controller extends Section {
workerFk: this.$params.id, workerFk: this.$params.id,
year: this._date.getFullYear(), year: this._date.getFullYear(),
week: this.getWeekNumber(this._date) week: this.getWeekNumber(this._date)
} },
}; };
this.$http.get('WorkerTimeControlMails', {filter}) this.$http.get('WorkerTimeControlMails', {filter})
.then(res => { .then(res => {
const mail = res.data; if (!res.data.length) {
if (!mail.length) {
this.state = null; this.state = null;
return; return;
} }
this.state = mail[0].state; const [mail] = res.data;
this.reason = mail[0].reason; this.state = mail.state;
this.reason = mail.reason;
}); });
this.canBeResend();
} }
isMailSended() { canBeResend() {
this.canResend = false;
const filter = { const filter = {
where: { where: {
year: this._date.getFullYear(), year: this._date.getFullYear(),
@ -150,27 +154,10 @@ class Controller extends Section {
}, },
limit: 1 limit: 1
}; };
// no repeat request
this.$http.get('WorkerTimeControlMails', {filter}) this.$http.get('WorkerTimeControlMails', {filter})
.then(res => { .then(res => {
if (!res.data.length) { if (res.data.length)
this.canResend = false; this.canResend = true;
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;
});
}); });
} }
@ -389,30 +376,25 @@ class Controller extends Section {
} }
isSatisfied() { isSatisfied() {
const params = { this.updateWorkerTimeControlMail('CONFIRMED');
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!'));
});
} }
isUnsatisfied() { isUnsatisfied() {
if (!this.reason) throw new UserError(`You must indicate a reason`); if (!this.reason) throw new UserError(`You must indicate a reason`);
this.updateWorkerTimeControlMail('REVISE', this.reason);
}
updateWorkerTimeControlMail(state, reason) {
const params = { const params = {
workerId: this.worker.id, workerId: this.worker.id,
year: this.date.getFullYear(), year: this.date.getFullYear(),
week: this.weekNumber, week: this.weekNumber,
state: 'REVISE', state
reason: this.reason
}; };
if (reason)
params.reason = reason;
const query = `WorkerTimeControls/updateWorkerTimeControlMail`; const query = `WorkerTimeControls/updateWorkerTimeControlMail`;
this.$http.post(query, params).then(() => { this.$http.post(query, params).then(() => {
this.getMailStates(this.date); this.getMailStates(this.date);